feat(jogo): expediente dos mortos, jogo de zumbis em primeira pessoa
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.
This commit is contained in:
1 parent
c7d09d63d4
commit
67b32fcab3
118 files changed
+16730
No files matched your search
@@ -0,0 +1,71 @@
|
||||
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();
|
||||
});
|
||||
Reference in new issue
Block a user