Compare commits

...

8 Commits

Author SHA1 Message Date
fallenoak
c4077daa3f
feat(ui): implement CSimpleFrame_EnableMouse
Some checks are pending
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:cl compiler_name:MSVC cxx:cl os:windows-latest system_name:Windows test_path:WhoaTest]) (push) Waiting to run
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:clang compiler_name:Clang cxx:clang++ os:macos-latest system_name:macOS test_path:WhoaTest]) (push) Waiting to run
Push / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }} (map[build_type:Release cc:gcc compiler_name:GCC cxx:g++ os:ubuntu-latest system_name:Linux test_path:WhoaTest]) (push) Waiting to run
2026-01-27 10:39:50 -06:00
fallenoak
b9f2c60966
feat(ui): implement Script_GetCursorPosition 2026-01-27 09:01:17 -06:00
fallenoak
5f7bf8c95c
feat(ui): implement Script_GetCVarBool 2026-01-27 08:44:58 -06:00
fallenoak
7d9173b880
feat(ui): implement CSimpleTexture_IsShown 2026-01-27 08:26:08 -06:00
fallenoak
98ea309985
feat(ui): implement CSimpleTexture_IsVisible 2026-01-27 08:24:29 -06:00
fallenoak
ba5006a4d8
feat(ui): implement CSimpleFontString_IsVisible 2026-01-27 08:20:56 -06:00
fallenoak
e872450202
fix(ui): fix infinite loop in CSimpleFrame::SetBeingScrolled 2026-01-27 07:56:30 -06:00
fallenoak
bc1d7cbd66
feat(ui): add GameScriptRegisterFunctions 2026-01-27 05:28:39 -06:00
13 changed files with 1703 additions and 35 deletions

View File

@ -522,36 +522,6 @@ int32_t Script_IsScanDLLFinished(lua_State* L) {
return 1; return 1;
} }
int32_t Script_IsWindowsClient(lua_State* L) {
#if defined(WHOA_SYSTEM_WIN)
lua_pushnumber(L, 1.0);
#else
lua_pushnil(L);
#endif
return 1;
}
int32_t Script_IsMacClient(lua_State* L) {
#if defined(WHOA_SYSTEM_MAC)
lua_pushnumber(L, 1.0);
#else
lua_pushnil(L);
#endif
return 1;
}
int32_t Script_IsLinuxClient(lua_State* L) {
#if defined(WHOA_SYSTEM_LINUX)
lua_pushnumber(L, 1.0);
#else
lua_pushnil(L);
#endif
return 1;
}
int32_t Script_SetRealmSplitState(lua_State* L) { int32_t Script_SetRealmSplitState(lua_State* L) {
WHOA_UNIMPLEMENTED(0); WHOA_UNIMPLEMENTED(0);
} }

View File

@ -6,3 +6,33 @@
int32_t Script_GetAccountExpansionLevel(lua_State* L) { int32_t Script_GetAccountExpansionLevel(lua_State* L) {
WHOA_UNIMPLEMENTED(0); WHOA_UNIMPLEMENTED(0);
} }
int32_t Script_IsLinuxClient(lua_State* L) {
#if defined(WHOA_SYSTEM_LINUX)
lua_pushnumber(L, 1.0);
#else
lua_pushnil(L);
#endif
return 1;
}
int32_t Script_IsMacClient(lua_State* L) {
#if defined(WHOA_SYSTEM_MAC)
lua_pushnumber(L, 1.0);
#else
lua_pushnil(L);
#endif
return 1;
}
int32_t Script_IsWindowsClient(lua_State* L) {
#if defined(WHOA_SYSTEM_WIN)
lua_pushnumber(L, 1.0);
#else
lua_pushnil(L);
#endif
return 1;
}

View File

@ -6,4 +6,10 @@
int32_t Script_GetAccountExpansionLevel(lua_State* L); int32_t Script_GetAccountExpansionLevel(lua_State* L);
int32_t Script_IsLinuxClient(lua_State* L);
int32_t Script_IsMacClient(lua_State* L);
int32_t Script_IsWindowsClient(lua_State* L);
#endif #endif

