DCSOlympus/client/src/units/unitdatabase.ts

80 lines
2.4 KiB
TypeScript

export class UnitDatabase {
blueprints: { [key: string]: UnitBlueprint } = {};
constructor() {
}
/* Returns a list of all possible roles in a database */
getRoles() {
var roles: string[] = [];
for (let unit in this.blueprints) {
for (let loadout of this.blueprints[unit].loadouts) {
for (let role of loadout.roles) {
if (role !== "" && !roles.includes(role))
roles.push(role);
}
}
}
return roles;
}
/* Gets a specific blueprint by name */
getByName(name: string) {
if (name in this.blueprints)
return this.blueprints[name];
return null;
}
/* Gets a specific blueprint by label */
getByLabel(label: string) {
for (let unit in this.blueprints) {
if (this.blueprints[unit].label === label)
return this.blueprints[unit];
}
return null;
}
/* Gets a specific blueprint by range */
getByRange(range: string) {
for (let unit in this.blueprints) {
if (this.blueprints[unit].range === range)
return this.blueprints[unit];
}
return null;
}
/* Get all blueprints by role */
getByRole(role: string) {
var units = [];
for (let unit in this.blueprints) {
for (let loadout of this.blueprints[unit].loadouts) {
if (loadout.roles.includes(role) || loadout.roles.includes(role.toLowerCase())) {
units.push(this.blueprints[unit])
break;
}
}
}
return units;
}
/* Get the names of all the loadouts for a specific unit and for a specific role */
getLoadoutNamesByRole(name: string, role: string) {
var loadouts = [];
for (let loadout of this.blueprints[name].loadouts) {
if (loadout.roles.includes(role) || loadout.roles.includes("")) {
loadouts.push(loadout.name)
}
}
return loadouts;
}
/* Get the loadout content from the unit name and loadout name */
getLoadoutByName(name: string, loadoutName: string) {
for (let loadout of this.blueprints[name].loadouts) {
if (loadout.name === loadoutName)
return loadout;
}
return null;
}
}