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; } }