import {compose, TickingPromise} from '@avocado/core'; import {TransitionResult} from '@avocado/timing'; 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) {}