39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
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'},
|
|
};
|
|
}
|