import { describe, it, expect } from 'vitest';
import { Camera } from '../Camera';
describe('Camera dead zone', () => {
it('без dead zone — камера центрируется на цели', () => {
const cam = new Camera(480, 270);
cam.follow(100, 50);
expect(cam.x).toBe(100);
expect(cam.y).toBe(50);
});
it('цель внутри окна — камера стоит', () => {
const cam = new Camera(480, 270);
cam.snap(240, 135);
cam.deadZone = { width: 160, height: 100 };
cam.follow(240 + 60, 135 + 30); // внутри окна
expect(cam.x).toBe(240);
expect(cam.y).toBe(135);
});
it('цель толкает камеру ровно на величину выхода', () => {
const cam = new Camera(480, 270);
cam.snap(240, 135);
cam.deadZone = { width: 160, height: 100 };
cam.follow(240 + 100, 135 - 70); // выход 20 и 20 за окно
expect(cam.x).toBe(260);
expect(cam.y).toBe(115);
});
it('snap ставит камеру на точку, минуя окно', () => {
const cam = new Camera(480, 270);
cam.deadZone = { width: 160, height: 100 };
cam.snap(300, 200);
expect(cam.x).toBe(300);
expect(cam.y).toBe(200);
// Окно сохранено: дальнейшее движение снова с dead zone.
cam.follow(300 + 50, 200);
expect(cam.x).toBe(300);
});
it('границы мира держат камеру прижатой', () => {
const cam = new Camera(480, 270);
cam.bounds = { x: -400, y: -120, width: 800, height: 400 };
cam.snap(-1000, 500); // за границей по обеим осям
expect(cam.x).toBe(-160); // -400 + 480/2
expect(cam.y).toBe(145); // -120 + 400 - 270/2
});
});