Estou tentando entender o design de entidades com base em componentes.
Meu primeiro passo foi criar vários componentes que poderiam ser adicionados a um objeto. Para cada tipo de componente, eu tinha um gerente, que chamaria a função de atualização de cada componente, passando coisas como estado do teclado etc., conforme necessário.
A próxima coisa que fiz foi remover o objeto e apenas ter cada componente com um ID. Portanto, um objeto é definido por componentes com os mesmos IDs.
Agora, estou pensando que não preciso de um gerente para todos os meus componentes, por exemplo, tenho um SizeComponent
, que apenas possui uma Size
propriedade). Como resultado, SizeComponent
ele não possui um método de atualização e o método de atualização do gerente não faz nada.
Meu primeiro pensamento foi ter uma ObjectProperty
classe que os componentes pudessem consultar, em vez de tê-los como propriedades dos componentes. Portanto, um objeto teria um número de ObjectProperty
eObjectComponent
. Os componentes teriam lógica de atualização que consulta propriedades do objeto. O gerente gerenciaria a chamada do método de atualização do componente.
Isso me parece um excesso de engenharia, mas acho que não consigo me livrar dos componentes, porque preciso de uma maneira de os gerentes saberem quais objetos precisam de qual lógica de componente para executar (caso contrário, eu apenas removeria o componente completamente e envie sua lógica de atualização para o gerenciador).
- É isso (ter
ObjectProperty
,ObjectComponent
eComponentManager
classes) over-engenharia? - O que seria uma boa alternativa?
RenderingComponent
e a PhysicsComponent
. Estou pensando demais na decisão de onde colocar a propriedade? Devo apenas colocá-lo em qualquer um, então ter a outra consulta um objeto para o componente que tem a propriedade necessária?
PhysicalStateInstance
(um por objeto) ao lado de um GravityPhysicsShared
(um por jogo); no entanto, sou tentado a dizer que isso está se aventurando nos domínios da euforia dos arquitetos, não se projete em um buraco (exatamente o que eu fiz com meu primeiro sistema de componentes). BEIJO.
SizeComponent
é um exagero - você pode assumir que a maioria dos objetos tem um tamanho - são coisas como renderização, IA e física onde o modelo de componente é usado; O tamanho sempre se comportará da mesma maneira, para que você possa compartilhar esse código.