Etapa 1 inteira (logica com 100% de cobertura, cena 3D, toque, sons, bancada de desempenho, e2e) e a base da etapa 2 (mapa novo no Tiled, texturas, imagens dos itens, sons conferidos, golpe recortado e medido). Pagina /jogo fora do menu e do sitemap ate a medicao no celular.
72 lines
1.7 KiB
TypeScript
72 lines
1.7 KiB
TypeScript
import {
|
|
Light,
|
|
Line,
|
|
Mesh,
|
|
type Object3D,
|
|
PerspectiveCamera,
|
|
Points,
|
|
Scene,
|
|
Sprite,
|
|
} from "three";
|
|
import { lerMapa } from "@/lib/jogo/mapa";
|
|
import { ESCRITORIO } from "@/lib/jogo/valores";
|
|
import { criarAmbiente } from "./ambiente";
|
|
|
|
beforeEach(() => {
|
|
jest.spyOn(HTMLCanvasElement.prototype, "getContext").mockReturnValue(null);
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
function montar() {
|
|
const cena = new Scene();
|
|
const camera = new PerspectiveCamera();
|
|
cena.add(camera);
|
|
const ambiente = criarAmbiente(cena, lerMapa(ESCRITORIO), {
|
|
camera,
|
|
movimentoReduzido: false,
|
|
});
|
|
return { cena, camera, ambiente };
|
|
}
|
|
|
|
test("o escritório cabe em 12 objetos desenháveis", () => {
|
|
const { cena } = montar();
|
|
let n = 0;
|
|
cena.traverse((o) => {
|
|
if (
|
|
o instanceof Mesh ||
|
|
o instanceof Sprite ||
|
|
o instanceof Line ||
|
|
o instanceof Points
|
|
)
|
|
n++;
|
|
});
|
|
expect(n).toBeGreaterThan(0);
|
|
expect(n).toBeLessThanOrEqual(12);
|
|
});
|
|
|
|
test("a lanterna presa à câmera é a única luz com sombra e desliga com o regulador", () => {
|
|
const { cena, ambiente } = montar();
|
|
const comSombra = () => {
|
|
const luzes: Object3D[] = [];
|
|
cena.traverse((o) => {
|
|
if (o instanceof Light && o.castShadow) luzes.push(o);
|
|
});
|
|
return luzes;
|
|
};
|
|
expect(comSombra()).toHaveLength(1);
|
|
expect(comSombra()[0].parent).toBeInstanceOf(PerspectiveCamera);
|
|
ambiente.definirSombras(false);
|
|
expect(comSombra()).toHaveLength(0);
|
|
});
|
|
|
|
test("descartar esvazia a cena e a câmera", () => {
|
|
const { cena, camera, ambiente } = montar();
|
|
ambiente.descartar();
|
|
expect(cena.children).toEqual([camera]);
|
|
expect(camera.children).toHaveLength(0);
|
|
expect(cena.fog).toBeNull();
|
|
});
|