71 lines
2.1 KiB
C++
71 lines
2.1 KiB
C++
// context_escenes.hpp - Sistema de gestió d'escenes i context de transicions
|
|
// © 2025 Port a C++20
|
|
|
|
#pragma once
|
|
|
|
namespace GestorEscenes {
|
|
|
|
// Context de transició entre escenes
|
|
// Conté l'escena destinació i opcions específiques per aquella escena
|
|
class ContextEscenes {
|
|
public:
|
|
// Tipus d'escena del joc
|
|
enum class Escena {
|
|
LOGO, // Pantalla d'inici (logo JAILGAMES)
|
|
TITOL, // Pantalla de títol amb menú
|
|
JOC, // Joc principal (Asteroids)
|
|
EIXIR // Sortir del programa
|
|
};
|
|
|
|
// Opcions específiques per a cada escena
|
|
enum class Opcio {
|
|
NONE, // Sense opcions especials (comportament per defecte)
|
|
JUMP_TO_TITLE_MAIN, // TITOL: Saltar directament a MAIN (starfield instantani)
|
|
// MODE_DEMO, // JOC: Mode demostració amb IA (futur)
|
|
};
|
|
|
|
// Constructor inicial amb escena LOGO i sense opcions
|
|
ContextEscenes()
|
|
: escena_desti_(Escena::LOGO),
|
|
opcio_(Opcio::NONE) {}
|
|
|
|
// Canviar escena amb opció específica
|
|
void canviar_escena(Escena nova_escena, Opcio opcio = Opcio::NONE) {
|
|
escena_desti_ = nova_escena;
|
|
opcio_ = opcio;
|
|
}
|
|
|
|
// Consultar escena destinació
|
|
[[nodiscard]] auto escena_desti() const -> Escena {
|
|
return escena_desti_;
|
|
}
|
|
|
|
// Consultar opció actual
|
|
[[nodiscard]] auto opcio() const -> Opcio {
|
|
return opcio_;
|
|
}
|
|
|
|
// Consumir opció (retorna valor i reseteja a NONE)
|
|
// Utilitzar quan l'escena processa l'opció
|
|
[[nodiscard]] auto consumir_opcio() -> Opcio {
|
|
Opcio valor = opcio_;
|
|
opcio_ = Opcio::NONE;
|
|
return valor;
|
|
}
|
|
|
|
// Reset opció a NONE (sense retornar valor)
|
|
void reset_opcio() {
|
|
opcio_ = Opcio::NONE;
|
|
}
|
|
|
|
private:
|
|
Escena escena_desti_; // Escena a la qual transicionar
|
|
Opcio opcio_; // Opció específica per l'escena
|
|
};
|
|
|
|
// Variable global inline per gestionar l'escena actual (backward compatibility)
|
|
// Sincronitzada amb context.escena_desti() pel Director
|
|
inline ContextEscenes::Escena actual = ContextEscenes::Escena::LOGO;
|
|
|
|
} // namespace GestorEscenes
|