Motor de sprites/animacions/surfaces i jugador centrat (v0.2.0)

This commit is contained in:
JailDesigner committed 2026-04-18 21:02:55 +02:00
1 parent 7bb1edd08a
commit de5a670fdb
34 files changed
+16137 -81

No files matched your search

+17 -5
View File
@@ -4,29 +4,41 @@
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <memory>
#include <utility>
#include "core/rendering/screen.hpp"
#include "core/resources/resource_cache.hpp"
#include "core/scene/scene.hpp"
#include "core/system/event_buffer.hpp"
#include "game/scenes/black_scene.hpp"
#include "game/scenes/game_scene.hpp"
Director::Director() {
if (!SDL_Init(0)) {
std::fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
}
Screen::init();
// Registrem SDL_Quit ABANS de tocar cap singleton: així el handler atexit
// s'executa DESPRÉS dels destructors estàtics de Screen i Cache (atexit
// registrat abans de la construcció d'un objecte estàtic corre després
// del seu destructor). Sense açò, Screen::~Screen cridaria SDL_Destroy*
// amb SDL ja apagat → caos de destrucció clàssic.
std::atexit(+[] { SDL_Quit(); });
current_scene_ = std::make_unique<BlackScene>();
// Forcem la construcció dels singletons en l'ordre desitjat: primer
// Screen (necessari per a renderitzar), després Cache. La destrucció
// estàtica anirà LIFO: Cache primer, Screen últim.
(void)Screen::get();
(void)Resource::Cache::get();
current_scene_ = std::make_unique<GameScene>();
last_ticks_ms_ = SDL_GetTicks();
}
Director::~Director() {
current_scene_.reset();
Screen::destroy();
SDL_Quit();
// SDL_Quit corre via atexit; els singletons via destrucció estàtica.
}
void Director::processEvents() {