Eu tenho trabalhado em alguns projetos de hobby nos últimos 3-4 anos. Apenas jogos 2D e 3D simples. Mas ultimamente eu comecei um projeto maior. Então, nos últimos meses, eu tentei criar uma classe de objeto de jogo que pode ser a base de todos os meus objetos de jogo. Então, depois de muitos testes try & die, virei-me para o Google, que rapidamente me indicou alguns PDFs e PowerPoints da GDC. E agora estou tentando entender objetos de jogos baseados em componentes.
Entendo que o mecanismo cria um objeto de jogo e, em seguida, anexa componentes diferentes que lidam com coisas como saúde, física, redes e tudo o que você faz. Mas o que não entendo é como o componente X sabe se Y mudou o estado do objeto. Como, por exemplo, o PhysicsComponent sabe se o jogador está vivo, porque a saúde é controlada pelo HealthComponent ..? E como o HealthComponent reproduz a "animação do jogador morreu"?
Fiquei com a impressão de que era algo assim (no HealthComponent):
if(Health < 0) {
AnimationComponent.PlayAnimation("played-died-animation")
}
Mas, novamente, como o HealthComponent sabe que o objeto do jogo ao qual está anexado tem um AnimationComponent anexado? A única solução que vejo aqui é
Verifique se um AnimationComponent está conectado ou não (dentro do código do componente ou no lado do mecanismo)
Os componentes requerem outros componentes, mas isso parece combater todo o design do componente.
Escreva como HealthWithAnimationComponent, HealthNoAnimationComponent e assim por diante, o que novamente parece combater toda a ideia de design de componentes.