import Component from '@/ecs/component.js'; export default class Interactive extends Component { instanceFromSchema() { const {ecs} = this; return class ControlledInstance extends super.instanceFromSchema() { interact(initiator) { this.interactScriptInstance.context.initiator = initiator; const {Ticking} = ecs.get(this.entity); Ticking.addTickingPromise(this.interactScriptInstance.tickingPromise()); } get interacting() { return !!this.$$interacting; } set interacting(interacting) { this.$$interacting = interacting ? 1 : 0; } } } async load(instance) { // heavy handed... if ('undefined' !== typeof window) { return; } instance.interactScriptInstance = await this.ecs.readScript( instance.interactScript, { ecs: this.ecs, subject: this.ecs.get(instance.entity), }, ); } static properties = { interacting: {type: 'uint8'}, interactScript: {type: 'string'}, }; }