feat: isInteractive
This commit is contained in:
parent
ab13271599
commit
f75ba69db5
|
@ -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,
|
||||
}),
|
||||
},
|
||||
};
|
||||
|
|
9
packages/input/src/packets/trait-interactive.js
Normal file
9
packages/input/src/packets/trait-interactive.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
import {Packet} from '@latus/socket';
|
||||
|
||||
export default class TraitInteractivePacket extends Packet {
|
||||
|
||||
static get data() {
|
||||
return 'bool';
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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 [];
|
||||
}
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue
Block a user