fix(minecraft): don't rebuild dispatch table every time

This commit is contained in:
Rin
2026-02-18 11:10:02 +08:00
committed by Neko Ayaka
parent 3c7b42a913
commit 2d4eff7dcb
@@ -35,6 +35,21 @@ export class AttentionDetector {
}
>()
private readonly dispatch: Record<string, Record<string, (event: RawPerceptionEvent) => void>> = {
sighted: {
arm_swing: event => this.onPunch(event as any),
sneak_toggle: event => this.onSneakToggle(event as any),
entity_moved: event => this.onMove(event as any),
},
heard: {
sound: event => this.onSound(event as any),
},
felt: {
damage_taken: event => this.onDamage(event as any),
item_collected: event => this.onPickup(event as any),
},
}
constructor(
private readonly deps: {
eventManager: EventManager
@@ -56,21 +71,7 @@ export class AttentionDetector {
}
public ingest(event: RawPerceptionEvent): void {
const dispatch: Record<string, Record<string, (event: RawPerceptionEvent) => void>> = {
sighted: {
arm_swing: event => this.onPunch(event as any),
sneak_toggle: event => this.onSneakToggle(event as any),
entity_moved: event => this.onMove(event as any),
},
heard: {
sound: event => this.onSound(event as any),
},
felt: {
damage_taken: event => this.onDamage(event as any),
item_collected: event => this.onPickup(event as any),
},
}
dispatch[event.modality]?.[event.kind]?.(event)
this.dispatch[event.modality]?.[event.kind]?.(event)
}
private onPunch(event: Extract<RawPerceptionEvent, { modality: 'sighted', kind: 'arm_swing' }>): void {