W ostatnich dniach (tygodniach) przepisywałem kod obsługi plecaka na taki, który w końcu będę mógł przenieść do głównego projektu. Przyjąłem w miarę wygodny dla mnie sposób pisania kodu gdzie tworzę jeden projekt surowy, z pomysłem i staram się napisać działającą funkcjonalność, drugi projekt, który jest rozwinięciem pierwszego, ale z wyczyszczonym kodem, po refaktorze i powiedzmy, że elegancko napisany oraz kolejny drobny projekcik, w którym sprawdzam drobne, często jedno funkcyjne zmiany (np. klikanie po kontrolkach i zliczanie kliknięć) lub dlaczego coś nie działa. W przypadku plecaka podejście sprawdziło się jako-tako, ponieważ przeglądania kodu w kilku repo bywa upierdliwe, jednakże udało mi się stworzyć kod, który spokojnie mogę przenieść do głównego repo przygody Sladuma.
Przy okazji przepisywania kodu na czysto wprowadziłem spore zmiany względem wersji sprzed miesiąca.
Korzystam teraz z jednej sceny i kodu dla obsługi plecaka gracza oraz postaci niezależnej dzięki czemu zniknęła masa zduplikowane kodu. Funkcjonalności podnoszenia / opuszczania przedmiotu czy chociażby zapamiętania co się znajduje w plecaku są tożsame.
Ta krytyczna zmiana spowodowała pojawienie się uciążliwego błędu związanego z podnoszeniem przedmiotu ze slota nie występującego w pierwszej wersji kodu. Dzięki niemu nauczyłem się iż nawet jeśli scena jest niewidoczna to przechwytuje eventy rozsyłane po drzewie (w sumie nic dziwnego). Zrozumienie przyczyny dziwacznego zachowania zajęło dobrych kilka godzin szukania, a poprawienie zamknęło się w jednej linijce kodu.
Inna ważna zmiana to możliwość zapamiętania, w który slot wylądował przedmiot po przeniesieniu. Plecak nie jest już wypełniany przedmiotami od pierwszego pustego slota do końca plecaka, ale względem zapisanej konfiguracji. Ta zmiana wprowadziła inny ciekawy błąd: przedmiot zostawiony w slocie z określoną kategorią np. tylko na hełm duplikował się co otwarcie plecaka :-).
Wprowadziłem też troszkę lepsze rozpoznawanie przedmiotów - porównywane są UID-y.
Sam przedmiot nie jest już równoważny z rysunkiem, który go przedstawia. Rysunek generowany jest tylko na potrzeby wyświetlania np. gdy leży na ziemi lub po otworzeniu plecaka. Przedmiot wskazuje atlas i obszar atlasu, z którego wizualizacja ma być wygenerowana. Uprościło to kilka elementów w kodzie jak przenoszenie między plecakami npc i gracza gdzie zdarzało mi się dziwnie gubić rysunki w powietrzu. Ułatwiło także wyłapanie wiszących w drzewie i nie uwolnionych z użyciem QueeeFree() węzłów.
Kilka zrzutów poniżej (i tak zmieniłem ponownie wygląd mapy abym wiedział w którym projekcie estem)
Startowy stan sceny |
Ale teraz jak poukładamy sobie przedmioty jak nam się podoba to po ponownym otworzeniu skrzynki zostaną na przypisanych pozycjach. |
Tak samo będzie z plecakiem gracza. Przedmioty zostaną tam gdzie miały być. |
A tutaj widać efekt otworzenia pustej skrzynki oraz plecaka gracza... |
Przerzućmy hełm z czerwonym piórem i podejdźmy do poprzednio otworzonej skrzynki z przedmiotami.. |
Brak komentarzy:
Prześlij komentarz
Tu możesz wstawić swój komentarz