Piszemy RPGo-Platformówkę (12) – [Masz] i mój łuk!

Dokańczamy integrację ekwipunku z UI.

Witam Was w ostatniej* części z UI. Dzisiaj zajmiemy się głównie interakcją przedmiotów z poziomu UI.

Na wstępie tradycyjnie zachęcam do ogrania [dema] oraz własnej analizy dokonanych [zmian], którymi będziemy się dzisiaj zajmować.

(masz) I mój łuk!


Tym razem bez zbędnych ceregieli przejdźmy do praktyki, omówimy koncepcję nieco w biegu.

Nasza idea zakłada, że każdy kliknięty obiekt w ekwipunku wysyła wskaźnik na siebie, przez co sam obiekt zostaje „oznaczony” (co to oznacza dowiemy się za chwilę) – służy do tego metoda OnSelectedItem.

Same przyciski z ekwipunku połączone są z odpowiednio metodami: EquipSelected, UseSelected, DropSelected. Ich działanie ogranicza się do użycia odpowiednich metod ekwipunku lub przedmiotu. Metody wywoływane były omawiane szerzej w poprzednich wpisach.

Wróćmy do oznaczania przedmiotów (czy raczej ich wybierania). Ta metoda jest uniwersalna także dla odłączania przedmiotów. Samo oznaczenie (zaznaczenie) przedmiotu zmienia obiekt wobec, którego będą działały przyciski.

Wyjaśnię powyższą mechanikę na przykładzie: jeżeli mamy w ekwipunku miecz i tarczę, a chcemy założyć miecz, to musimy najpierw kliknąć na ikonkę miecza, a następnie kliknąć przycisk EQUIP.

Powyższa metoda dba o odpowiednie aktywowanie przycisków (np. jeżeli przedmiot nie jest „używalny” to przycisk USE pozostanie nieaktywny) oraz o zaktualizowanie opisów dotyczących danego przedmiotu.

Działanie powyższego kodu wizualizuje film:

Kolejną relatywnie dużą zmianą było dodanie postaci wobec, której ma zostać użyty przedmiot. Przypomnę: do tej pory wywołanie metody Use() nie było połączane z żadną konkretną postacią – nie mieliśmy sposobu aby sprawdzić kto użył przedmiotu (mógł to być gracz, ale także dowolna inna postać).

Rozwiązaniem tego problemu było dodanie parametru user, który jest wskaźnikiem na postać używającą przedmiot. Parametr został ten dodany do wszystkich metod odpowiedzialnych za używanie przedmiotów.

Powyższy listing pokazuje, że w ten sposób łatwo jesteśmy modyfikować odpowiednie statystyki postaci, w przykładzie powyżej jest to poziom zdrowia.

Ostatni listing pokazuje część łączącą broni z przedmiotami.

Tutaj wyjaśni się też gwiazdka z początku wpisu: integracja z Weapon nie jest pełna od strony Unity. Mianowicie żeby obecnie zaimplementowana broń była w pełni kompatybilna należałoby dopisać jeszcze trochę kodu i pobawić się z GUI. Ale skorzystam z przywileju, że traktuję Unity jedynie jako narzędzie do pokazywania pewnych pomysłów, to przynajmniej na razie daruję sobie pełną integrację (jeżeli ktoś ma ochotę, to zapraszam do puszczenia pull requesta) ;)

Podsumowanie


Udało nam się zakończyć temat ekwipunku i przedmiotów (yay!), dzisiaj sporo było rzeczy wymagających jedynie dobrego podejścia, aby rozwiązania problemów było dość łatwe do napisania ;)

W razie pytań, problemów, chęci podzielenia się opinią odsyłam do systemu komentarzy poniżej. Zachęcam jeszcze raz do ogrania dema (link na początku wpisu) oraz do śledzenia tej serii oraz bloga (także przez social media).

Za tydzień zajmiemy się tzw. „questami” (zadaniami) i wykonamy sobie coś w stylu tradycyjnego „znajdź X przedmiotów, zabij Y potworów”.

Code ON!