import {compose} from '@avocado/core'; import {Vector} from '@avocado/math'; import {simpleState, Trait} from '../trait'; const decorate = compose( simpleState('direction', { track: true, }), ); class DirectionalBase extends Trait { static defaultParams() { return { directionCount: 1, trackMovement: true, }; } static defaultState() { return { direction: 0, }; } constructor(entity, params, state) { super(...arguments); 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; } } export class Directional extends decorate(DirectionalBase) {}