Fix issue where killing an enemy resulted in orb being rendered with rat sprite on top
This commit is contained in:
@@ -69,6 +69,8 @@ describe('DungeonRenderer', () => {
|
||||
setDepth: vi.fn().mockReturnThis(),
|
||||
setScale: vi.fn().mockReturnThis(),
|
||||
play: vi.fn().mockReturnThis(),
|
||||
setPosition: vi.fn().mockReturnThis(),
|
||||
setVisible: vi.fn().mockReturnThis(),
|
||||
destroy: vi.fn(),
|
||||
})),
|
||||
container: vi.fn().mockReturnValue({
|
||||
@@ -140,4 +142,67 @@ describe('DungeonRenderer', () => {
|
||||
expect(corpse1.destroy).toHaveBeenCalledTimes(1);
|
||||
expect(corpse2.destroy).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('should render exp_orb as a circle and not as an enemy sprite', () => {
|
||||
renderer.initializeFloor(mockWorld);
|
||||
|
||||
// Add an exp_orb to the world
|
||||
mockWorld.actors.set(99, {
|
||||
id: 99,
|
||||
isPlayer: false,
|
||||
type: 'exp_orb',
|
||||
pos: { x: 5, y: 5 },
|
||||
speed: 0,
|
||||
energy: 0
|
||||
});
|
||||
|
||||
// Make the tile visible for it to render
|
||||
(renderer as any).visible[5 * mockWorld.width + 5] = 1;
|
||||
|
||||
// Reset mocks
|
||||
mockScene.add.sprite.mockClear();
|
||||
|
||||
// Mock scene.add.circle
|
||||
mockScene.add.circle = vi.fn().mockReturnValue({
|
||||
setStrokeStyle: vi.fn().mockReturnThis(),
|
||||
setDepth: vi.fn().mockReturnThis(),
|
||||
setPosition: vi.fn().mockReturnThis(),
|
||||
setVisible: vi.fn().mockReturnThis(),
|
||||
});
|
||||
|
||||
renderer.render([]);
|
||||
|
||||
// Should NOT have added an enemy sprite for the orb
|
||||
const spriteCalls = mockScene.add.sprite.mock.calls;
|
||||
// Any sprite added that isn't the player (which isn't in mockWorld.actors here except if we added it)
|
||||
// The current loop skips a.isPlayer and then checks if type is in GAME_CONFIG.enemies
|
||||
expect(spriteCalls.length).toBe(0);
|
||||
|
||||
// Should HAVE added a circle for the orb
|
||||
expect(mockScene.add.circle).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should render any enemy type defined in config as a sprite', () => {
|
||||
renderer.initializeFloor(mockWorld);
|
||||
|
||||
// Add a rat (defined in config)
|
||||
mockWorld.actors.set(100, {
|
||||
id: 100,
|
||||
isPlayer: false,
|
||||
type: 'rat',
|
||||
pos: { x: 2, y: 2 },
|
||||
speed: 100,
|
||||
energy: 0,
|
||||
stats: { hp: 10, maxHp: 10, attack: 2, defense: 0, level: 1, exp: 0, expToNextLevel: 0 }
|
||||
});
|
||||
|
||||
(renderer as any).visible[2 * mockWorld.width + 2] = 1;
|
||||
mockScene.add.sprite.mockClear();
|
||||
|
||||
renderer.render([]);
|
||||
|
||||
// Should have added a sprite for the rat
|
||||
const ratSpriteCall = mockScene.add.sprite.mock.calls.find((call: any) => call[2] === 'rat');
|
||||
expect(ratSpriteCall).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user