From 6ec4d2eae681901257a796628a21ba93185e38b5 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Sun, 9 Nov 2025 17:20:40 -0600 Subject: [PATCH] feat(ui): implement Script_GetScreenResolutions --- src/ui/game/CGVideoOptionsScript.cpp | 35 ++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/ui/game/CGVideoOptionsScript.cpp b/src/ui/game/CGVideoOptionsScript.cpp index 1dd24d7..d259166 100644 --- a/src/ui/game/CGVideoOptionsScript.cpp +++ b/src/ui/game/CGVideoOptionsScript.cpp @@ -1,12 +1,43 @@ #include "ui/game/CGVideoOptionsScript.hpp" -#include "ui/game/CGVideoOptions.hpp" +#include "console/CVar.hpp" +#include "console/Detect.hpp" #include "ui/Types.hpp" +#include "ui/game/CGVideoOptions.hpp" #include "util/Lua.hpp" #include "util/Unimplemented.hpp" +#include + +static TSGrowableArray s_screenResolutions; + +void SetupResolutions() { + if (s_screenResolutions.Count()) { + return; + } + + auto widescreenCvar = CVar::Lookup("widescreen"); + int32_t widescreen = widescreenCvar ? widescreenCvar->GetInt() : 0; + + ConsoleDetectGetResolutions(s_screenResolutions, widescreen); +} int32_t Script_GetScreenResolutions(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + SetupResolutions(); + + lua_checkstack(L, s_screenResolutions.Count()); + + char resolutionStr[64]; + + for (uint32_t i = 0; i < s_screenResolutions.Count(); i++) { + auto& resolution = s_screenResolutions[i]; + + SStrPrintf(resolutionStr, sizeof(resolutionStr), "%dx%d", resolution.x, resolution.y); + + lua_pushstring(L, resolutionStr); + } + + return s_screenResolutions.Count(); } + int32_t Script_GetCurrentResolution(lua_State* L) { WHOA_UNIMPLEMENTED(0); }