console_commands: cmdCheat usa helpers applyCheatToggle i cmdCheatJail

This commit is contained in:
2026-05-17 15:14:54 +02:00
parent 724ac5f11d
commit 8cca35c9a5
+42 -46
View File
@@ -844,62 +844,58 @@ static auto cmdHide(const std::vector<std::string>& args) -> std::string {
}
// CHEAT [subcomando]
static auto cmdCheat(const std::vector<std::string>& args) -> std::string { // NOLINT(readability-function-cognitive-complexity)
// Apply ON/OFF/toggle a un cheat binari. mode="" → toggle; "ON"/"OFF" → estableix; altra cosa → cadena buida (usage error).
static auto applyCheatToggle(Options::Cheat::State& cheat, std::string_view mode, std::string_view label) -> std::string {
using State = Options::Cheat::State;
if (mode.empty()) {
cheat = (cheat == State::ENABLED) ? State::DISABLED : State::ENABLED;
} else if (mode == "ON") {
if (cheat == State::ENABLED) { return std::string(label) + " already ON"; }
cheat = State::ENABLED;
} else if (mode == "OFF") {
if (cheat == State::DISABLED) { return std::string(label) + " already OFF"; }
cheat = State::DISABLED;
} else {
return {}; // sentinel: mode invàlid
}
return std::string(label) + " " + (cheat == State::ENABLED ? "ON" : "OFF");
}
// CHEAT OPEN/CLOSE THE JAIL — comprova "the jail" i estableix l'estat
static auto cmdCheatJail(const std::vector<std::string>& args, bool open) -> std::string {
const std::string_view ACTION = open ? "open" : "close";
if (args.size() < 3 || args[1] != "THE" || args[2] != "JAIL") {
return std::string("usage: cheat ") + std::string(ACTION) + " the jail";
}
using State = Options::Cheat::State;
auto& jail = Options::cheats.jail_is_open;
const State TARGET = open ? State::ENABLED : State::DISABLED;
if (jail == TARGET) {
return open ? "Jail already open" : "Jail already closed";
}
jail = TARGET;
return open ? "Jail opened" : "Jail closed";
}
static auto cmdCheat(const std::vector<std::string>& args) -> std::string {
if (SceneManager::current != SceneManager::Scene::GAME) { return "Only available in GAME scene"; }
if (args.empty()) { return "usage: cheat [infinite lives|invincibility|open the jail|close the jail]"; }
// CHEAT INFINITE LIVES [ON|OFF]
if (args[0] == "INFINITE") {
if (args.size() < 2 || args[1] != "LIVES") { return "usage: cheat infinite lives [on|off]"; }
auto& cheat = Options::cheats.infinite_lives;
using State = Options::Cheat::State;
if (args.size() == 2) {
cheat = (cheat == State::ENABLED) ? State::DISABLED : State::ENABLED;
} else if (args[2] == "ON") {
if (cheat == State::ENABLED) { return "Infinite lives already ON"; }
cheat = State::ENABLED;
} else if (args[2] == "OFF") {
if (cheat == State::DISABLED) { return "Infinite lives already OFF"; }
cheat = State::DISABLED;
} else {
return "usage: cheat infinite lives [on|off]";
}
return std::string("Infinite lives ") + (cheat == State::ENABLED ? "ON" : "OFF");
const std::string_view MODE = (args.size() > 2) ? std::string_view(args[2]) : std::string_view();
const std::string RES = applyCheatToggle(Options::cheats.infinite_lives, MODE, "Infinite lives");
return RES.empty() ? "usage: cheat infinite lives [on|off]" : RES;
}
// CHEAT INVINCIBILITY [ON|OFF]
if (args[0] == "INVINCIBILITY" || args[0] == "INVENCIBILITY") {
auto& cheat = Options::cheats.invincible;
using State = Options::Cheat::State;
if (args.size() == 1) {
cheat = (cheat == State::ENABLED) ? State::DISABLED : State::ENABLED;
} else if (args[1] == "ON") {
if (cheat == State::ENABLED) { return "Invincibility already ON"; }
cheat = State::ENABLED;
} else if (args[1] == "OFF") {
if (cheat == State::DISABLED) { return "Invincibility already OFF"; }
cheat = State::DISABLED;
} else {
return "usage: cheat invincibility [on|off]";
}
return std::string("Invincibility ") + (cheat == State::ENABLED ? "ON" : "OFF");
const std::string_view MODE = (args.size() > 1) ? std::string_view(args[1]) : std::string_view();
const std::string RES = applyCheatToggle(Options::cheats.invincible, MODE, "Invincibility");
return RES.empty() ? "usage: cheat invincibility [on|off]" : RES;
}
// CHEAT OPEN THE JAIL
if (args[0] == "OPEN") {
if (args.size() < 3 || args[1] != "THE" || args[2] != "JAIL") { return "usage: cheat open the jail"; }
if (Options::cheats.jail_is_open == Options::Cheat::State::ENABLED) { return "Jail already open"; }
Options::cheats.jail_is_open = Options::Cheat::State::ENABLED;
return "Jail opened";
}
// CHEAT CLOSE THE JAIL
if (args[0] == "CLOSE") {
if (args.size() < 3 || args[1] != "THE" || args[2] != "JAIL") { return "usage: cheat close the jail"; }
if (Options::cheats.jail_is_open == Options::Cheat::State::DISABLED) { return "Jail already closed"; }
Options::cheats.jail_is_open = Options::Cheat::State::DISABLED;
return "Jail closed";
}
if (args[0] == "OPEN") { return cmdCheatJail(args, true); }
if (args[0] == "CLOSE") { return cmdCheatJail(args, false); }
return "usage: cheat [infinite lives|invincibility|open the jail|close the jail]";
}