Piszemy RPGo-Platformówkę (5) – Walka

Wprowadzenie uzbrojenia

W dzisiejszym (nieco opóźnionym) wpisie (a raczej uzupełnieniu poprzedniego) zajmiemy się omówieniem pierwszym rodzajem wyposażenia, nieodzownie połączonym z walką, a więc bronią.

Tradycyjnie dla tej serii, omawiany kod dotyczy zmian do commit’a [2f1f893], a wersja demo jest już dostępna do [pobrania].

Walka (część 2)


Pierwszym elementem od jakiego zaczniemy jest wprowadzenie „pojęcia” śmierci do naszej gry, tzn chcemy aby każdy obiekt posiadający statystyki po spełnieniu pewnych warunków był uznawany jako „martwy”, a więc niemogący wchodzić w interakcję z resztą otoczenia (nie może otrzymywać obrażeń, poruszać się).

W teorii sprawdzenie stanu postaci mogłoby się ograniczać do przyrównania ilości życia z zerem (do tego też się sprowadza podstawowa implementacja tej funkcjonalności), ale być może będziemy później chcieli wprowadzić specjalne postaci, które mimo braku życia będą mogły wchodzić w jeszcze jakieś interakcje.

Kolejnym wartym uwagi fragmentem kodu jest zauważenie, że dany obiekt nie zawsze w danej chwili zadaje obrażenia co zakładała nasza poprzednia implementacja. Bowiem może dojść do sytuacji, gdy zajdzie kolizja pomiędzy np. bronią a postacią, ale broń będzie w stanie cooldown’u, a więc nie będzie zadawała obrażeń.

Idąc dalej chcemy wprowadzić atakowanie nie przy użyciu „aury” postaci, a poprzez wyciągnięcie broni na wciśnięcie przycisku, w tym celu dodajemy jego obsługę:

Aktywacja bronic odbywa się następująco:

Tutaj pojawił nam się nowy obiekt klasy Weapon, który w powyższym listingu „uruchamia” naszą broń po wciśnięciu przycisku atak. Warto zauważyć, że do momentu gdy broń nie zostanie użyta to nie jest w stanie zadać obrażeń.

Tym samym zbliżyliśmy się do klasy Weapon, powyższa klasa umożliwia na stworzenie broni zarówno białej jak i palnej, mechanika aktywacji / dezaktywacji samej broni jest zaszyta także w samych Animacjach, które odpowiednio wyłączają i włączają kolizje z bronią.

Jak widzimy (zgodnie z moimi zapowiedziami) broń jest rozszerzeniem klasy CharacterStats, wprowadza ideę cooldownu oraz ilości dostępnej amunicji (po skończeniu której staje się bezużyteczna). Obie idee są proste i nie odbiegają zbytnio od poprzednich lekcji, a zatem pozwolę pominąć sobie ich dokładne objaśnienie.

Podsumowanie


To tyle co dla Was przygotowałem w tym wpisie, który jest de facto uzupełnieniem poprzedniego. W kolejnym pojawi się znacznie więcej ciekawych (i nowych) rzeczy, bo zabawimy się w stworzenie prostego AI.

Tradycyjnie zapraszam do zagrania w demo, dzielenia się komentarzami oraz śledzeniem bloga na social media (fb, twitter, g+).

Code ON!