Skip to content

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.