/* typehints:start */ import { GameRoot } from "../game/root"; /* typehints:end */ import { gComponentRegistry } from "../core/global_registries"; import { createLogger } from "../core/logging"; import { Entity } from "../game/entity"; // Internal serializer methods export class SerializerInternal { constructor() {} /** * Serializes an array of entities * @param {Array} array */ serializeEntityArray(array) { const serialized = []; for (let i = 0; i < array.length; ++i) { const entity = array[i]; if (!entity.queuedForDestroy && !entity.destroyed) { serialized.push(entity.serialize()); } } return serialized; } /** * * @param {GameRoot} root * @param {Array} array * @returns {string|void} */ deserializeEntityArray(root, array) { for (let i = 0; i < array.length; ++i) { this.deserializeEntity(root, array[i]); } } /** * * @param {GameRoot} root * @param {Entity} payload */ deserializeEntity(root, payload) { const entity = new Entity(root); this.deserializeComponents(entity, payload.components); root.entityMgr.registerEntity(entity, payload.uid); if (entity.components.StaticMapEntity) { root.map.placeStaticEntity(entity); } } /////// COMPONENTS //// /** * Deserializes components of an entity * @param {Entity} entity * @param {Object.} data * @returns {string|void} */ deserializeComponents(entity, data) { for (const componentId in data) { const componentClass = gComponentRegistry.findById(componentId); const componentHandle = new componentClass({}); entity.addComponent(componentHandle); const errorStatus = componentHandle.deserialize(data[componentId]); if (errorStatus) { return errorStatus; } } } }