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 ActionRegistry from './action-registry';
import InputPacket from './packets/input'; import InputPacket from './packets/input';
import TraitInteractive from './packets/trait-interactive';
export {ActionRegistry, InputPacket}; export {ActionRegistry, InputPacket};
@ -24,6 +25,7 @@ export default {
}, },
'@latus/socket/packets': () => ({ '@latus/socket/packets': () => ({
Input: InputPacket, 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) { if (interactives.length > 0) {
// TODO sort distance // TODO sort distance
[this.#target] = interactives [this.#target] = interactives
.filter((interactive) => interactive.isInteractive)
.map((interactive) => [interactive.distanceFrom({position: incident}), interactive]) .map((interactive) => [interactive.distanceFrom({position: incident}), interactive])
.sort(([l], [r]) => (l < r ? -1 : 1)) .sort(([l], [r]) => (l < r ? -1 : 1))
.map(([, interactive]) => interactive); .map(([, interactive]) => interactive);

View File

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