From 61484450b83e471fcb9025481045bc82660b2cf2 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Wed, 4 Feb 2026 13:23:14 -0600 Subject: [PATCH] feat(ui): add CSimpleStatusBar::SetValue --- src/ui/simple/CSimpleStatusBar.cpp | 33 ++++++++++++++++++++++++++++++ src/ui/simple/CSimpleStatusBar.hpp | 3 +++ 2 files changed, 36 insertions(+) diff --git a/src/ui/simple/CSimpleStatusBar.cpp b/src/ui/simple/CSimpleStatusBar.cpp index 2787be3..cfa8baa 100644 --- a/src/ui/simple/CSimpleStatusBar.cpp +++ b/src/ui/simple/CSimpleStatusBar.cpp @@ -1,5 +1,6 @@ #include "ui/simple/CSimpleStatusBar.hpp" #include "ui/simple/CSimpleStatusBarScript.hpp" +#include "util/Lua.hpp" int32_t CSimpleStatusBar::s_metatable; int32_t CSimpleStatusBar::s_objectType; @@ -47,3 +48,35 @@ FrameScript_Object::ScriptIx* CSimpleStatusBar::GetScriptByName(const char* name int32_t CSimpleStatusBar::GetScriptMetaTable() { return CSimpleStatusBar::s_metatable; } + +void CSimpleStatusBar::RunOnValueChangedScript() { + if (!this->m_onValueChanged.luaRef) { + return; + } + + auto L = FrameScript_GetContext(); + + lua_pushnumber(L, this->m_value); + + this->RunScript(this->m_onValueChanged, 1, nullptr); +} + +void CSimpleStatusBar::SetValue(float value) { + if (!this->m_rangeSet) { + return; + } + + // Clamp value + value = std::min(std::max(value, this->m_minValue), this->m_maxValue); + + if (this->m_valueSet && this->m_value == value) { + return; + } + + this->m_value = value; + + this->m_changed = true; + this->m_valueSet = true; + + this->RunOnValueChangedScript(); +} diff --git a/src/ui/simple/CSimpleStatusBar.hpp b/src/ui/simple/CSimpleStatusBar.hpp index f95d8e7..2e4ca12 100644 --- a/src/ui/simple/CSimpleStatusBar.hpp +++ b/src/ui/simple/CSimpleStatusBar.hpp @@ -17,9 +17,12 @@ class CSimpleStatusBar : public CSimpleFrame { // Public virtual member functions virtual int32_t GetScriptMetaTable(); virtual ScriptIx* GetScriptByName(const char* name, ScriptData& data); + // TODO + virtual void SetValue(float value); // Public member functions CSimpleStatusBar(CSimpleFrame* parent); + void RunOnValueChangedScript(); protected: // Protected member variables