106 lines
3.1 KiB
JavaScript

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<String, TerrainTile>
*/
terrainStorage = new Map();
/**
* @type Map<String, VegetationTile>
*/
vegetationStorage = new Map();
/**
* @type Map<String, BuildingTile>
*/
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;
}
}
};