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,62 @@
|
||||
import type {
|
||||
ArmaId,
|
||||
Dificuldade,
|
||||
Entrada,
|
||||
Fase,
|
||||
LinhaFeed,
|
||||
} from "@/lib/jogo/tipos";
|
||||
|
||||
/** O que a pessoa escolhe na tela inicial. */
|
||||
export type Escolha = {
|
||||
problemaId: string;
|
||||
dificuldade: Dificuldade;
|
||||
};
|
||||
|
||||
/** O que a tela mostra por cima da cena. A cena manda um novo quando algum valor muda, no máximo 10 vezes por segundo. */
|
||||
export type Retrato = {
|
||||
fase: Fase;
|
||||
/** Índice da horda atual: 0 a 2, e 3 no chefão. */
|
||||
horda: number;
|
||||
/** Id do problema da horda atual. */
|
||||
problemaAtual: string;
|
||||
/** Zumbis que ainda faltam cair nesta horda (na fila e à vista). */
|
||||
restantes: number;
|
||||
vida: number;
|
||||
arma: ArmaId;
|
||||
municao: number;
|
||||
placar: { jogador: number; drones: number };
|
||||
feed: readonly LinhaFeed[];
|
||||
/** Um por drone vivo, na ordem em que nasceram. */
|
||||
drones: readonly { problemaId: string; eliminacoes: number }[];
|
||||
pausado: boolean;
|
||||
};
|
||||
|
||||
/** O que sobra da partida para o relatório. */
|
||||
export type Resultado = {
|
||||
vitoria: boolean;
|
||||
problemaId: string;
|
||||
dificuldade: Dificuldade;
|
||||
/** Ids dos problemas resolvidos, na ordem. */
|
||||
resolvidos: readonly string[];
|
||||
placar: { jogador: number; drones: number };
|
||||
drones: readonly { problemaId: string; eliminacoes: number }[];
|
||||
segundos: number;
|
||||
};
|
||||
|
||||
/**
|
||||
* Junta teclado, mouse e toque numa `Entrada` por passo da lógica.
|
||||
* Convenção de giro (a mesma da lógica): `olhar[0]` positivo vira à esquerda, `olhar[1]` positivo olha para cima.
|
||||
*/
|
||||
export type Controle = {
|
||||
/** A entrada deste passo. O giro acumulado desde a última leitura é devolvido e zerado. */
|
||||
ler(): Entrada;
|
||||
/** Direcional de toque: x para a direita, y para a frente, cada um de -1 a 1. */
|
||||
definirMover(x: number, y: number): void;
|
||||
/** Soma giro em radianos (toque ou mouse). */
|
||||
somarOlhar(rumo: number, inclinacao: number): void;
|
||||
definirAtirar(atirando: boolean): void;
|
||||
definirArma(arma: ArmaId): void;
|
||||
/** Solta tudo: sem movimento, sem tiro, sem giro pendente. Usado ao pausar. */
|
||||
soltar(): void;
|
||||
descartar(): void;
|
||||
};
|
||||
Reference in new issue
Block a user