UNPKG

ecsy

Version:
71 lines (54 loc) 1.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ComponentManager = void 0; var _ObjectPool = require("./ObjectPool.js"); class ComponentManager { constructor() { this.Components = []; this._ComponentsMap = {}; this._componentPool = {}; this.numComponents = {}; this.nextComponentId = 0; } hasComponent(Component) { return this.Components.indexOf(Component) !== -1; } registerComponent(Component, objectPool) { if (this.Components.indexOf(Component) !== -1) { console.warn(`Component type: '${Component.getName()}' already registered.`); return; } const schema = Component.schema; if (!schema) { throw new Error(`Component "${Component.getName()}" has no schema property.`); } for (const propName in schema) { const prop = schema[propName]; if (!prop.type) { throw new Error(`Invalid schema for component "${Component.getName()}". Missing type for "${propName}" property.`); } } Component._typeId = this.nextComponentId++; this.Components.push(Component); this._ComponentsMap[Component._typeId] = Component; this.numComponents[Component._typeId] = 0; if (objectPool === undefined) { objectPool = new _ObjectPool.ObjectPool(Component); } else if (objectPool === false) { objectPool = undefined; } this._componentPool[Component._typeId] = objectPool; } componentAddedToEntity(Component) { this.numComponents[Component._typeId]++; } componentRemovedFromEntity(Component) { this.numComponents[Component._typeId]--; } getComponentsPool(Component) { return this._componentPool[Component._typeId]; } } exports.ComponentManager = ComponentManager;