diff --git a/source/game/ui/console_commands.cpp b/source/game/ui/console_commands.cpp index 304771e..6e49f37 100644 --- a/source/game/ui/console_commands.cpp +++ b/source/game/ui/console_commands.cpp @@ -55,61 +55,77 @@ static auto boolToggle( // ── Command handlers ───────────────────────────────────────────────────────── // SS [ON|OFF|SIZE|UPSCALE [NEAREST|LINEAR]|DOWNSCALE [BILINEAR|LANCZOS2|LANCZOS3]] -static auto cmdSs(const std::vector& args) -> std::string { // NOLINT(readability-function-cognitive-complexity) - if (!Screen::get()->isHardwareAccelerated()) { return "No GPU acceleration"; } +// SS SIZE — dimensions de la textura supersampling activa +static auto cmdSsSize() -> std::string { + if (!Options::video.supersampling.enabled) { return "Supersampling is OFF: no texture"; } + const auto [w, h] = Screen::get()->getSsTextureSize(); + if (w == 0) { return "SS texture: not active"; } + return "SS texture: " + std::to_string(w) + "x" + std::to_string(h); +} + +// SS UPSCALE [NEAREST|LINEAR] — toggle o estableix mode upscale +static auto cmdSsUpscale(const std::vector& args) -> std::string { + if (args.size() == 1) { + Screen::get()->setLinearUpscale(!Options::video.supersampling.linear_upscale); + return std::string("Upscale: ") + (Options::video.supersampling.linear_upscale ? "Linear" : "Nearest"); + } + if (args[1] == "NEAREST") { + if (!Options::video.supersampling.linear_upscale) { return "Upscale already Nearest"; } + Screen::get()->setLinearUpscale(false); + return "Upscale: Nearest"; + } + if (args[1] == "LINEAR") { + if (Options::video.supersampling.linear_upscale) { return "Upscale already Linear"; } + Screen::get()->setLinearUpscale(true); + return "Upscale: Linear"; + } + return "usage: ss upscale [nearest|linear]"; +} + +// SS DOWNSCALE [BILINEAR|LANCZOS2|LANCZOS3] — consulta o estableix algorisme +static auto cmdSsDownscale(const std::vector& args) -> std::string { static const std::array DOWNSCALE_NAMES = {"Bilinear", "Lanczos2", "Lanczos3"}; - if (!args.empty() && args[0] == "SIZE") { - if (!Options::video.supersampling.enabled) { return "Supersampling is OFF: no texture"; } - const auto [w, h] = Screen::get()->getSsTextureSize(); - if (w == 0) { return "SS texture: not active"; } - return "SS texture: " + std::to_string(w) + "x" + std::to_string(h); + if (args.size() == 1) { + return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast(Options::video.supersampling.downscale_algo)]); } - if (!args.empty() && args[0] == "UPSCALE") { - if (args.size() == 1) { - Screen::get()->setLinearUpscale(!Options::video.supersampling.linear_upscale); - return std::string("Upscale: ") + (Options::video.supersampling.linear_upscale ? "Linear" : "Nearest"); - } - if (args[1] == "NEAREST") { - if (!Options::video.supersampling.linear_upscale) { return "Upscale already Nearest"; } - Screen::get()->setLinearUpscale(false); - return "Upscale: Nearest"; - } - if (args[1] == "LINEAR") { - if (Options::video.supersampling.linear_upscale) { return "Upscale already Linear"; } - Screen::get()->setLinearUpscale(true); - return "Upscale: Linear"; - } - return "usage: ss upscale [nearest|linear]"; - } - if (!args.empty() && args[0] == "DOWNSCALE") { - if (args.size() == 1) { - return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast(Options::video.supersampling.downscale_algo)]); - } - int algo = -1; - if (args[1] == "BILINEAR") { algo = 0; } - if (args[1] == "LANCZOS2") { algo = 1; } - if (args[1] == "LANCZOS3") { algo = 2; } - if (algo == -1) { return "usage: ss downscale [bilinear|lanczos2|lanczos3]"; } - if (Options::video.supersampling.downscale_algo == algo) { - return std::string("Downscale already ") + std::string(DOWNSCALE_NAMES[static_cast(algo)]); - } - Screen::get()->setDownscaleAlgo(algo); - return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast(algo)]); + int algo = -1; + if (args[1] == "BILINEAR") { algo = 0; } + if (args[1] == "LANCZOS2") { algo = 1; } + if (args[1] == "LANCZOS3") { algo = 2; } + if (algo == -1) { return "usage: ss downscale [bilinear|lanczos2|lanczos3]"; } + if (Options::video.supersampling.downscale_algo == algo) { + return std::string("Downscale already ") + std::string(DOWNSCALE_NAMES[static_cast(algo)]); } + Screen::get()->setDownscaleAlgo(algo); + return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast(algo)]); +} + +// SS ON — activa supersampling si encara no ho està +static auto cmdSsOn() -> std::string { + if (Options::video.supersampling.enabled) { return "Supersampling already ON"; } + Screen::get()->toggleSupersampling(); + return "PostFX Supersampling ON"; +} + +// SS OFF — desactiva supersampling si encara està actiu +static auto cmdSsOff() -> std::string { + if (!Options::video.supersampling.enabled) { return "Supersampling already OFF"; } + Screen::get()->toggleSupersampling(); + return "PostFX Supersampling OFF"; +} + +// SS — toggle (sense args) o dispatch a subcomandes +static auto cmdSs(const std::vector& args) -> std::string { + if (!Screen::get()->isHardwareAccelerated()) { return "No GPU acceleration"; } if (args.empty()) { Screen::get()->toggleSupersampling(); return std::string("PostFX Supersampling ") + (Options::video.supersampling.enabled ? "ON" : "OFF"); } - if (args[0] == "ON") { - if (Options::video.supersampling.enabled) { return "Supersampling already ON"; } - Screen::get()->toggleSupersampling(); - return "PostFX Supersampling ON"; - } - if (args[0] == "OFF") { - if (!Options::video.supersampling.enabled) { return "Supersampling already OFF"; } - Screen::get()->toggleSupersampling(); - return "PostFX Supersampling OFF"; - } + if (args[0] == "SIZE") { return cmdSsSize(); } + if (args[0] == "UPSCALE") { return cmdSsUpscale(args); } + if (args[0] == "DOWNSCALE") { return cmdSsDownscale(args); } + if (args[0] == "ON") { return cmdSsOn(); } + if (args[0] == "OFF") { return cmdSsOff(); } return "usage: ss [on|off|size|upscale [nearest|linear]|downscale [bilinear|lanczos2|lanczos3]]"; }