48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import { getAllBuildings } from '../../db/buildings';
|
|
import DBBuilding from '../../../types/db/DBBuilding';
|
|
import { Planet } from './PlanetManager';
|
|
import { updatePlanetBuildings } from '../../db/planets';
|
|
import Building from '../Building';
|
|
|
|
export default class BuildingManager {
|
|
buildings: Array<Building> = [];
|
|
buildingsDB: Array<DBBuilding> = []
|
|
planet: Planet;
|
|
|
|
constructor(planet: Planet) {
|
|
this.planet = planet;
|
|
}
|
|
|
|
async init(buildingData: { id: string, level: number }[]) {
|
|
this.buildingsDB = await getAllBuildings();
|
|
buildingData.forEach(building => {
|
|
const buildingToFind = this.buildingsDB.find(b => b.id === building.id);
|
|
|
|
if(buildingToFind) this.buildings.push(new Building(
|
|
this,
|
|
buildingToFind,
|
|
building.level
|
|
))
|
|
})
|
|
|
|
return this;
|
|
}
|
|
|
|
getBuildingById(id: string) {
|
|
return this.buildings.find(building => building.data.id === id);
|
|
}
|
|
|
|
addBuilding(building: Building) {
|
|
const findBuilding = this.buildings.find(b => b.data.id === building.data.id);
|
|
if(!findBuilding) this.buildings.push(building);
|
|
else findBuilding.level++;
|
|
}
|
|
|
|
removeBuilding(id: string) {
|
|
this.buildings = this.buildings.filter(building => building.data.id !== id);
|
|
}
|
|
|
|
async sync() {
|
|
await updatePlanetBuildings(this.planet._id, this.buildings.map(building => { return { id: building.data.id, level: building.level } }));
|
|
}
|
|
} |