58 lines
933 B
JavaScript
58 lines
933 B
JavaScript
|
import {compose} from '@avocado/core';
|
||
|
|
||
|
import {simpleState, Trait} from '../trait';
|
||
|
|
||
|
const decorate = compose(
|
||
|
simpleState('name'),
|
||
|
);
|
||
|
|
||
|
class ExistentBase extends Trait {
|
||
|
|
||
|
constructor(...args) {
|
||
|
super(...args);
|
||
|
this._isTicking = this.params.get('isTicking');
|
||
|
}
|
||
|
|
||
|
static defaultParams() {
|
||
|
return {
|
||
|
isTicking: true,
|
||
|
};
|
||
|
}
|
||
|
|
||
|
static defaultState() {
|
||
|
return {
|
||
|
name: 'Untitled entity',
|
||
|
};
|
||
|
}
|
||
|
|
||
|
get isTicking() {
|
||
|
return this._isTicking;
|
||
|
}
|
||
|
|
||
|
set isTicking(isTicking) {
|
||
|
this._isTicking = isTicking;
|
||
|
}
|
||
|
|
||
|
actions() {
|
||
|
return {
|
||
|
|
||
|
destroy: () => {
|
||
|
this.isTicking = false;
|
||
|
this.entity.emit('destroy');
|
||
|
this.entity.emit('destroyed');
|
||
|
},
|
||
|
|
||
|
tick: (elapsed) => {
|
||
|
if (!this.isTicking) {
|
||
|
return;
|
||
|
}
|
||
|
this.entity.emit('tick', elapsed);
|
||
|
},
|
||
|
|
||
|
};
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export class Existent extends decorate(ExistentBase) {}
|