Componentes Principais
Esta seção detalha os componentes mais importantes do jogo Arretado, explicando suas responsabilidades e como interagem entre si.
GameScene.ts
Descrição Geral
GameScene.ts
é a cena central de jogabilidade, responsável por orquestrar a maioria dos elementos do jogo durante as fases de combate. Estende Phaser.Scene e gerencia o ciclo de vida da cena, incluindo inicialização, criação de objetos, atualização da lógica do jogo e desligamento.
Principais Responsabilidades
1. Inicialização da Cena (init()
)
init()
)Configura a onda atual do jogo (
#currentWaveKey
).Carrega os dados da onda correspondentes usando o WaveManager.
Atualiza o waveIndicator com as informações da onda e do ato.
2. Criação de Elementos do Jogo (create()
)
create()
)Limpa colliders e corpos físicos do mundo para garantir um estado limpo a cada reinício da cena.
Inicializa o HealthComponent para o jogador, usando as estatísticas de
playerStats
.Lança as cenas de UI:
gameHud
PlayerBoostCooldownUI
Configura:
A duração da onda.
O SoundManager, reproduzindo a música de fundo da onda atual.
Carrega e posiciona o background da onda, se especificado.
Configura o tilemap, se presente, usando
setupTilemap
.Configura os controles de entrada do jogador via
inputManager
.Cria instâncias de:
Player
Grupos de inimigos:
BasicEnemyGroup
RangedEnemyGroup
DashEnemyGroup
TankEnemyGroup
BossEnemy
Observação: grupos opcionais são inicializados como
undefined
se não estiverem presentes na onda.
Lança a BossHealthBar, se um chefe estiver presente, e configura seu corpo físico como imovível.
Inicializa:
shootingController
(gerenciamento dos tiros do jogador)Collider
(gerenciamento de colisões)
Lança a PlayerHealthBar após um pequeno atraso para garantir que todos os elementos estejam prontos.
Configura:
Os limites do mundo físico.
A câmera para seguir o jogador.
Configura um listener para o evento
waveCompletedAndAdvance
doglobalEventEmitter
, gerenciando a transição para:Cutscene
Próxima fase
3. Atualização da Lógica do Jogo (update()
)
update()
)Garante que o retículo de mira do jogador permaneça dentro dos limites da tela (
containReticle
).Chama
handlePause()
para gerenciar a funcionalidade de pausa do jogo.Atualiza:
Estado do Player
Todos os grupos de inimigos, chamando seus métodos
update()
ouupdateEnemyMovement()
.
4. Gerenciamento de Pausa (handlePause()
)
handlePause()
)Detecta a entrada da tecla de pausa.
Alterna o estado de pausa das cenas:
gameScene
gameHud
Lança ou para a PauseScene.
5. Desligamento da Cena (shutdown()
)
shutdown()
)Para a música da onda.
Remove todos os listeners de eventos.
Limpa:
Grupos de inimigos
Player
shootingController
collider
Destroi os corpos físicos do mundo para liberar recursos.
Player.ts
Descrição Geral
A classe Player
representa o personagem controlável pelo jogador no jogo. Estende Phaser.Physics.Arcade.Sprite, conferindo propriedades físicas e a capacidade de interagir com o mundo físico do Phaser.
Principais Responsabilidades
1. Inicialização (Construtor)
Configura o sprite do jogador, adicionando-o à cena e ao sistema de física.
Define propriedades visuais:
Profundidade
Escala
Offset
Define limites de colisão com o mundo.
Inicializa o controlKeys através do
inputManager
.Cria uma instância de HealthComponent para gerenciar a saúde do jogador.
2. Movimentação do Jogador (playerMovement()
)
playerMovement()
)Lida com a entrada do teclado para mover o jogador.
Calcula a direção do movimento com base nas teclas pressionadas (cima, baixo, esquerda, direita).
Aplica a velocidade definida em
playerStats.MoveSpeed
.Inclui lógica para movimentação diagonal.
Implementa um sistema de boost (aceleração temporária) ativado pela tecla de espaço, com cooldown associado.
Usa o
globalEventEmitter
para emitir um evento quando o boost é ativado, permitindo que outros componentes (como a UI) reajam à mudança.
3. Animação do Jogador (playerAnimation()
)
playerAnimation()
)Controla as animações do sprite do jogador:
lampiaoRun
(movimento)lampiaoIdle
(parado)
Baseia-se no estado de movimento retornado por
playerMovement()
.
4. Recebimento de Dano (takeDamage()
)
takeDamage()
)Chamado quando o jogador sofre dano.
Utiliza o HealthComponent para subtrair a quantidade de dano da saúde atual.
Registra mensagens no console sobre:
O dano recebido
Se o jogador morreu
5. Gerenciamento de Saúde
Através do HealthComponent, encapsula a lógica de saúde, permitindo:
Perda de saúde
Verificação de estado (vivo ou morto)
Grupos de Inimigos
Descrição Geral
O jogo apresenta diversos tipos de inimigos, cada um com comportamentos e características distintas. Cada tipo é gerenciado por sua própria classe de grupo, estendendo Phaser.Physics.Arcade.Group ou similar, para gerenciamento eficiente.
Principais Responsabilidades (Gerais para Grupos de Inimigos)
1. Criação e Gerenciamento
Cria e gerencia instâncias de inimigos.
Adiciona inimigos à cena.
Configura propriedades físicas e visuais.
Reutiliza objetos (pooling) para otimizar desempenho.
2. Movimentação
Cada grupo implementa sua lógica específica:
BasicEnemyGroup: movimento simples em direção ao jogador.
DashEnemyGroup e RangedEnemyGroup: padrões de ataque mais complexos.
BossEnemy: método
updateEnemyBossMovement
para comportamento único.
3. Ataque
Inimigos podem atacar de diferentes formas:
Contato direto
Projéteis (
RangedEnemyGroup
)Habilidades especiais (
BossEnemy
)
4. Saúde e Dano
Possuem sistema de saúde.
Grupos gerenciam a lógica de dano e destruição dos inimigos ao chegar a zero de vida.
5. Atualização
Método
updateEnemyMovement()
(ou similar) é chamado a cada frame para:Atualizar movimentação
Controlar animações
Executar ataques
Collider.ts
Descrição Geral
Classe crucial para interação entre elementos do jogo, configurando e gerenciando detecções de colisão entre jogador, inimigos e projéteis, além de aplicar efeitos resultantes (ex: dano).
Principais Responsabilidades
1. Configuração de Colisões (create()
)
create()
)Configura
Phaser.Physics.Arcade.Collider
entre:Inimigos e Jogador: jogador sofre dano ao colidir com inimigos.
Projéteis do Jogador e Inimigos: inimigo sofre dano e projétil é desativado/destruído.
Projéteis de Inimigos e Jogador: jogador sofre dano e projétil é desativado/destruído.
2. Tratamento de Colisões
Define funções callback que:
Aplicam lógica de jogo (redução de saúde, efeitos visuais/sonoros).
Removem objetos do jogo quando necessário.
3. Destruição (destroy()
)
destroy()
)Remove todos os colliders configurados.
Evita vazamentos de memória e interações indesejadas após o encerramento da cena.
shootingController.ts
Descrição Geral
Gerencia a lógica de tiro do jogador, coordenando disparo de projéteis, mira e interação com inimigos.
Principais Responsabilidades
1. Inicialização (Construtor)
Recebe referências à:
Cena
Jogador
Grupos de inimigos
Configura o retículo de mira do jogador.
2. Criação (create()
)
create()
)Configura eventos de entrada para tiro do jogador (ex: clique do mouse).
3. Controle do Retículo (containReticle()
)
containReticle()
)Garante que o retículo permaneça dentro dos limites da tela.
4. Lógica de Tiro
Determina direção do projétil.
Cria e lança projétil em direção ao retículo.
Gerencia cooldown e seleção de alvos, se aplicável.
5. Destruição (destroy()
)
destroy()
)Limpa listeners de eventos e referências para evitar vazamentos de memória.
SoundManager.ts
Descrição Geral
Componente utilitário para gerenciar reprodução de áudios do jogo, incluindo músicas de fundo e efeitos sonoros.
Principais Responsabilidades
1. Inicialização (init()
)
init()
)Recebe a cena atual para configurar o sistema de áudio do Phaser.
2. Reprodução de Música de Onda (playWaveMusic()
)
playWaveMusic()
)Inicia a música de fundo da onda atual.
Para música anterior antes de iniciar nova, evitando sobreposições.
3. Parada de Música de Onda (stopCurrentWaveMusic()
)
stopCurrentWaveMusic()
)Para a música de fundo da onda atual durante desligamento ou transições.
4. Reprodução de Efeitos Sonoros
Pode incluir métodos para reproduzir efeitos específicos (ex: tiro, dano, explosões).
HealthComponent.ts
Descrição Geral
Componente reutilizável que gerencia a saúde de qualquer entidade (jogador, inimigos, chefe), encapsulando a lógica de perda/ganho de saúde e verificação de estado.
Principais Responsabilidades
1. Inicialização (Construtor)
Recebe:
Saúde máxima
Saúde inicial
Tipo da entidade (ex: 'player', 'enemy')
2. Perda de Saúde (loseHealth()
)
loseHealth()
)Reduz a saúde atual pela quantidade especificada.
Garante que saúde não fique abaixo de zero.
3. Ganho de Saúde (gainHealth()
)
gainHealth()
)Aumenta a saúde atual pela quantidade especificada.
Garante que saúde não exceda a máxima.
4. Verificação de Estado
isDead()
eisAlive()
retornam estado atual com base na saúde.
5. Eventos
Pode emitir eventos (ex:
healthChanged
,entityDied
) para notificar outros componentes.Utiliza
globalEventEmitter
para atualizações em tempo real da UI.
inputManager.ts
Descrição Geral
Gerencia e fornece acesso aos controles de entrada do jogador, abstraindo a complexidade da API de entrada do Phaser.
Principais Responsabilidades
1. Configuração de Controles (setupControls()
)
setupControls()
)Recebe a cena atual.
Configura listeners de teclado para:
Teclas de movimento (W, A, S, D ou setas)
Espaço (boost)
P (pausa)
2. Obtenção de Teclas (getKeys()
)
getKeys()
)Retorna objeto com referências às teclas configuradas, permitindo que outros componentes verifiquem estados (pressionada, solta, etc).
WaveManager.ts e wavesContainer.ts
Descrição Geral
Gerenciam as ondas de inimigos do jogo em conjunto. O wavesContainer.ts
define as estruturas de dados, enquanto o WaveManager.ts
fornece métodos de acesso e manipulação.
Principais Responsabilidades
1. Definição de Ondas (wavesContainer.ts
)
wavesContainer.ts
)Contém mapa de configurações para cada onda, incluindo:
Duração
Música de fundo
Background
Tilemap
Lista de inimigos
2. Obtenção de Dados da Onda (WaveManager.ts
)
WaveManager.ts
)getWaveData()
retorna dados de configuração da onda baseada na chave.
3. Progressão da Onda
Apesar da progressão ser gerenciada pela
GameScene
via eventowaveCompletedAndAdvance
, oWaveManager
fornece os dados necessários para tal.
Atualizado