avocado-old/packages/entity/traits/existent.trait.js
2019-04-19 17:10:32 -05:00

55 lines
1.1 KiB
JavaScript

import {compose, TickingPromise} from '@avocado/core';
import {TransitionResult} from '@avocado/mixins';
import {StateProperty, Trait} from '../trait';
const decorate = compose(
StateProperty('name'),
StateProperty('isTicking'),
);
class ExistentBase extends Trait {
static defaultState() {
return {
name: 'Untitled entity',
isTicking: true,
};
}
initialize() {
this._isTicking = this.params.get('isTicking');
}
methods() {
return {
destroy: () => {
this.entity.isTicking = false;
this.entity.emit('destroy');
this.entity.emit('destroyed');
},
transition: (props, duration, easing) => {
const result = new TransitionResult(
this.entity,
props,
duration,
easing
);
const promise = new TickingPromise((resolve) => {
resolve(result.promise);
});
promise.ticker = (elapsed) => {
result.tick(elapsed);
}
return promise;
},
};
}
}
export class Existent extends decorate(ExistentBase) {}