silphius/app/ecs-components/wielder.js
2024-06-28 09:28:29 -05:00

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'},
};
}