Repository navigation
Core
Il core è lo strato comune usato dai progetti agpunicas. Gestisce il ciclo dell'applicazione e i servizi generali, lasciando ai singoli giochi la definizione di fisica, collisioni, intelligenza artificiale e regole.
| Area | Classi principali | Scopo |
|---|---|---|
| Applicazione |
Game, Window
|
Avvio SDL, game loop, eventi, stack delle scene e presentazione dei frame. |
| Scena di gioco |
Scene, GameScene, Object
|
Contenimento, aggiornamento e query sugli oggetti. |
| Interfaccia |
UIScene, OverlayScene
|
Menu, HUD, overlay e parallax. |
| Rendering |
View, RenderableObject
|
Camera, viewport, culling, ordinamento per layer e disegno. |
| Immagini |
Sprite e derivate |
Texture, animazioni, composizione a tile, riempimenti e testo. |
| Query spaziali | Quadtree |
Riduzione degli oggetti da esaminare per rendering e query geometriche. |
| Servizi |
Audio, Fonts, Scheduler, Singleton
|
Risorse condivise e azioni differite. |
| Livelli | LevelData |
Lettura, validazione e salvataggio JSON, conversioni geometriche condivise da loader ed editor. |
| Strumenti |
EditorScene, EditorUI, EditableObject
|
Editor visuale e persistenza JSON dei livelli. |
| Post-processing |
CPUShaderWindow, GPUShaderWindow
|
Effetti applicati al frame completo. |
Il diagramma completo delle classi è disponibile in una pagina dedicata, raggiungibile anche dal menu laterale.
flowchart TD
Game --> Window
Game --> SceneStack[Stack di Scene]
SceneStack --> Scene
Scene --> View
Scene --> Object
Object --> RenderableObject
RenderableObject --> Sprite
Scene --> Scheduler
GameScene --> Quadtree
GameScene --> OverlayScene
La distinzione più importante è questa:
- una
Scenedecide quali oggetti esistono e vengono aggiornati; - una
Viewdecide quale parte della scena viene mostrata; - un
RenderableObjectdescrive dove e con quali proprietà disegnare; - uno
Spritedescrive quale immagine usare e come campionarla.
Game non disegna direttamente gli oggetti: consegna le scene alla Window. È View::render() che cerca gli oggetti nell'area visibile, li ordina per layer e chiama draw() sui RenderableObject. Per la logica accade l'inverso: Game passa il tempo trascorso alle scene, che aggiornano gli oggetti secondo il proprio modello temporale.
Nei quattro esempi, main() crea e registra una sottoclasse di Game, chiama init() e infine run(). Il costruttore del gioco concreto inizializza i servizi dopo che la classe base ha creato finestra e renderer; init() costruisce le scene. Alla chiusura il main distrugge il gioco, che libera scene e servizi prima della finestra, poi chiama SDL_Quit(). Un oggetto creato con una Scene* si registra automaticamente nella scena; questa lo trasferisce nel proprio contenitore all'aggiornamento successivo.
L'ordine di studio suggerito è: Game, eventi, Scene e Object, View, Sprite. In seguito affronta overlay e UI, quadtree e risorse.
Il core usa:
- SDL3 per finestra, eventi e rendering;
- SDL3_image per le immagini;
- SDL3_mixer per suoni e musica;
- SDL3_ttf, opzionale, per il testo;
-
SDL_GPU (SDL3 3.4 o successiva), per
GPUShaderWindowquando è attivoWITH_SHADERS.
Le opzioni CMake WITH_TTF e WITH_SHADERS abilitano i moduli opzionali. Il core viene compilato come libreria statica agpcore e collegato dal progetto finale.
Il core non conosce concetti come Mario, Link, Box2D, gravità, vita o nemici. Queste idee appartengono ai progetti concreti, che specializzano Game, GameScene, Object e RenderableObject oppure costruiscono classi nuove sopra di esse.
Le SpriteFactory e i LevelLoader presenti nei progetti sono esempi di questo livello applicativo: non sono classi del core. Per aggiungere una nuova entità o schermata, segui la guida all'estensione.
LevelData appartiene invece al core: condivide formato, validazione e conversioni geometriche senza conoscere le classi dei giochi. La creazione delle entità resta nei LevelLoader. Vedi LevelData e livelli JSON.
- Panoramica
- Diagramma delle classi
- Architettura e game loop
- Sequenza di un frame
- Input ed eventi
- Scene e oggetti
- Rendering e coordinate
- Sprite e testo
- UI e overlay
- Quadtree
- Servizi e asset
- Estendere il core
- Editor dei livelli
- LevelData e livelli JSON
- Shader