View File

@ -4,6 +4,7 @@
#include "ui/Key.hpp" #include "ui/Key.hpp"
#include "ui/game/CGWorldFrame.hpp" #include "ui/game/CGWorldFrame.hpp"
#include "ui/game/GMTicketInfoScript.hpp" #include "ui/game/GMTicketInfoScript.hpp"
#include "ui/game/GameScript.hpp"
#include "ui/game/ScriptEvents.hpp" #include "ui/game/ScriptEvents.hpp"
#include "ui/simple/CSimpleTop.hpp" #include "ui/simple/CSimpleTop.hpp"
#include "util/CStatus.hpp" #include "util/CStatus.hpp"
@ -14,6 +15,10 @@ CSimpleTop* CGGameUI::s_simpleTop;
void LoadScriptFunctions() { void LoadScriptFunctions() {
// TODO // TODO
GameScriptRegisterFunctions();
// TODO
ScriptEventsRegisterFunctions(); ScriptEventsRegisterFunctions();
// TODO // TODO

1590
src/ui/game/GameScript.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
#ifndef UI_GAME_GAME_SCRIPT_HPP
#define UI_GAME_GAME_SCRIPT_HPP
void GameScriptRegisterFunctions();
#endif

View File

@ -73,7 +73,16 @@ int32_t CSimpleFontString_Hide(lua_State* L) {
} }
int32_t CSimpleFontString_IsVisible(lua_State* L) { int32_t CSimpleFontString_IsVisible(lua_State* L) {
WHOA_UNIMPLEMENTED(0); auto type = CSimpleFontString::GetObjectType();
auto string = static_cast<CSimpleFontString*>(FrameScript_GetObjectThis(L, type));
if (string->IsVisible()) {
lua_pushnumber(L, 1.0);
} else {
lua_pushnil(L);
}
return 1;
} }
int32_t CSimpleFontString_IsShown(lua_State* L) { int32_t CSimpleFontString_IsShown(lua_State* L) {

View File

@ -100,6 +100,18 @@ void CSimpleFrame::DisableDrawLayer(uint32_t drawlayer) {
this->NotifyDrawLayerChanged(drawlayer); this->NotifyDrawLayerChanged(drawlayer);
} }
void CSimpleFrame::DisableEvent(CSimpleEventType eventType) {
if (!(this->m_eventmask & (1 << eventType))) {
return;
}
if (this->m_visible) {
this->m_top->UnregisterForEvent(this, eventType, 0);
}
this->m_eventmask &= ~(1 << eventType);
}
void CSimpleFrame::EnableDrawLayer(uint32_t drawlayer) { void CSimpleFrame::EnableDrawLayer(uint32_t drawlayer) {
this->m_drawenabled[drawlayer] = 1; this->m_drawenabled[drawlayer] = 1;
this->NotifyDrawLayerChanged(drawlayer); this->NotifyDrawLayerChanged(drawlayer);
@ -1342,7 +1354,7 @@ void CSimpleFrame::SetBeingScrolled(int32_t a2, int32_t a3) {
this->m_batchDirty |= 0x1F; this->m_batchDirty |= 0x1F;
} }
for (auto child = this->m_children.Head(); child; this->m_children.Link(child)->Next()) { for (auto child = this->m_children.Head(); child; child = this->m_children.Link(child)->Next()) {
if (!(child->frame->m_flags & 0x4000)) { if (!(child->frame->m_flags & 0x4000)) {
child->frame->SetBeingScrolled(a2, -1); child->frame->SetBeingScrolled(a2, -1);
} }

View File

@ -123,6 +123,7 @@ class CSimpleFrame : public CScriptRegion {
CSimpleFrame(CSimpleFrame* parent); CSimpleFrame(CSimpleFrame* parent);
void AddFrameRegion(CSimpleRegion* region, uint32_t drawlayer); void AddFrameRegion(CSimpleRegion* region, uint32_t drawlayer);
void DisableDrawLayer(uint32_t drawlayer); void DisableDrawLayer(uint32_t drawlayer);
void DisableEvent(CSimpleEventType eventType);
void EnableDrawLayer(uint32_t drawlayer); void EnableDrawLayer(uint32_t drawlayer);
void EnableEvent(CSimpleEventType eventType, int32_t priority); void EnableEvent(CSimpleEventType eventType, int32_t priority);
int32_t GetHitRect(CRect& rect); int32_t GetHitRect(CRect& rect);

View File

@ -4,6 +4,7 @@
#include "ui/FrameScript.hpp" #include "ui/FrameScript.hpp"
#include "ui/simple/CSimpleFrame.hpp" #include "ui/simple/CSimpleFrame.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
#include <algorithm> #include <algorithm>
#include <cstdint> #include <cstdint>
@ -459,7 +460,22 @@ int32_t CSimpleFrame_IsKeyboardEnabled(lua_State* L) {
} }
int32_t CSimpleFrame_EnableMouse(lua_State* L) { int32_t CSimpleFrame_EnableMouse(lua_State* L) {
WHOA_UNIMPLEMENTED(0); auto type = CSimpleFrame::GetObjectType();
auto frame = static_cast<CSimpleFrame*>(FrameScript_GetObjectThis(L, type));
if (!frame->ProtectedFunctionsAllowed()) {
// TODO disallowed logic
return 0;
}
if (StringToBOOL(L, 2, 1)) {
frame->EnableEvent(SIMPLE_EVENT_MOUSE, -1);
} else {
frame->DisableEvent(SIMPLE_EVENT_MOUSE);
}
return 0;
} }
int32_t CSimpleFrame_IsMouseEnabled(lua_State* L) { int32_t CSimpleFrame_IsMouseEnabled(lua_State* L) {

View File

@ -49,6 +49,10 @@ bool CSimpleRegion::IsShown() {
return this->m_shown == 1; return this->m_shown == 1;
} }
bool CSimpleRegion::IsVisible() {
return this->m_visible == 1;
}
void CSimpleRegion::OnColorChanged(bool a2) { void CSimpleRegion::OnColorChanged(bool a2) {
if (this->m_parent) { if (this->m_parent) {
uint8_t effectiveAlpha = this->m_parent->m_alpha * this->m_parent->alphaBD / 255; uint8_t effectiveAlpha = this->m_parent->m_alpha * this->m_parent->alphaBD / 255;

View File

@ -32,6 +32,7 @@ class CSimpleRegion : public CScriptRegion {
void Hide(); void Hide();
void HideThis(); void HideThis();
bool IsShown(); bool IsShown();
bool IsVisible();
void OnRegionChanged(); void OnRegionChanged();
void SetVertexColor(const CImVector& color); void SetVertexColor(const CImVector& color);
void SetVertexGradient(ORIENTATION orientation, const CImVector& minColor, const CImVector& maxColor); void SetVertexGradient(ORIENTATION orientation, const CImVector& minColor, const CImVector& maxColor);

View File

@ -97,11 +97,29 @@ int32_t CSimpleTexture_Hide(lua_State* L) {
} }
int32_t CSimpleTexture_IsVisible(lua_State* L) { int32_t CSimpleTexture_IsVisible(lua_State* L) {
WHOA_UNIMPLEMENTED(0); auto type = CSimpleTexture::GetObjectType();
auto texture = static_cast<CSimpleTexture*>(FrameScript_GetObjectThis(L, type));
if (texture->IsVisible()) {
lua_pushnumber(L, 1.0);
} else {
lua_pushnil(L);
}
return 1;
} }
int32_t CSimpleTexture_IsShown(lua_State* L) { int32_t CSimpleTexture_IsShown(lua_State* L) {
WHOA_UNIMPLEMENTED(0); auto type = CSimpleTexture::GetObjectType();
auto texture = static_cast<CSimpleTexture*>(FrameScript_GetObjectThis(L, type));
if (texture->IsShown()) {
lua_pushnumber(L, 1.0);
} else {
lua_pushnil(L);
}
return 1;
} }
int32_t CSimpleTexture_GetTexture(lua_State* L) { int32_t CSimpleTexture_GetTexture(lua_State* L) {