Files
coffee-crisis/source/core/system/director.h
T

76 lines
1.8 KiB
C++

#pragma once
#include <SDL3/SDL.h>
#include <cstdint> // for uint8_t
#include <memory>
#include <string> // for string, basic_string
class Game;
class Intro;
class Logo;
class Title;
struct Section;
// Secciones activas del Director
enum class ActiveSection : std::uint8_t { None,
Logo,
Intro,
Title,
Game };
class Director {
private:
// Objetos y punteros
SDL_Window *window; // La ventana donde dibujamos
SDL_Renderer *renderer; // El renderizador de la ventana
Section *section; // Sección y subsección actual del programa;
// Secciones del juego
ActiveSection activeSection;
std::unique_ptr<Logo> logo;
std::unique_ptr<Intro> intro;
std::unique_ptr<Title> title;
std::unique_ptr<Game> game;
// Variables
std::string executablePath; // Path del ejecutable
std::string systemFolder; // Carpeta del sistema donde guardar datos
// Inicializa jail_audio
static void initJailAudio();
// Arranca SDL y crea la ventana
auto initSDL() -> bool;
// Inicializa el objeto input
static void initInput();
// Crea el indice de ficheros
auto setFileList() -> bool;
// Comprueba los parametros del programa
static void checkProgramArguments(int argc, const char *argv[]);
// Crea la carpeta del sistema donde guardar datos
void createSystemFolder(const std::string &folder);
// Gestiona las transiciones entre secciones
void handleSectionTransition();
public:
// Constructor
Director(int argc, const char *argv[]);
// Destructor
~Director();
Director(const Director &) = delete;
auto operator=(const Director &) -> Director & = delete;
// Ejecuta un frame del juego
auto iterate() -> SDL_AppResult;
// Procesa un evento
auto handleEvent(SDL_Event *event) -> SDL_AppResult;
};