import {compose} from '@avocado/core'; import {Vector} from '@avocado/math'; import {StateProperty, Trait} from '../trait'; import {TraitDirectionalPacket} from '../packets/trait-directional.packet'; 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; } acceptPacket(packet) { if (packet instanceof TraitDirectionalPacket) { this.entity.direction = packet.data.direction; } } packetsForUpdate() { return this.createTraitPacketUpdates(TraitDirectionalPacket); } listeners() { const listeners = {}; if (this.params.trackMovement) { listeners.movementRequest = (vector) => { if (Vector.isZero(vector)) { return; } this.entity.direction = Vector.toDirection(vector, this.directionCount); }; } return listeners; } }