Sou bastante novo na idéia de sistemas de entidades, depois de ler várias coisas (muito útil, este ótimo blog e esta resposta ).
Embora eu esteja tendo problemas para entender como algo tão simples quanto poder manipular a posição de um objeto por um número indefinido de fontes.
Ou seja, eu tenho minha entidade, que tem um componente de posição. Então, eu tenho algum evento no jogo que diz a essa entidade para mover uma determinada distância, em um determinado momento.
Esses eventos podem ocorrer a qualquer momento e terão valores diferentes para posição e hora. O resultado é que eles seriam compostos juntos.
Em uma solução OO tradicional, eu teria algum tipo de MoveByclasse, que contém a distância / tempo e uma matriz daquelas dentro da minha classe de objeto de jogo. Cada quadro, eu percorria todos os MoveBye aplicava à posição. Se a MoveByatingir o tempo de término, remova-o da matriz.
Com o sistema de entidades, estou um pouco confuso sobre como devo replicar esse tipo de comportamento.
Se houvesse apenas um deles de cada vez, em vez de ser capaz de combiná-los, seria bastante direto (acredito) e seria algo como isto:
PositionComponent contendo x, y
MoveByComponent contendo x, y, time
Entityque tem um PositionComponente umMoveByComponent
MoveBySystemque procura uma entidade com esses dois componentes e agrega o valor de MoveByComponenta PositionComponent. Quando o timeé atingido, ele remove o componente dessa entidade.
Estou um pouco confuso sobre como eu faria a mesma coisa com muitos movimentos.
Meu pensamento inicial é que eu teria:
PositionComponent, MoveByComponento mesmo que acima
MoveByCollectionComponentque contém uma matriz de MoveByComponents
MoveByCollectionSystemque procura uma entidade com a PositionComponente a MoveByCollectionComponent, iterando através dos MoveByComponents dentro dela, aplicando / removendo conforme necessário.
Acho que esse é um problema mais geral: ter muitos do mesmo componente e querer que um sistema correspondente atue em cada um. Minhas entidades contêm seus componentes dentro de um hash do tipo de componente -> componente, portanto, possuem apenas 1 componente de um tipo específico por entidade.
É este o caminho certo para olhar para isso?
Uma entidade deve sempre ter um componente de um determinado tipo o tempo todo?
move x by 10 in 2 secondse move x by -10 in 2 secondsa entidade permanecesse perfeitamente imóvel?
MoveByfuncionalidade é apenas uma velocidade? Parece que você está no caminho certo. Para sua segunda pergunta, há diversas implementações diferentes de sistemas de entidade / componente. O descrito na minha resposta que você vinculou teria apenas um componente de um determinado tipo.