UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

58 lines (43 loc) 1.41 kB
import {resolvePath} from "../../../core/json/resolvePath.js"; export class ComponentPropertyBinding { /** * @type {ComponentPropertyPath} */ path = null; /** * * @type {Vector1|Vector2|Vector3|ObservedBoolean} */ value = null; /** * @template T * @param {EntityComponentDataset} ecd * @param {number} entity * @returns {T} */ __resolve_component(ecd, entity) { const className = this.path.component; const ComponentClass = ecd.getComponentClassByName(className); if (ComponentClass === null) { throw new Error(`Component class '${className}' not found in the dataset`); } const component = ecd.getComponent(entity, ComponentClass); if (component === undefined) { throw new Error(`Component '${className}' is not found on entity '${entity}'`); } return component; } /** * * @param {EntityComponentDataset} ecd * @param {number} entity */ resolve(ecd, entity) { const component = this.__resolve_component(ecd, entity); const value = resolvePath(component, this.path.path); if (value === undefined) { throw new Error(`Property ${this.path.path} is undefined`); } this.value = value; } }