1
This commit is contained in:
44
src/components/game-canvas/combatFeedback.ts
Normal file
44
src/components/game-canvas/combatFeedback.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
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,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user