TowerDefense buff area implementacja

TowerDefense buff area implementacja
Munvik
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 5 lat
  • Postów:27
0

Cześć. Mam dwa rodzaje wieżyczek ( buff i attack) dziedziczące po tower.
Wszystkie na mapie mam zebrane w jeden std::vector<tower> towers.
Nie wiem jak zaimplementować interfejs w ten sposób, że gdy dostawiamy na mapke buffTower, wieże attackTower łapały tego buffa ( o ile są w jej zasięgu).
I oczywiście jak zaimplementować sprzedaż takiej wieżyczki, żeby odjąć te buffy.

edytowany 1x, ostatnio: Munvik
Munvik
Zależy mi tylko na koncepcji jak coś takiego może wyglądać w praktyce
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:4 minuty
  • Postów:6687
1

Dodaj metody obsługujące eventy i wykorzystaj te metody w odpowiednim czasie.

Np. OnCreate(), OnCreateOtherTowerInRange(), OnSell().

W OnCreate buffTowera, przypisujemy go do wszystkich attackTower w zasięgu. Każdy attackTower będzie miał listę buffów (żeby nie zmieniać wartości bazowych). Przy każdym ataku itp. attackTower będzie przepuszczał swoje statsy przez listę buffów.

W OnSell usuwamy buffa z wszystkich attackTowerów. Dodatkowo, zwracamy odpowiednią ilość kasy graczowi itp.


🕹️⌨️🖥️🖱️🎮
edytowany 4x, ostatnio: Spine
Munvik
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 5 lat
  • Postów:27
0

To chyba źle zrobiłem dodając wszystkie wieże ( buff, attack) w jeden vector, bo w metodzie OnCreate() będę przeszukiwał wszystkie wieżyczki, w tym buffTower'y, a tych nie chcę ulepszać.
Poza tym mam zrobić jakiś pojemnik na wskaźniki wieżyczek, które zostały ulepszone ? Bo w OnSell() mogę właśnie przez wskaznik odjąć buffa, albo znowu przeszukiwać wszystkie wieżyczki w zasięgu ? Pomysł mi się nawet podoba.

edytowany 1x, ostatnio: Munvik
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:4 minuty
  • Postów:6687
0
Munvik napisał(a):

To chyba źle zrobiłem dodając wszystkie wieże ( buff, attack) w jeden vector, bo w metodzie OnCreate() będę przeszukiwał wszystkie wieżyczki, w tym buffTower'y, a tych nie chcę ulepszać.

Można trochę namodzić ;) klasa rodzic może mieć metodę wirtualną, która służy do dodawania buffów do wieżyczki. Attack tower może sobie dodać buffa tą metodą, a buff tower może nic nie robić tą metodą.

Poza tym mam zrobić jakiś pojemnik na wskaźniki wieżyczek, które zostały ulepszone ? Bo w OnSell() mogę właśnie przez wskaznik odjąć buffa, albo znowu przeszukiwać wszystkie wieżyczki w zasięgu ? Pomysł mi się nawet podoba.

Można tak zrobić, ale co zrobisz jeśli ktoś sprzeda wieżyczkę, która została ulepszona przez buffa? Lepiej, żeby tych powiązań było jak najmniej.

W C++ chyba wskaźnik do obiektu, który został usunięty, nie staje się automatycznie nullem :(


🕹️⌨️🖥️🖱️🎮
edytowany 1x, ostatnio: Spine
Munvik
Znaczy ja i tak mam smartPointery to chyba nic by się nie stało :P
Munvik
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 5 lat
  • Postów:27
0

W chwili postawienia buffTower w metodzie onCreate() przeszukujemy i dodajemy buffa. A w chwili postawienia attackTower co ma ona zrobić , żeby znaleźć buffa który jest w zasięgu ?

edytowany 1x, ostatnio: Munvik
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:4 minuty
  • Postów:6687
0

attackTower musi w swoim OnCreate wywołać na sobie metodę innych wieżyczek: OnCreateOtherTowerInRange(this).
Metoda OnCreateOtherTowerInRange może sprawdzać, czy this jest w zasięgu.


🕹️⌨️🖥️🖱️🎮
edytowany 3x, ostatnio: Spine
Munvik
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 5 lat
  • Postów:27
0

Ok dzięki wielkie, nie zamykam jeszcze :)

WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 2 godziny
  • Postów:3183
1

Zasieg jest latwo sprawdzic - bierzesz wzor na metryke euklidesowa i jazda (jesli wykrywamy w okregu, oczywiscie mozemy inna jak chcemy np. kwadrat).

A ten buff jak dziala? Zakladam ze jak repeater, wiec jesli to przedluzenie to tak samo sprawdzasz ktorego buffa masz w zasiegu i potem liczysz dla niego w co moze strzelac.
Pytanie czy buff przedluza zasieg buffa? Jesli tak to zrobilbym pod spodem graf polaczen (oczywiscie trzeba go aktualizowac) i pozniej przeszukiwal wg. potrzeby.

Munvik
Aż tak nie będę kombinował i zasięg będę sprawdzał z Pitagorasa xD
WhiteLightning
A to nie bylo to samo? :)
Munvik
Teraz już wiem, że to to samo :D
CZ
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • Postów:231
0
Kopiuj
To chyba źle zrobiłem dodając wszystkie wieże ( buff, attack) w jeden vector, bo w metodzie OnCreate() będę przeszukiwał wszystkie wieżyczki, w tym buffTower'y, a tych nie chcę ulepszać.

Zawsze możesz wprowadzić sprawdzanie jakiego typu jest wieżyczka, np wprowadzając nową zmienną do klasy rodzica przechowującą informację o typie wieżyczki, np 0 - buffTower, 1 - attackTower i przy przeszukiwaniu pętli wieżyczek sprawdzać co to za typ. Pewnie są i inne sposoby sprawdzania typu klasy potomnej (typeid? : http://en.cppreference.com/w/cpp/language/typeid) - ale nie stosowałem tych metod więc nie wiem.

CZ
sorry za rozwalony cytat, ale nie wiem jak się je tu dodaje, ktoś wie?
Munvik
Tak myślałem nad tym wszystkim co napisałeś i raczej skorzystam z enuma

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.