import { Container } from "../../../pixi/pixi.mjs"; import { SceneObject } from "../../SceneObjects/SceneObject"; import { worldCoordinatesToChunkLocalCoordinates } from "../WorldGen"; import { TerrainTile } from "../WorldObjects/TerrainTile/TerrainTile"; import { VegetationTile } from "../WorldObjects/VegetationTile/VegetationTile"; export class ChunkStorageTypes { static TYPE_TERRAIN = 0; static TYPE_VEGETATION = 1; static TYPE_BUILDINGS = 2; static TYPE_NPC = 3; }; export class WorldChunk extends SceneObject { /** * @type Map */ terrainStorage = new Map(); /** * @type Map */ vegetationStorage = new Map(); /** * @type Map */ buildingsStorage = new Map(); /** * property to handle chunk visibility */ centralChunk = false; /** * * @param {SceneObject} object * @param {ChunkStorageTypes} storageType * @param {String} objectId */ addToChunk(object, storageType, objectId) { switch (storageType) { case ChunkStorageTypes.TYPE_TERRAIN: this.terrainStorage.set(objectId, object); break; case ChunkStorageTypes.TYPE_VEGETATION: this.vegetationStorage.set(objectId, object); break; case ChunkStorageTypes.TYPE_BUILDINGS: this.buildingsStorage.set(objectId, object); break; default: return false; } this.drawObject.addChild(object.drawObject); return true; } /** * * @param {SceneObject} object * @param {ChunkStorageTypes} storageType * @param {String} objectId */ removeFromChunk(object, storageType, objectId) { switch (storageType) { case ChunkStorageTypes.TYPE_TERRAIN: this.terrainStorage.delete(objectId); break; case ChunkStorageTypes.TYPE_VEGETATION: this.vegetationStorage.delete(objectId); break; case ChunkStorageTypes.TYPE_BUILDINGS: this.buildingsStorage.delete(objectId); break; default: return false; } this.drawObject.removeChild(object.drawObject); return true; }; /** * * @param {Number} xWorld * @param {Number} yWorld * @param {ChunkStorageTypes} storageType * @returns SceneObject or undefined */ getFromChunk(xWorld, yWorld, storageType) { let coords = worldCoordinatesToChunkLocalCoordinates(xWorld, yWorld); switch (storageType) { case ChunkStorageTypes.TYPE_TERRAIN: return this.terrainStorage.get(coords.x + "_" + coords.y); case ChunkStorageTypes.TYPE_VEGETATION: return this.vegetationStorage.get(coords.x + "_" + coords.y); case ChunkStorageTypes.TYPE_BUILDINGS: return this.buildingsStorage.get(coords.x + "_" + coords.y); default: return undefined; } } };