Architektura Systemu i Dokumentacja Klas
Silnik został zaprojektowany z myślą o modularności. Centralnym punktem aplikacji jest pętla gry, która synchronizuje wejście, fizykę (stały krok czasowy), sieć, odtwarzanie wideo i renderowanie grafiki.
Diagram Przepływu (Main Loop)
graph TD
A[Application::run] --> B[Zarządzanie czasem - Fixed Timestep 60Hz]
B --> C[processInput - Logika gracza, UI, Zapisy]
C --> D[Network Sync - Odbiór pakietów i mapy]
D --> E[Physics & Logic - Kolizje, Zbieranie ECTS]
E --> F[Interpolacja sieciowa i Logika Bossa]
F --> G[Render Frame - Geometria, Shadery, Wideo, UI]
G --> A
Główne Moduły i Klasy
Core Aplikacji
-
Application — Serce gry. Inicjalizuje GLFW/OpenGL, zawiera główną pętlę gry
run(). Koordynuje stan rozgrywki (GameStage), system zapisu i wywołuje pozostałe menedżery. -
GameObject — Abstrakcyjna klasa bazowa dla fizycznych bytów. Definiuje pozycję, wymiary oraz domyślną detekcję kolizji AABB.
Logika i Świat
-
Player — Odpowiada za logikę poruszania się, grawitację, obsługę myszy i klawiatury. Zarządza systemem checkpointów i respawnem.
-
LevelGenerator — Proceduralny generator map. Buduje wielowarstwowe tory parkour, rozsiewa przedmioty (ECTS, Piwo, Energetyki) oraz generuje ściany w oparciu o wspólne ziarno (Seed).
-
Obstacle oraz Item — Reprezentacje fizycznych przeszkód i zbieralnych przedmiotów na mapie.
Moduł Graficzny i Wideo
-
Renderer — Spina logikę rysowania grafiki. Renderuje świat, graczy (korzystając z modeli
.obj), nakłada tekstury i rysuje interfejs 2D oraz dialogi. -
VideoPlayer — Autorska klasa integrująca bibliotekę FFmpeg. Dekoduje klatki wideo z pliku
.mp4, konwertuje je do przestrzeni RGB i przesyła w czasie rzeczywistym do tekstur OpenGL. -
Mesh oraz TexturedMesh — Abstrakcje dla geometrii (VBO). Pozwalają na błyskawiczne rysowanie modeli załadowanych z dysku.
-
Shader — Obsługuje programowalny potok OpenGL (GLSL).
Moduł Sieciowy, UI i Zapis
-
NetworkManager — Hermetyzuje protokół UDP. Obsługuje sesje (pokoje), heartbeat, przekazywanie koordynatów oraz synchronizację ziarna mapy (Seed) pomiędzy graczami.
-
MenuManager — Obsługuje UI oparte na stanach (
MenuState). -
DialogManager — Autorski parser wczytujący rozmowy z pliku
dialogs.json. Obsługuje dynamiczne sekcje i losowanie kwestii. -
SaveManager — Mechanizm zapisu (stanu przedmiotów, etapu gry) do pliku
savegame.json.