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 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,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
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) {
|
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);
|
||||||
|
|
|
@ -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 [];
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user