Open uninterruptables opened 10 years ago
Ekkor két út áll rendelkezésünkre: 1.: elfelejtjük a castOn(grid) metódust, mert rákényszerülünk a Scene.place(tower/trap, grid) -jére, a magic-nál úgyis Scene.cast(magic) lesz.... és akkor átnézünk minden grid-et a scene-téren, h for-each grid in grids: grid.isInRange(tower) a tower-es place()-ben és ha true akkor berakjuk a roadGrid-et a tower targetPublishers listájába + feliratkozunk annak a listájába, egyébként pedig trap-re csak rábasszuk...
2.1: sugár irányban elkezdünk terjedni a toronyból.... nagyon egyszerű, de hatékony: a grid beregisztrálja a tornyot és beregisztráltatja magát ahhoz, majd megnézzük, h az adott gridből egyrészt merre menjünk tovább a torony ( x,y ) -ja alapján ( nincs visszalépés ), majd azt hogy benne vannak-e a kiválasztott delikvensek a range-ben, ha nincs akkor return.
2.2.: az adott grid megnézi, h benne van-e a range-ben, ha igen bereggeli magát, egyébként delegálja a hívást azoknak, akiknek érdemes, azaz a torony ( x,y ) -ja alapján... itt még mindig lehet az, hogy valakit duplán rakunk be, de ezt targetPublishers.contains() -al ki lehet küszöbölni...
Az a helyzet, hogy meg kéne konstruálni azt, hogyan lehet felmérni, ki van az adott torony hatókörében, mi alapján tesszük be a roadGrid-eket oda.. nyílván kéne egy isInRange(Tower tower) metódus minden TerrainGrid-be, aztán... ehh.. akkor megvan :D :D
szóval TerrainGrid-ben egy ilyen metódus: <> isInRangeOf(Tower tower): boolean
RoadGrid -ben megnézi, hogy ( x,y ) és a Tower ( x,y ) távolsága <= tower.range...
GroundGrid returns false (Y)