53 lines
997 B
JavaScript
53 lines
997 B
JavaScript
|
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(entity) {
|
||
|
super(entity);
|
||
|
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) {}
|