45 lines
973 B
TypeScript
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,
|
|
};
|
|
}
|