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.

- Rejestracja:około 9 lat
- Ostatnio:prawie 5 lat
- Postów:27


- Rejestracja:prawie 22 lata
- Ostatnio:12 minut
- Postów:6628
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.

- Rejestracja:około 9 lat
- Ostatnio:prawie 5 lat
- Postów:27
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.

- Rejestracja:prawie 22 lata
- Ostatnio:12 minut
- Postów:6628
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 :(


- Rejestracja:prawie 14 lat
- Ostatnio:około godziny
- Postów:3169
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.



- Rejestracja:ponad 8 lat
- Ostatnio:około 2 lata
- Postów:231
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.