Os sistemas devem armazenar um par de valores-chave de Entidade para componente em algum tipo de mapa, objeto de dicionário ou matriz associativa (dependendo do idioma usado). Além disso, quando você cria seu Entity Object, não me preocupo em armazená-lo em um gerente, a menos que você precise anular o registro em qualquer um dos Sistemas. Uma entidade é um composto de componentes, mas não deve lidar com nenhuma das atualizações de componentes. Isso deve ser tratado pelos sistemas. Em vez disso, trate sua Entidade como uma chave que é mapeada para todos os componentes que ela contém nos sistemas, bem como um hub de comunicação para esses componentes se comunicarem.
A grande parte dos modelos de sistema de componentes de entidade é que você pode implementar a capacidade de passar mensagens de um componente para o restante dos componentes de uma entidade com bastante facilidade. Isso permite que um componente fale com outro componente sem realmente saber quem é esse componente ou como lidar com o componente que está sendo alterado. Em vez disso, passa uma mensagem e permite que o componente mude a si próprio (se existir)
Por exemplo, um sistema de posição não teria muito código, apenas controlando os objetos de entidade mapeados para seus componentes de posição. Porém, quando uma posição muda, eles podem enviar uma mensagem para a Entidade envolvida, que por sua vez é entregue a todos os componentes dessa entidade. Uma posição muda por alguma razão? O Sistema de Posições envia uma mensagem para a Entidade, informando que a posição foi alterada e, em algum lugar, o componente de renderização de imagem dessa entidade recebe essa mensagem e atualiza onde será a próxima.
Por outro lado, um sistema de física precisa saber o que todos os seus objetos estão fazendo; Ele deve poder ver todos os objetos do mundo para testar colisões. Quando ocorre uma colisão, ele atualiza o componente de direção da Entidade, enviando algum tipo de "Mensagem de Mudança de Direção" para a entidade, em vez de se referir diretamente ao componente da Entidade. Isso distrai o gerente de precisar saber como mudar de direção usando uma mensagem em vez de confiar em um componente específico que está lá (que pode não estar lá; nesse caso, a mensagem ficaria surda ao invés de algum erro ocorrendo porque um objeto esperado estava ausente).
Você notará uma enorme vantagem disso, pois mencionou que possui uma interface de rede. Um componente de rede ouviria todas as mensagens que todos deveriam conhecer. Ama as fofocas. Então, quando o Sistema de Rede é atualizado, os componentes de Rede enviam essas mensagens para outros Sistemas de Rede em outras máquinas clientes, que reenviam essas mensagens para todos os outros componentes para atualizar as posições dos jogadores, etc. Lógica especial pode ser necessária para que apenas determinadas entidades possam envie mensagens pela rede, mas essa é a beleza do sistema; você pode simplesmente controlar essa lógica registrando as coisas certas.
Em resumo:
Entidade é uma composição de componentes que podem receber mensagens. A entidade pode receber mensagens, delegando essas mensagens a todos os seus componentes para atualizá-las. (Mensagem de posição alterada, Direção da mudança de velocidade, etc.) É como uma caixa de correio central que todos os componentes podem ouvir um do outro em vez de falar diretamente um com o outro.
Componente é uma pequena parte de uma Entidade que armazena algum estado da entidade. Eles são capazes de analisar determinadas mensagens e jogar outras mensagens fora. Por exemplo, um "Componente de direção" se preocuparia apenas com "Mensagens de mudança de direção", mas não "Mensagens de mudança de posição". Os componentes atualizam seu próprio estado com base nas mensagens e, em seguida, atualizam os estados de outros componentes enviando mensagens de seu sistema.
O sistema gerencia todos os componentes de um determinado tipo e é responsável por atualizar os referidos componentes a cada quadro, além de enviar mensagens dos componentes que gerenciam para as entidades às quais os componentes pertencem.
Os sistemas podem atualizar todos os seus componentes em paralelo e armazenar todas as mensagens à medida que avançam. Então, quando a execução de todos os métodos de atualização dos Sistemas for concluída, você solicita a cada sistema que despache suas mensagens em uma ordem específica. Controles primeiro possivelmente, seguidos de Física, seguidos de direção, posição, renderização, etc. Importa em que ordem eles são despachados, pois uma Mudança de direção física sempre deve pesar uma mudança de direção baseada em controle.
Espero que isto ajude. É um inferno de um padrão de design, mas é ridiculamente poderoso se bem feito.