Files
Genarrative/src/components/game-canvas/combatFeedback.ts
2026-04-26 20:50:58 +08:00

45 lines
973 B
TypeScript

export type CombatFeedbackTargetKind = 'player' | 'companion' | 'hostile';
export interface CombatFeedbackHealthSample {
key: string;
kind: CombatFeedbackTargetKind;
hp: number;
}
export interface CombatFeedbackEvent {
id: string;
targetKey: string;
kind: CombatFeedbackTargetKind;
delta: number;
}
export function buildCombatFeedbackEvents(
previousSamples: Map<string, CombatFeedbackHealthSample>,
currentSamples: CombatFeedbackHealthSample[],
sequence: number,
) {
let nextSequence = sequence;
const events: CombatFeedbackEvent[] = [];
currentSamples.forEach(sample => {
const previous = previousSamples.get(sample.key);
if (!previous) return;
const delta = sample.hp - previous.hp;
if (delta === 0) return;
nextSequence += 1;
events.push({
id: `${sample.key}:${nextSequence}`,
targetKey: sample.key,
kind: sample.kind,
delta,
});
});
return {
events,
nextSequence,
};
}