42 lines
779 B
JavaScript
42 lines
779 B
JavaScript
import {compose} from '@avocado/core';
|
|
import {Vector} from '@avocado/math';
|
|
|
|
import {StateProperty, Trait} from '../trait';
|
|
|
|
const decorate = compose(
|
|
StateProperty('direction', {
|
|
track: true,
|
|
}),
|
|
);
|
|
|
|
export class Directional extends decorate(Trait) {
|
|
|
|
static defaultParams() {
|
|
return {
|
|
directionCount: 1,
|
|
trackMovement: true,
|
|
};
|
|
}
|
|
|
|
static defaultState() {
|
|
return {
|
|
direction: 0,
|
|
};
|
|
}
|
|
|
|
initialize() {
|
|
this.directionCount = this.params.get('directionCount');
|
|
}
|
|
|
|
listeners() {
|
|
const listeners = {};
|
|
if (this.params.get('trackMovement')) {
|
|
listeners.movementRequest = (vector) => {
|
|
this.entity.direction = Vector.toDirection(vector, this.directionCount);
|
|
};
|
|
}
|
|
return listeners;
|
|
}
|
|
|
|
}
|