feat: isInteractive

This commit is contained in:
cha0s 2021-02-16 18:43:31 -06:00
parent ab13271599
commit f75ba69db5
4 changed files with 29 additions and 3 deletions

View File

@ -3,6 +3,7 @@ import D from 'debug';
import ActionRegistry from './action-registry';
import InputPacket from './packets/input';
import TraitInteractive from './packets/trait-interactive';
export {ActionRegistry, InputPacket};
@ -24,6 +25,7 @@ export default {
},
'@latus/socket/packets': () => ({
Input: InputPacket,
TraitInteractive,
}),
},
};

View File

@ -0,0 +1,9 @@
import {Packet} from '@latus/socket';
export default class TraitInteractivePacket extends Packet {
static get data() {
return 'bool';
}
}

View File

@ -65,6 +65,7 @@ export default () => class Initiator extends Trait {
if (interactives.length > 0) {
// TODO sort distance
[this.#target] = interactives
.filter((interactive) => interactive.isInteractive)
.map((interactive) => [interactive.distanceFrom({position: incident}), interactive])
.sort(([l], [r]) => (l < r ? -1 : 1))
.map(([, interactive]) => interactive);

View File

@ -15,6 +15,12 @@ export default (latus) => class Interactive extends decorate(Trait) {
#actions;
acceptPacket(packet) {
if ('TraitInteractive' === packet.constructor.type) {
this.entity.isInteractive = packet.data;
}
}
static defaultParams() {
return {
actions: buildExpressions([]),
@ -36,9 +42,6 @@ export default (latus) => class Interactive extends decorate(Trait) {
return {
interact: (initiator) => {
if (!super.isInteractive) {
return;
}
const context = new Context(
{
entity: this.entity,
@ -52,4 +55,15 @@ export default (latus) => class Interactive extends decorate(Trait) {
};
}
packets() {
const {isInteractive} = this.stateDifferences();
if (isInteractive) {
return [[
'TraitInteractive',
isInteractive.value,
]];
}
return [];
}
};