avocado-old/packages/entity/traits/graphical.js

64 lines
1.3 KiB
JavaScript

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,
};
}
constructor(...args) {
super(...args);
if (hasGraphics) {
this._container = new Container();
}
this.trackPosition = this.params.get('trackPosition');
}
hasInitialized() {
if (this.shouldSynchronizePosition()) {
this.synchronizePosition();
}
}
get container() {
return this._container;
}
shouldSynchronizePosition() {
return hasGraphics && this.trackPosition && 'position' in this.entity;
}
synchronizePosition() {
if ('position' in this.entity) {
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) {}