106 lines
3.1 KiB
JavaScript
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;
|
|
}
|
|
}
|
|
}; |