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ć i renderowanie grafiki.

Diagram Przepływu (Main Loop)

graph TD
    A[Application::run] --> B[Zarządzanie czasem - Fixed Timestep 60Hz]
    B --> C[processInput - Reakcja na klawiaturę/mysz]
    C --> D[Network Sync - Odbiór pakietów]
    D --> E[Physics & Logic - Aktualizacja świata]
    E --> F[Interpolacja - Wygładzanie graczy sieciowych]
    F --> G[Render Frame - Rysowanie sceny]
    G --> A

Mechanizmy Obiektowe (OOP)

Silnik wykorzystuje polimorfizm i dziedziczenie. Klasą bazową dla wszystkich fizycznych bytów jest abstrakcyjna klasa GameObject. Pozwala to na trzymanie różnorodnych obiektów (graczy, przeszkód, NPC) i odpytywanie ich o uniwersalne cechy (np. metody kolizji AABB).

Pełna Dokumentacja Klas

Core Aplikacji

  • Application — Serce gry. Inicjalizuje okno GLFW, ładuje rozszerzenia OpenGL, zawiera główną pętlę gry run(). Koordynuje działanie menedżerów: MenuManager, NetworkManager oraz Renderer. Zarządza też listą przeszkód worldObstacles.
  • GameObject — Klasa bazowa (interfejs). Definiuje wymiary obiektu (width, height, depth), jego pozycję (x, y, z) oraz zawiera domyślną implementację detekcji kolizji checkCollisionAABB.

Logika i Świat

  • Player — Dziedziczy po GameObject. Odpowiada za logikę poruszania się (horyzontalnie z uwzględnieniem kąta kamery) oraz wertykalnie (skakanie, grawitacja). Pilnuje kolizji ze światem. Przechowuje strukturę PlayerData.
  • Obstacle — Dziedziczy po GameObject. Reprezentuje statyczną przeszkodę w świecie (ścianę, podłogę, blok).

Moduł Graficzny

  • Renderer — Spina w całość logikę rysowania grafiki za pomocą OpenGL. Renderuje czcionki (korzystając ze zintegrowanego stb_truetype), tekstury (skybox) i geometrię sceny. W każdej klatce rysuje świat, przeszkody, lokalnego gracza i pozostałych graczy sieciowych.
  • Mesh — Abstrakcja dla geometrii. Przyjmuje tablicę wierzchołków (vertices), generuje bufor na karcie graficznej (VRAM) i pozwala na błyskawiczne rysowanie jednego kształtu milionami pikseli naraz.
  • Shader — Obsługuje kompilację Vertex Shadera i Fragment Shadera oraz łączenie ich w finalny Program GPU. Wyciąga programowalny potok OpenGL na wierzch silnika.
  • OpenGLExt — Moduł wymagany dla platformy Windows! Ładuje wskaźniki do nowoczesnych funkcji OpenGL (związanych z buforami i shaderami), które natywnie nie są obecne w systemie Microsoftu.

Moduł Sieciowy i UI

  • NetworkManager — Hermetyzuje złożoność protokołu UDP i Socketów. Otwiera porty non-blocking. Potrafi prosić o listę sesji, dołączać, weryfikować połączonych graczy i wysyłać koordynaty co klatkę.
  • MenuManager — Obsługuje UI i Menu główne z wykorzystaniem maszyny stanów (MenuState). Zarządza wirtualnymi przyciskami (struktura Button), sprawdza stan kursora (Hover) i deleguje zdarzenia do Application.