1
This commit is contained in:
62
src/components/game-canvas/combatFeedback.test.ts
Normal file
62
src/components/game-canvas/combatFeedback.test.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import {
|
||||
buildCombatFeedbackEvents,
|
||||
type CombatFeedbackHealthSample,
|
||||
} from './combatFeedback';
|
||||
|
||||
function toSample(key: string, hp: number): CombatFeedbackHealthSample {
|
||||
return {
|
||||
key,
|
||||
kind: key.startsWith('hostile') ? 'hostile' : 'player',
|
||||
hp,
|
||||
};
|
||||
}
|
||||
|
||||
describe('combatFeedback', () => {
|
||||
it('creates red damage and green healing deltas from committed hp changes', () => {
|
||||
const previous = new Map([
|
||||
['player', toSample('player', 20)],
|
||||
['hostile:npc-liu', toSample('hostile:npc-liu', 8)],
|
||||
]);
|
||||
|
||||
const result = buildCombatFeedbackEvents(
|
||||
previous,
|
||||
[
|
||||
toSample('player', 11),
|
||||
toSample('hostile:npc-liu', 9),
|
||||
],
|
||||
4,
|
||||
);
|
||||
|
||||
expect(result.events).toEqual([
|
||||
{
|
||||
id: 'player:5',
|
||||
targetKey: 'player',
|
||||
kind: 'player',
|
||||
delta: -9,
|
||||
},
|
||||
{
|
||||
id: 'hostile:npc-liu:6',
|
||||
targetKey: 'hostile:npc-liu',
|
||||
kind: 'hostile',
|
||||
delta: 1,
|
||||
},
|
||||
]);
|
||||
expect(result.nextSequence).toBe(6);
|
||||
});
|
||||
|
||||
it('ignores first render samples and unchanged hp', () => {
|
||||
const result = buildCombatFeedbackEvents(
|
||||
new Map([['player', toSample('player', 20)]]),
|
||||
[
|
||||
toSample('player', 20),
|
||||
toSample('companion:npc-chen', 6),
|
||||
],
|
||||
0,
|
||||
);
|
||||
|
||||
expect(result.events).toEqual([]);
|
||||
expect(result.nextSequence).toBe(0);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user