import {compose} from '@avocado/core'; import {hasGraphics, Container} from '@avocado/graphics'; import {simpleState, Trait} from '../trait'; const decorate = compose( ); class GraphicalBase extends Trait { static defaultParams() { return { trackPosition: true, }; } initialize() { if (hasGraphics) { this._container = new Container(); } this.trackPosition = this.params.get('trackPosition'); if (this.shouldSynchronizePosition()) { this.synchronizePosition(); } } get container() { return this._container; } shouldSynchronizePosition() { return hasGraphics && this.trackPosition; } synchronizePosition() { if (!('position' in this.entity)) { return; } this.entity.container.position = this.entity.position; } listeners() { const listeners = {}; if (this.shouldSynchronizePosition()) { listeners.traitAdded = (trait) => { if ('positioned' !== trait.constructor.type()) { return; } this.synchronizePosition(); }; listeners.positionChanged = () => { this.synchronizePosition(); }; } return listeners; } } export class Graphical extends decorate(GraphicalBase) {}