Depois de analisar alguns padrões de design de jogos, decidi com o Sistema de componentes de entidades (ES System) para o meu mecanismo de jogo. Eu li artigos (principalmente T = Machine ) e revi alguns códigos-fonte e acho que consegui o suficiente para começar.
Há apenas uma idéia básica com a qual estou lutando. Como faço para lidar com grupos de entidades que dependem um do outro?
Deixe-me usar um exemplo:
Suponha que eu estou criando um jogo de tiro aéreo padrão (pense em Jamestown ) e quero construir uma "entidade chefe" com várias partes distintas, mas conectadas. A quebra pode ser algo como isto:
- Corpo do navio: Movimento, Renderização
- Canhão: Posição (bloqueado em relação ao corpo do navio), Rastreamento \ Fogo no herói, Recebendo dano até desativado
- Núcleo: Posição (bloqueado em relação ao corpo do navio), Rastreando \ Fogo no herói, Recebendo dano até desativado, Desativando (er ... destruindo) todas as outras entidades do grupo de navios
Meu objetivo seria algo que seria identificado (e manipulado) como um elemento distinto do jogo sem ter que reescrever o subsistema do zero toda vez que eu quiser criar um novo elemento agregado.
Como implemento esse tipo de design no sistema ES?
- Eu implemento algum tipo de relacionamento de entidade pai-filho (as entidades podem ter filhos)? Isso parece contradizer a metodologia de que as Entidades são apenas contêineres vazios e fazem com que pareça mais POO.
- Eu os implemento como entidades separadas, com algum tipo de componente de conexão (BossComponent) e sistema relacionado (BossSubSystem)? Não posso deixar de pensar que isso será difícil de implementar, uma vez que a forma como os componentes se comunicam parece ser uma grande armadilha.
- Eu os implemento como uma Entidade, com uma coleção de componentes (ShipComponent, CannonComponents, CoreComponent)? Esse parece desviar a intenção do sistema ES (os componentes aqui parecem muito com entidades pesadas), mas eu sei disso, então imaginei que eu colocaria isso lá fora.
- Eu os implemento como outra coisa que mencionei?
Eu sei que isso pode ser implementado com muita facilidade no OOP, mas a minha escolha de ES em vez de OOP é uma que eu vou manter. Se eu precisar romper com a pura teoria da ES para implementar esse design, eu o farei (não como se eu não tivesse comprometido o design puro antes), mas eu preferiria fazer isso por razões de desempenho, em vez de começar com um design ruim.
Para obter crédito extra, pense no mesmo design, mas cada uma das "entidades-chefes" estava realmente conectada a uma "entidade BigBoss" maior, composta por um corpo principal, núcleo principal e três "entidades-chefes". Isso me deixaria ver uma solução para pelo menos três dimensões (avô-pai-filho) ... que deveria ser mais do que suficiente para mim.