Files
aee-arcade/source/main.cpp
T
JailDesignerandClaude Opus 4.7 1243b457be feat(log): introdueix Log:: wrapper sobre SDL_Log
Logger lleuger a source/utils/log.{hpp,cpp} amb API basada en std::format
i filtre runtime via la variable d'entorn AEE_LOG (sintaxi
*:info,Resource::Helper:warn,scene:debug). Substitueix gradualment els
std::cout/cerr dispersos.

- Categories CUSTOM registrades sota demanda; per defecte INFO.
- Categories SDL natives no es toquen tret que l'usuari posi *:level.
- Migra resource_helper.cpp i els marcadors d'inici/fi (main.cpp) com a
  testimoni; la resta de subsistemes es migra en commits següents.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 09:01:09 +02:00

50 lines
1.5 KiB
C++

#define SDL_MAIN_USE_CALLBACKS 1
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <memory>
#include "core/system/director.hpp"
#include "core/system/event_buffer.hpp"
#include "utils/log.hpp"
auto SDL_AppInit(void** appstate, int argc, char* argv[]) -> SDL_AppResult {
(void)argc;
(void)argv;
// Logger primer de tot perquè l'arrencada del Director ja emet logs.
Log::init();
// Marcador d'inici: ha de ser la PRIMERA línia de log del programa.
Log::info("App", "Game start");
// Construïm el Director amb make_unique i l'entreguem en cru a SDL.
// El SDL_AppQuit reclamarà la propietat amb un altre unique_ptr (RAII).
auto director = std::make_unique<Director>();
*appstate = director.release();
return SDL_APP_CONTINUE;
}
auto SDL_AppEvent(void* appstate, SDL_Event* event) -> SDL_AppResult {
(void)appstate;
EventBuffer::events.push_back(*event);
return SDL_APP_CONTINUE;
}
auto SDL_AppIterate(void* appstate) -> SDL_AppResult {
auto* director = static_cast<Director*>(appstate);
return director->iterate();
}
void SDL_AppQuit(void* appstate, SDL_AppResult result) {
(void)result;
// Reabsorbim la propietat: el destructor neteja l'escena; els singletons
// (Screen, Cache) viuen fins a la destrucció estàtica i SDL_Quit dispara
// via atexit després d'ells.
{
std::unique_ptr<Director> director(static_cast<Director*>(appstate));
}
// Marcador de fi: ha de ser l'ÚLTIMA línia de log del programa.
Log::info("App", "Bye!");
}