Arquitetura do Sistema
A arquitetura do projeto Arretado é baseada em um design modular e orientado a componentes, padrões usados em projetos de jogos para facilitar a organização, reutilização e manutenção do código.
1.0 Componentes Principais
O projeto é dividido em várias categorias lógicas, cada uma com sua responsabilidade:
Cenas ( src/scenes ): Representam os diferentes estados do jogo, como menu principal, seleção de personagem, gameplay, game over, cutscenes e telas de pausa. Cada cena herda de Phaser.Scene e gerencia seus próprios ativos, lógica de atualização e renderização. As cenas são orquestradas para criar o fluxo do jogo.
BaseScene
: Uma cena base para herança, contendo funcionalidades comuns a várias cenas.flow
: Contém cenas que controlam o fluxo do jogo (Boot, Cutscenes, Menu, Game Over, Next Phase, Pause, Title).gameplay
: Contém as cenas principais de jogabilidade (GameScene, SkinScene, StoreScene, itemScene).ui
: Contém cenas relacionadas à interface do usuário (gameHudUi, itemsDisplayUi).
Objetos ( src/objects ): Define as entidades do jogo, como o jogador, inimigos, projéteis e itens. Cada objeto é uma classe que estende Phaser.GameObjects.Sprite ou Phaser.Physics.Arcade.Sprite , encapsulando suas propriedades, comportamentos e animações.
bullet
: Gerencia os projéteis disparados no jogo.enemies
: Define os diferentes tipos de inimigos (BasicEnemyGroup, BossEnemy, DashEnemyGroup, RangedEnemyGroup, TankEnemyGroup) e suas barras de vida (BossHealthBar).player
: Contém a lógica do jogador (Player, PlayerBoostCooldownUI, PlayerHealthBar).upgrades
: Gerencia os itens de melhoria no jogo.
Componentes ( src/components): Módulos reutilizáveis que encapsulam lógicas específicas que podem ser anexadas a diferentes objetos ou cenas. Isso inclui sistemas de colisão, gerenciamento de entrada, eventos e componentes de saúde.
collider
: Lógica para detecção e tratamento de colisões.events
: Gerenciamento de eventos globais e específicos do jogador.input
: Gerenciamento de entrada do usuário (teclado, mouse).playerHealth
: Componente de saúde reutilizável.timer
: Funcionalidades de temporização.
Configurações ( src/config ): Contém arquivos de configuração para o jogo, como opções gerais, estatísticas de jogador, dados de ondas de inimigos, cutscenes, itens de loja e gerenciamento de som.
CutscenesContainer
: Define as configurações para as cutscenes.GameOptionsConfig
: Opções gerais do jogo.SkinItems
: Configurações para itens de skin.SoundManager
: Gerenciamento de áudio.StoreItems
: Configurações para itens da loja.config
: Configurações gerais.enemies
: Configurações específicas para inimigos.player
: Configurações específicas para o jogadorwaves
: Configurações para as ondas de inimigos
Assets ( src/assets ): Armazena todos os recursos visuais e de áudio do jogo, organizados por tipo (imagens, sons, etc.).
1.2 Fluxo de Execução
Inicialização ( BootScene.ts ): A cena inicial carrega os recursos básicos e transiciona para a cena de pré-carregamento.
Pré-carregamento ( preloadAssets.ts ): Carrega todos os ativos do jogo (imagens, spritesheets, áudios, tilemaps).
Menu Principal ( MenuScene.ts ): Após o carregamento, o jogador é direcionado para o menu principal.
Seleção de Personagem ( CharacterSelectScene.ts ): Permite ao jogador escolher um personagem ou skin.
Gameplay ( GameScene.ts ): A cena principal onde a ação do jogo ocorre. Gerencia o jogador, inimigos, colisões, pontuação e progressão das ondas.
Pausa ( PauseScene.ts ): Permite pausar o jogo e acessar opções.
Game Over ( GameOverScene.ts ): Exibida quando o jogador perde.
Próxima Fase ( NextPhaseScene.ts ): Transição entre ondas ou atos do jogo.
Cutscenes ( CutscenesScene.ts ): Exibe sequências animadas para avançar a narrativa.
O GameScene.ts
é o core da jogabilidade, onde a maioria das interações e lógicas
de jogo são coordenadas. Ele inicializa o jogador, os grupos de inimigos, os
controladores de tiro e colisão, e gerencia o ciclo de vida das ondas de inimigos e a
transição entre elas.
Atualizado