avocado-old/packages/entity/traits/directional.trait.js

61 lines
1.2 KiB
JavaScript
Raw Normal View History

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,
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';
}
constructor(entity, params, state) {
super(entity, params, state);
2019-05-04 14:06:47 -05:00
this.directionCount = this.params.directionCount;
}
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() {
const listeners = {};
2019-05-04 14:06:47 -05:00
if (this.params.trackMovement) {
listeners.movementRequest = (vector) => {
2019-05-09 15:15:51 -05:00
if (Vector.isZero(vector)) {
return;
}
this.entity.direction = Vector.toDirection(vector, this.directionCount);
};
2019-03-17 23:45:48 -05:00
}
return listeners;
2019-03-17 23:45:48 -05:00
}
}