Make it so you cant shoot yourself

This commit is contained in:
2026-01-28 18:19:46 +11:00
parent 5d33d0e660
commit 90aebc892a
2 changed files with 84 additions and 49 deletions

View File

@@ -3,34 +3,34 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
// Mock Phaser
vi.mock('phaser', () => {
const mockGraphics = {
setDepth: vi.fn().mockReturnThis(),
clear: vi.fn().mockReturnThis(),
lineStyle: vi.fn().mockReturnThis(),
lineBetween: vi.fn().mockReturnThis(),
};
const mockGraphics = {
setDepth: vi.fn().mockReturnThis(),
clear: vi.fn().mockReturnThis(),
lineStyle: vi.fn().mockReturnThis(),
lineBetween: vi.fn().mockReturnThis(),
};
const mockSprite = {
setDepth: vi.fn().mockReturnThis(),
setVisible: vi.fn().mockReturnThis(),
setAlpha: vi.fn().mockReturnThis(),
setPosition: vi.fn().mockReturnThis(),
};
const mockSprite = {
setDepth: vi.fn().mockReturnThis(),
setVisible: vi.fn().mockReturnThis(),
setAlpha: vi.fn().mockReturnThis(),
setPosition: vi.fn().mockReturnThis(),
};
return {
default: {
GameObjects: {
Sprite: vi.fn(() => mockSprite),
Graphics: vi.fn(() => mockGraphics),
},
Scene: class {
add = {
graphics: vi.fn(() => mockGraphics),
sprite: vi.fn(() => mockSprite),
};
}
}
};
return {
default: {
GameObjects: {
Sprite: vi.fn(() => mockSprite),
Graphics: vi.fn(() => mockGraphics),
},
Scene: class {
add = {
graphics: vi.fn(() => mockGraphics),
sprite: vi.fn(() => mockSprite),
};
}
}
};
});
// Mock CombatLogic
@@ -53,7 +53,7 @@ describe('TargetingSystem', () => {
beforeEach(() => {
vi.clearAllMocks();
mockGraphics = {
setDepth: vi.fn().mockReturnThis(),
clear: vi.fn().mockReturnThis(),
@@ -77,7 +77,7 @@ describe('TargetingSystem', () => {
targetingSystem = new TargetingSystem(mockScene);
mockWorld = { width: 10, height: 10 };
// Default return for traceProjectile
(traceProjectile as any).mockReturnValue({
blockedPos: { x: 0, y: 0 },
@@ -171,4 +171,33 @@ describe('TargetingSystem', () => {
expect(mockGraphics.clear).toHaveBeenCalled();
expect(mockSprite.setVisible).toHaveBeenCalledWith(false);
});
it('should prevent targeting self', () => {
const playerPos = { x: 1, y: 1 };
// Setup targeting
targetingSystem.startTargeting(
'item-1',
playerPos,
mockWorld,
{ getCombatant: vi.fn().mockReturnValue({ pos: playerPos, inventory: { items: [{ id: 'item-1' }] } }) } as any,
1 as EntityId,
new Uint8Array(100),
10
);
// Manually set cursor to player pos (startTargeting might do it, but we ensure it)
targetingSystem.updateCursor(playerPos, playerPos);
const callback = vi.fn();
const result = targetingSystem.executeThrow(
mockWorld,
1 as EntityId,
{ getCombatant: vi.fn().mockReturnValue({ pos: playerPos, inventory: { items: [{ id: 'item-1' }] } }) } as any,
callback
);
expect(result).toBe(false);
expect(callback).not.toHaveBeenCalled();
});
});