[Java][LibGDX][artemis-odb] Szybkie tworzenie prototypu.



Pisanie gier w Javie, nawet w tak rozbudowanym frameworku jak libGDX jest dość mozolnym i uciążliwym zajęciem, w porównaniu np. do szybkości pisania w gotowych silnikach. Jak np. Unity.
Na szczęście istnieją biblioteki pomagające w przyśpieszeniu naszej pracy i jej uproszczeniu. Oczywiście kosztem poznania danej biblioteki. Dzisiaj właśnie o jednej takiej bibliotece będzie.
Jest nią artemis-odb.
Sam artemis-odb to implementacja systemu ESC - Entity System Component. Czyli taki system w którym nasz główny obiekt World, jest uzupełniany przez nasze Entity posiadające Componenty i obsługiwany przez nasze Systemu. Dzięki temu mamy fajną skalowalna aplikację, z odseparowana logiką.



Jeśli chodzi o komponenty tutaj sprawa jest dosyć prosta. Przechowujemy w nich tylko dane. Oto kilka możliwych rodzajów komponentów i ich zastosowań:

Podstawowe:
Pos: przechowuje pozycje Entity w postaci Vector2.
Bounds: przechowuje rozmiar danego Entity. Tutaj występują 4 typy proste xmin, xmax, ymin, ymax.
Angle: komponent przechowuje kąt Entity, oraz jego Origin czyli środek obrotu.
Scale: komponent przechowuje w sobie skale obiektu w postaci zmiennej float, gdzie 1f jest skalą domyślną.

Kamera:
Camera: komponent znacznikowy. Określający dane Entity jako kamerę.

Renderowanie:
Renderable: komponent określający że Entity jest przeznaczone do wyświetlania. Przechowuje w sobie wartośc layer określającą kolejność rysowania danego entity.
Anim: komponent służący do określenia czynności przydatnych przy wyświetlaniu animacji. Np. w technice Frames albo Spine.
Invisible: komponent znacznikowy do określenia że entity ma nie być renderowane.

Interakcja:
Aim: komponent do określania celu dla entity. Może być null.
Focus: tak jak wyżej, z tym że nie może być nulla. Może służyć jako znacznik że dane entity ma być obsługiwane przez inny system.

Mysz:
MouseCursor: znacznik, oznacza dane entity jako kursor myszy.

Systemy natomiast dzieli się:
na 3 rodzaje w zależności od czasu:
- Co klatkowe: są aktualizowane co klatkę. Standardowo jak w libGDX.
- Deley: pomiędzy końcem wywołania a początkiem kolejnego musi upłynąć określony czas.
- Interval: wywoływana co określony czas.

na 2 rodzaje według typu działania:
- działające na entity z konkretnymi komponentami wybieranymi za pomocą Aspect`ów.
- jako podstawowe, ogólnego przeznaczenia.