Closed drazevedo closed 9 years ago
Vocês poderiam utilizar o OwnerID no Explosive. Algo como:
List explosives = entityManager.getComponent(Explosive.class) for(Explosive explosive: explosives){ if(explosive.getOwnerID() == ActualDropper.getEntityID() }
Não?
Em alguns pontos sim, mas em outros não.
Por exemplo, ao dropar uma bomba, eu preciso verificar quantas bombas ativas uma Entity possui (baseada no Dropper). Nesse caso, a busca pelos Explosive iria retornar os Ids das Bombas, não da Entity do dropper.
Esse código seu não funcionaria, porque o ownerID do componente Explosive é o ID da entidade bomba. entityID do componente Dropper é o ID da entidade personagem ou monstro que lançou a bomba.
explosive.getOwnerID() //ID da bomba ActualDropper.getEntityID() //ID de quem lançou a bomba
Poderia ser feita uma gambiarra para que o ownerID do Explosive fosse o ID do avô, não do pai, mas isso não cheira muito bem...
A minha idéia é que o OwnerID do Component Explosive fosse a ID da entity criadora da Bomb. A ID da Bomb em si é o EntityID herdando de Componenent.
Então Bomb deixaria de ser uma Entity e passaria a ser um Component?
Se fosse feito desse jeito, como diferenciar, por exemplo, os CellPlacement das bombas e de quem as lançou? Ou, em uma explosão, diferenciar qual a bomba que deve explodir, já que todos os componentes Explosive vão ter o mesmo owner?
Bomb Entity agrega os Components 'CellPlacement' e 'Explosive'.
Explosive mantem a relação Entre a Bomb (através do seu EntityID) e quem a criou (ownerID). Talvez um nome melhor para o atributo ownerID fosse creatorEntityID.
Acho possível. Vou tentar fazer o refactoring agora e aviso se encontrar algum problema
Okay, é possível fazer funcionar desse jeito. Pode fechar essa issue, mas eu reforço ainda mais a issue #8 Pois os nomes das variáveis estão confusos.
Trazendo aqui um problema encontrado no Bomb module:
o EntityID dos componentes de uma bomba é diferente do EntityID de um dropper. Ou seja, procurar componentes baseado no id do Dropper não vai retornar os componentes da bomba.
É preciso que um Entity tenha talvez uma lista de filhos. Desta forma, poderia ser feita uma pesquisa como:
Entity entidadePai = entityManager.getEntity(dropper.getEntityID()) List listaDeFilhos = entidadePai.getListaFilhos()
for(Entity entidade : listaDeFilhos){ //Aqui sim a pode rolar a procura por componentes de entidades filhas (como bombas) }