import Component from '@/ecs/component.js'; import Script from '@/util/script.js'; export default class Wielder extends Component { instanceFromSchema() { const {ecs} = this; const Instance = super.instanceFromSchema(); return class WielderInstance extends Instance { activeItem() { const {Inventory, Wielder} = ecs.get(this.entity); return Inventory.item(Wielder.activeSlot + 1); } useActiveItem(state) { const entity = ecs.get(this.entity); const {Ticking} = entity; const activeItem = this.activeItem(); if (activeItem) { ecs.readAsset([activeItem.source, state ? 'start.js' : 'stop.js'].join('/')) .then((code) => { if (code.byteLength > 0) { const context = { ecs, item: activeItem, wielder: entity, }; Ticking.addTickingPromise(Script.tickingPromise((new TextDecoder()).decode(code), context)); } }); } } } } static properties = { activeSlot: {type: 'uint16'}, }; }