import {compose} from '@avocado/core'; import {Container} from '@avocado/graphics'; import {simpleState, Trait} from '../trait'; const decorate = compose( ); class GraphicalBase extends Trait { static defaultParams() { return { trackPosition: true, }; } static defaultState() { return {}; } constructor(...args) { super(...args); this._container = new Container(); } get container() { return this._container; } listeners() { const trackPosition = this.params.get('trackPosition'); if (!trackPosition || !this._container.isValid) { return {}; } return { traitAdded: (trait) => { if ('positioned' === trait.constructor.type()) { this._container.position = this.entity.position; } }, xChanged: (x) => { this._container.x = x; }, yChanged: (y) => { this._container.y = y; }, } } } export class Graphical extends decorate(GraphicalBase) {}