2019-03-17 23:45:48 -05:00
|
|
|
import {compose} from '@avocado/core';
|
|
|
|
import {Vector} from '@avocado/math';
|
|
|
|
|
2019-03-23 23:24:18 -05:00
|
|
|
import {StateProperty, Trait} from '../trait';
|
2019-05-13 21:07:51 -05:00
|
|
|
import {TraitDirectionalPacket} from '../packets/trait-directional.packet';
|
2019-03-17 23:45:48 -05:00
|
|
|
|
|
|
|
const decorate = compose(
|
2019-03-23 23:24:18 -05:00
|
|
|
StateProperty('direction', {
|
2019-03-18 20:05:11 -05:00
|
|
|
track: true,
|
|
|
|
}),
|
2019-03-17 23:45:48 -05:00
|
|
|
);
|
|
|
|
|
2019-04-19 12:30:11 -05:00
|
|
|
export class Directional extends decorate(Trait) {
|
2019-03-17 23:45:48 -05:00
|
|
|
|
|
|
|
static defaultParams() {
|
|
|
|
return {
|
|
|
|
directionCount: 1,
|
2019-03-19 10:20:49 -05:00
|
|
|
trackMovement: true,
|
2019-03-17 23:45:48 -05:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
static defaultState() {
|
|
|
|
return {
|
|
|
|
direction: 0,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2019-05-05 04:26:35 -05:00
|
|
|
static type() {
|
|
|
|
return 'directional';
|
|
|
|
}
|
|
|
|
|
2019-05-06 04:03:43 -05:00
|
|
|
constructor(entity, params, state) {
|
|
|
|
super(entity, params, state);
|
2019-05-04 14:06:47 -05:00
|
|
|
this.directionCount = this.params.directionCount;
|
2019-03-19 10:20:49 -05:00
|
|
|
}
|
|
|
|
|
2019-05-13 21:07:51 -05:00
|
|
|
acceptPacket(packet) {
|
|
|
|
if (packet instanceof TraitDirectionalPacket) {
|
|
|
|
this.entity.direction = packet.data.direction;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
packetsForUpdate() {
|
2019-05-14 05:45:22 -05:00
|
|
|
return this.createTraitPacketUpdates(TraitDirectionalPacket);
|
2019-05-13 21:07:51 -05:00
|
|
|
}
|
|
|
|
|
2019-03-17 23:45:48 -05:00
|
|
|
listeners() {
|
2019-03-19 10:20:49 -05:00
|
|
|
const listeners = {};
|
2019-05-04 14:06:47 -05:00
|
|
|
if (this.params.trackMovement) {
|
2019-03-19 10:20:49 -05:00
|
|
|
listeners.movementRequest = (vector) => {
|
2019-05-09 15:15:51 -05:00
|
|
|
if (Vector.isZero(vector)) {
|
|
|
|
return;
|
|
|
|
}
|
2019-03-19 10:20:49 -05:00
|
|
|
this.entity.direction = Vector.toDirection(vector, this.directionCount);
|
|
|
|
};
|
2019-03-17 23:45:48 -05:00
|
|
|
}
|
2019-03-19 10:20:49 -05:00
|
|
|
return listeners;
|
2019-03-17 23:45:48 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|