afegits comandos y restriccions en la consola per al modo kiosko

This commit is contained in:
2026-03-28 00:26:29 +01:00
parent 7bad27d686
commit 8355c266a6
3 changed files with 79 additions and 12 deletions

View File

@@ -75,6 +75,7 @@ static void printHelp() {
SDL_Log(" DEBUG Toggle debug overlay (F12)");
#endif
SDL_Log(" SCENE [LOGO|LOADING|TITLE|CREDITS|GAME|ENDING|ENDING2|RESTART]");
SDL_Log(" KIOSK [ON] Enable kiosk mode");
SDL_Log(" EXIT / QUIT Quit application");
SDL_Log(" HELP/? Show this help in terminal");
}
@@ -117,10 +118,31 @@ static const std::vector<ConsoleCommand> COMMANDS = {
Options::video.border.enabled,
Screen::get()->toggleBorder())},
// FULLSCREEN [ON|OFF] — Pantalla completa (F3)
{.keyword = "FULLSCREEN", .execute = BOOL_TOGGLE_CMD("Fullscreen",
Options::video.fullscreen,
Screen::get()->toggleVideoMode())},
// FULLSCREEN [ON|OFF [PLEASE]] — Pantalla completa (F3); OFF bloqueado en kiosk sin PLEASE
{.keyword = "FULLSCREEN", .execute = [](const std::vector<std::string>& args) -> std::string {
const bool EXPLICIT_ON = !args.empty() && args[0] == "ON";
const bool EXPLICIT_OFF = !args.empty() && args[0] == "OFF";
const bool WITH_PLEASE = !args.empty() && args.back() == "PLEASE";
const bool IS_TOGGLE = args.empty();
const bool TURNING_OFF = EXPLICIT_OFF || (IS_TOGGLE && Options::video.fullscreen);
if (TURNING_OFF && Options::kiosk.enabled && !WITH_PLEASE) {
return "Not allowed in kiosk mode";
}
if (EXPLICIT_ON) {
if (Options::video.fullscreen) { return "Fullscreen already ON"; }
Screen::get()->toggleVideoMode(); return "Fullscreen ON";
}
if (EXPLICIT_OFF) {
if (!Options::video.fullscreen) { return "Fullscreen already OFF"; }
Screen::get()->toggleVideoMode(); return "Fullscreen OFF";
}
if (IS_TOGGLE) {
Screen::get()->toggleVideoMode();
return std::string("Fullscreen ") + (Options::video.fullscreen ? "ON" : "OFF");
}
return "Usage: FULLSCREEN [ON|OFF]";
}},
// ZOOM UP/DOWN — Zoom de ventana (F1/F2)
{.keyword = "ZOOM", .execute = [](const std::vector<std::string>& args) -> std::string {
@@ -171,15 +193,27 @@ static const std::vector<ConsoleCommand> COMMANDS = {
}},
#ifdef _DEBUG
// DEBUG — Toggle overlay de debug (F12, solo en builds debug)
{.keyword = "DEBUG", .execute = [](const std::vector<std::string>&) -> std::string {
Screen::get()->toggleFPS();
return "Debug overlay toggled";
// DEBUG [ON|OFF] — Overlay de debug (F12, solo en builds debug)
{.keyword = "DEBUG", .execute = BOOL_TOGGLE_CMD("Debug overlay",
Screen::get()->isFPSVisible(),
Screen::get()->toggleFPS())},
// SHOW FPS / HIDE FPS — Aliases de DEBUG ON / DEBUG OFF
{.keyword = "SHOW", .execute = [](const std::vector<std::string>& args) -> std::string {
if (args.empty() || args[0] != "FPS") { return "Usage: SHOW FPS"; }
if (Screen::get()->isFPSVisible()) { return "Debug overlay already ON"; }
Screen::get()->toggleFPS(); return "Debug overlay ON";
}},
{.keyword = "HIDE", .execute = [](const std::vector<std::string>& args) -> std::string {
if (args.empty() || args[0] != "FPS") { return "Usage: HIDE FPS"; }
if (!Screen::get()->isFPSVisible()) { return "Debug overlay already OFF"; }
Screen::get()->toggleFPS(); return "Debug overlay OFF";
}},
#endif
// SCENE [LOGO|LOADING|TITLE|CREDITS|GAME|ENDING|ENDING2|RESTART] — Cambiar o reiniciar escena
{.keyword = "SCENE", .execute = [](const std::vector<std::string>& args) -> std::string {
if (Options::kiosk.enabled) { return "Not allowed in kiosk mode"; }
if (args.empty()) { return "Usage: SCENE [LOGO|LOADING|TITLE|CREDITS|GAME|ENDING|ENDING2|RESTART]"; }
// RESTART: reinicia la escena actual (funciona desde cualquier escena)
@@ -210,12 +244,44 @@ static const std::vector<ConsoleCommand> COMMANDS = {
return "Unknown scene: " + args[0];
}},
// EXIT / QUIT — Cerrar la aplicacion
{.keyword = "EXIT", .execute = [](const std::vector<std::string>&) -> std::string {
// RESTART — Reiniciar desde el principio (equivale a SCENE LOGO)
{.keyword = "RESTART", .execute = [](const std::vector<std::string>&) -> std::string {
SceneManager::current = SceneManager::Scene::LOGO;
return "Restarting...";
}},
// KIOSK [ON|OFF PLEASE|PLEASE] — Modo kiosko
{.keyword = "KIOSK", .execute = [](const std::vector<std::string>& args) -> std::string {
const bool DISABLE = (!args.empty() && args[0] == "PLEASE") ||
(args.size() >= 2 && args[0] == "OFF" && args[1] == "PLEASE");
if (DISABLE) {
Options::kiosk.enabled = false;
return "Kiosk mode OFF";
}
if (!args.empty() && args[0] == "OFF") {
return "Not allowed in kiosk mode";
}
if (args.empty() || args[0] == "ON") {
if (Options::kiosk.enabled) { return "Kiosk mode already ON"; }
Options::kiosk.enabled = true;
if (!Options::video.fullscreen) { Screen::get()->toggleVideoMode(); }
return "Kiosk mode ON";
}
return "Usage: KIOSK [ON]";
}},
// EXIT / QUIT — Cerrar la aplicacion (bloqueado en kiosk)
{.keyword = "EXIT", .execute = [](const std::vector<std::string>& args) -> std::string {
if (Options::kiosk.enabled && (args.empty() || args[0] != "PLEASE")) {
return "Not allowed in kiosk mode";
}
SceneManager::current = SceneManager::Scene::QUIT;
return "Quitting...";
}},
{.keyword = "QUIT", .execute = [](const std::vector<std::string>&) -> std::string {
{.keyword = "QUIT", .execute = [](const std::vector<std::string>& args) -> std::string {
if (Options::kiosk.enabled && (args.empty() || args[0] != "PLEASE")) {
return "Not allowed in kiosk mode";
}
SceneManager::current = SceneManager::Scene::QUIT;
return "Quitting...";
}},