gabrielsr / bomberman

Continuado em: https://github.com/ecsb/ecsbomberman
6 stars 24 forks source link

Lista de Entitys Filhas #11

Closed drazevedo closed 9 years ago

drazevedo commented 10 years ago

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) }

gabrielsr commented 10 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?

drazevedo commented 10 years ago

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...

gabrielsr commented 10 years ago

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.

drazevedo commented 10 years ago

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?

gabrielsr commented 10 years ago

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.

drazevedo commented 10 years ago

Acho possível. Vou tentar fazer o refactoring agora e aviso se encontrar algum problema

drazevedo commented 10 years ago

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.