2DXngine: aktualizacja po drugim tygodniu

Posted on Fri 17 March 2017 in Gamedev

Cześć. Mija drugi tydzień konkursu "Daj się poznać " pora więc na podsumowanie tygodnia prac nad projektem 2DXngine. Niestety z braku czasu w tym tygodniu prace nieco spowolniły, ale mimo to udało się skończyć mi prace nad systemem typów, ale po kolei. W tym tygodniu znowu średnio szło mi ze śledzeniem swojego czasu pracy, ale mogę powiedzieć, że spędziłem nad projektem około 14 godzin. Nie cały ten czas poszedł jednak na development, ponieważ musiałem mocno się douczyć. Po pierwsze zderzyłem się z makrami do tej pory nie musiałem ich nigdy używać a i też w książkach, które czytałem opisy co można z nimi zrobić były dość lakoniczne. Po drugie kiedy już myślałem, że wszystko elegancko działa nagle okazało się, że jeszcze parę rzeczy muszę doimplementować. Dobra koniec narzekania przejdźmy do tego co udało mi się zrobić. Aby prawu cytatu stało się za dość a i kudosy za ułatwienie mi pracy poszły w odpowiednie miejsce to implementację swojego rozwiązanie oparłem o pewien artykuł który znajdziecie TU. Na potrzeby component modelu zaimplementowałem prosty system rozpoznawania typów - pozwala on wyciągnąć z zarejesrtowanych klas typ za pomocą metody getType. Typ posiada swój identyfikator i nazwę oraz identyfikator typu bazowego (w przypadku kiedy go nie ma jest to wartość -1). Niestety postawiłem pewne ograniczenia, a mianowicie nie można dziedziczyć po więcej niż jednej klasie, można natomiast dziedziczyć dowolnie głęboko, ponieważ typ posiada możliwość sprawdzenia czy w jego bazowych typach nie znajdują się typy wyższe pozwala to np. wyszukać wszystkie komponenty dziedziczące po jakieś wspólnej abstrakcji. Oprócz klasy reprezentującej typ na rozwiązania składają się następujące elementy:

  • TypeCache - elementy agregujący wszystkie typu korzystają z niego inne elementy dodając lub pobierając informacje o typie ,
  • makro definiujące i deklarujące typ - służą one do rejestracji, a dzięki zastosowaniu sztuczki ze statycznym wywołaniem klasy rejestracyjnej wywołują się przed funkcją main, co czyni to rozwiązanie bezpieczne dla wielowątkowości i w miarę zautomatyzowane,
  • macro dodające do klasy funkcje getType, dzięki której jesteśmy w stanie pobrać typ z instancji klasy.

Dokładnie z przykładami kodu postaram opisać się to rozwiązanie w przyszłych postach. Całość jest już na GitHubie, więc jeżeli ktoś jest ciekawy to zapraszam do zapoznania się z kodzikiem. Jeżeli ktoś z czytających mnie osób zajmuje się C++ i ma do polecenia jakieś ciekawe książki to zapraszam do sekcji komentarzy. Tymczasem w tym tygodniu planuje dalej rozwijać GameObject i komponenty, może uda mi się zacząć coś ze scenami. Pierwszą sprawą jest jednak to abym dopisał więcej testów do istniejących funkcjonalności, więc tym zajmę się w najbliższych dniach.