Visão Geral
Resumo da Arquitetura
A arquitetura desta framework é projetada para oferecer flexibilidade e modularidade, permitindo modificações e expansões sem impacto direto em outras partes do sistema.
A ideia é ter uma arquitetura baseada em Modelos, Renderizadores, Controladores e Eventos, que são organizados em camadas para facilitar a manutenção e a expansão do código:
- Os Modelos armazenam e gerenciam os dados do jogo, estruturados em três camadas: Data, Stores e Services;
- Os Renderizadores representam os dados em elementos visuais;
- Os Controladores centralizam a lógica do jogo, gerenciando estados e cenas;
- Os Eventos permitem a comunicação entre os sistemas, possibilitando a interação entre Modelos, Renderizadores e Controladores.
Modelos
Os Modelos são estruturados em Resources
do Godot, possibilitando expansão como a criação de novos tipos de personagens, atributos, classes, ações e efeitos com o mínimo de alterações no código.
São estruturados em três camadas:
- Data: definem como os
Resources
são estruturados, incluindo suas propriedades; - Stores: Armazenam os dados em tempo de execução, mantendo o estado global do jogo e sincronizando as mudanças entre diferentes partes do sistema.
- Services: Manipulam os dados das
Stores
e implementam regras de negócio, garantindo consistência na lógica da aplicação.
Resources
Atualmente, os tipos de Resources
ainda estão sendo definidos e, por enquanto, existe apenas um para cada modelo.
Por isso, o acesso e manipulação desses tipos está sendo feito diretamente.
CharacterType
é um tipo de Resource que implementa a interfaceICharacter
.CharacterService
manipulaCharacterType
.CharacterStore
armazenaCharacterType
.
Para entender melhor o conceito de Resource, veja o tutorial e a documentação oficial do Godot.
Abstração dos Resources
Quando novos tipos de Resources forem criados para uma mesma feature (por exemplo, CharacterTypeA
e CharacterTypeB
), será necessário que essas classes herdem de uma classe base como CharacterBase
.
CharacterTypeA
eCharacterTypeB
são Resources que herdamCharacterBase
.CharacterBase
é a classe base que implementaICharacter
.CharacterService
manipula dados do tipoCharacterBase
.CharacterStore
armazena dados do tipoCharacterBase
.
Renderizadores
Os Renderizadores são responsáveis pela exibição gráfica dos elementos do jogo, usando os dados dos Models
para criar representações visuais (incluindo animações e efeitos) através de Componentes modulares.
Componentes
Os Componentes compõem os Renderizadores, encapsulando funcionalidades específicas, como animações e interações visuais. Eles promovem modularidade e flexibilidade no desenvolvimento.
Controladores
Os Controladores centralizam a lógica do jogo, gerenciando estados, cenas e eventos.
Coordenam as ações dos jogadores e interações entre personagens, garantindo que a progressão e os sistemas do jogo funcionem corretamente.