import {compose, TickingPromise} from '@avocado/core'; import {TransitionResult} from '@avocado/timing'; import {StateProperty, Trait} from '../trait'; const decorate = compose( StateProperty('name'), StateProperty('isTicking'), ); export class Existent extends decorate(Trait) { static defaultState() { return { name: 'Untitled entity', isTicking: true, }; } static type() { return 'existent'; } constructor(entity, params, state) { super(entity, params, state); this._isTicking = this.params.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; }, }; } }