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, }; } static type() { return 'directional'; } constructor(entity, params, state) { super(entity, params, state); this.directionCount = this.params.directionCount; } listeners() { const listeners = {}; if (this.params.trackMovement) { listeners.movementRequest = (vector) => { this.entity.direction = Vector.toDirection(vector, this.directionCount); }; } return listeners; } }