47 lines
1.1 KiB
JavaScript
47 lines
1.1 KiB
JavaScript
|
import Component from '@/ecs/component.js';
|
||
|
|
||
|
export default class Behaving extends Component {
|
||
|
instanceFromSchema() {
|
||
|
return class BehavingInstance extends super.instanceFromSchema() {
|
||
|
$$routineInstances = {};
|
||
|
tick(elapsed) {
|
||
|
const routine = this.$$routineInstances[this.currentRoutine];
|
||
|
if (routine) {
|
||
|
routine.tick(elapsed);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
async load(instance) {
|
||
|
// heavy handed...
|
||
|
if ('undefined' !== typeof window) {
|
||
|
return;
|
||
|
}
|
||
|
const promises = [];
|
||
|
for (const key in instance.routines) {
|
||
|
promises.push(
|
||
|
this.ecs.readScript(
|
||
|
instance.routines[key],
|
||
|
{
|
||
|
entity: this.ecs.get(instance.entity),
|
||
|
},
|
||
|
)
|
||
|
.then((script) => {
|
||
|
instance.$$routineInstances[key] = script;
|
||
|
}),
|
||
|
);
|
||
|
}
|
||
|
await Promise.all(promises);
|
||
|
}
|
||
|
static properties = {
|
||
|
currentRoutine: {defaultValue: 'initial', type: 'string'},
|
||
|
isBehaving: {defaultValue: 1, type: 'uint8'},
|
||
|
routines: {
|
||
|
type: 'map',
|
||
|
value: {
|
||
|
type: 'string',
|
||
|
},
|
||
|
},
|
||
|
};
|
||
|
}
|