mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-10-30 15:56:04 +03:00
350 lines
11 KiB
C++
350 lines
11 KiB
C++
#include "ui/CSimpleButtonScript.hpp"
|
|
#include "gx/Coordinate.hpp"
|
|
#include "ui/CSimpleButton.hpp"
|
|
#include "ui/CSimpleFontString.hpp"
|
|
#include "ui/CSimpleTexture.hpp"
|
|
#include "util/Lua.hpp"
|
|
#include "util/StringTo.hpp"
|
|
#include "util/Unimplemented.hpp"
|
|
#include <cstdint>
|
|
|
|
int32_t CSimpleButton_SetStateTexture(lua_State* L, CSimpleButtonState state, const char* method) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
if (lua_type(L, 2) == LUA_TTABLE) {
|
|
lua_rawgeti(L, 2, 0);
|
|
auto texture = static_cast<CSimpleTexture*>(lua_touserdata(L, -1));
|
|
lua_settop(L, -2);
|
|
|
|
if (!texture) {
|
|
luaL_error(L, "%s:%s(): Couldn't find 'this' in texture", button->GetDisplayName(), method);
|
|
}
|
|
|
|
if (!texture->IsA(CSimpleTexture::GetObjectType())) {
|
|
luaL_error(L, "%s:%s(): Wrong object type, expected texture", button->GetDisplayName(), method);
|
|
}
|
|
|
|
button->SetStateTexture(state, texture);
|
|
|
|
} else if (lua_isstring(L, 2)) {
|
|
auto texFile = lua_tolstring(L, 2, nullptr);
|
|
button->SetStateTexture(state, texFile);
|
|
|
|
} else if (lua_type(L, 2) == LUA_TNIL) {
|
|
CSimpleTexture* texture = nullptr;
|
|
button->SetStateTexture(state, texture);
|
|
|
|
} else {
|
|
luaL_error(L, "Usage: %s:%s(texture or \"texture\" or nil)", button->GetDisplayName(), method);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CSimpleButton_Enable(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
if (button->ProtectedFunctionsAllowed()) {
|
|
button->Enable(1);
|
|
} else {
|
|
// TODO
|
|
// - disallowed logic
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CSimpleButton_Disable(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
if (button->ProtectedFunctionsAllowed()) {
|
|
button->Enable(0);
|
|
} else {
|
|
// TODO
|
|
// - disallowed logic
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CSimpleButton_IsEnabled(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_GetButtonState(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetButtonState(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetNormalFontObject(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_GetNormalFontObject(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetDisabledFontObject(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_GetDisabledFontObject(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetHighlightFontObject(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_GetHighlightFontObject(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetFontString(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_GetFontString(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetText(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
const char* text = lua_tolstring(L, 2, 0);
|
|
button->SetText(text);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CSimpleButton_SetFormattedText(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_GetText(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
const char* text = nullptr;
|
|
|
|
if (button->m_text && button->m_text->GetText() && *button->m_text->GetText()) {
|
|
text = button->m_text->GetText();
|
|
}
|
|
|
|
lua_pushstring(L, text);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int32_t CSimpleButton_SetNormalTexture(lua_State* L) {
|
|
return CSimpleButton_SetStateTexture(L, BUTTONSTATE_NORMAL, "SetNormalTexture");
|
|
}
|
|
|
|
int32_t CSimpleButton_GetNormalTexture(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetPushedTexture(lua_State* L) {
|
|
return CSimpleButton_SetStateTexture(L, BUTTONSTATE_PUSHED, "SetPushedTexture");
|
|
}
|
|
|
|
int32_t CSimpleButton_GetPushedTexture(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetDisabledTexture(lua_State* L) {
|
|
return CSimpleButton_SetStateTexture(L, BUTTONSTATE_DISABLED, "SetDisabledTexture");
|
|
}
|
|
|
|
int32_t CSimpleButton_GetDisabledTexture(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetHighlightTexture(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
EGxBlend blendMode = GxBlend_Add;
|
|
if (lua_isstring(L, 3)) {
|
|
auto blendString = lua_tolstring(L, 3, nullptr);
|
|
StringToBlendMode(blendString, blendMode);
|
|
}
|
|
|
|
if (lua_type(L, 2) == LUA_TTABLE) {
|
|
lua_rawgeti(L, 2, 0);
|
|
auto texture = static_cast<CSimpleTexture*>(lua_touserdata(L, -1));
|
|
lua_settop(L, -2);
|
|
|
|
if (!texture) {
|
|
luaL_error(L, "%s:SetHighlightTexture(): Couldn't find 'this' in texture", button->GetDisplayName());
|
|
}
|
|
|
|
if (!texture->IsA(CSimpleTexture::GetObjectType())) {
|
|
luaL_error(L, "%s:SetHighlightTexture(): Wrong object type, expected texture", button->GetDisplayName());
|
|
}
|
|
|
|
button->SetHighlight(texture, blendMode);
|
|
|
|
} else if (lua_isstring(L, 2)) {
|
|
auto texFile = lua_tolstring(L, 2, nullptr);
|
|
button->SetHighlight(texFile, blendMode);
|
|
|
|
} else if (lua_type(L, 2) == LUA_TNIL) {
|
|
CSimpleTexture* texture = nullptr;
|
|
button->SetHighlight(texture, GxBlend_Add);
|
|
|
|
} else {
|
|
luaL_error(L, "Usage: %s:SetHighlightTexture(texture or \"texture\" or nil [, \"blendmode\")", button->GetDisplayName());
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CSimpleButton_GetHighlightTexture(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
auto texture = button->m_highlightTexture;
|
|
|
|
if (texture) {
|
|
if (!texture->lua_registered) {
|
|
texture->RegisterScriptObject(nullptr);
|
|
}
|
|
|
|
lua_rawgeti(L, LUA_REGISTRYINDEX, texture->lua_objectRef);
|
|
} else {
|
|
lua_pushnil(L);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int32_t CSimpleButton_SetPushedTextOffset(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_GetPushedTextOffset(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_GetTextWidth(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
auto text = button->m_text;
|
|
|
|
float width = text ? text->GetWidth() : 0.0f;
|
|
float ddcWidth = CoordinateGetAspectCompensation() * 1024.0f * width;
|
|
float ndcWidth = DDCToNDCWidth(ddcWidth);
|
|
|
|
lua_pushnumber(L, ndcWidth);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int32_t CSimpleButton_GetTextHeight(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_RegisterForClicks(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
uint64_t action = 0;
|
|
|
|
for (int32_t i = 2; lua_isstring(L, i); i++) {
|
|
auto actionStr = lua_tolstring(L, i, nullptr);
|
|
action |= StringToClickAction(actionStr);
|
|
}
|
|
|
|
button->SetClickAction(action);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CSimpleButton_Click(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
auto inputButton = "LeftButton";
|
|
if (lua_isstring(L, 2)) {
|
|
inputButton = lua_tolstring(L, 2, nullptr);
|
|
}
|
|
|
|
auto v6 = StringToBOOL(L, 3, 0);
|
|
|
|
button->OnClick(inputButton, v6);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CSimpleButton_LockHighlight(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
button->LockHighlight(1);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CSimpleButton_UnlockHighlight(lua_State* L) {
|
|
auto type = CSimpleButton::GetObjectType();
|
|
auto button = static_cast<CSimpleButton*>(FrameScript_GetObjectThis(L, type));
|
|
|
|
button->LockHighlight(0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CSimpleButton_GetMotionScriptsWhileDisabled(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
int32_t CSimpleButton_SetMotionScriptsWhileDisabled(lua_State* L) {
|
|
WHOA_UNIMPLEMENTED();
|
|
}
|
|
|
|
FrameScript_Method SimpleButtonMethods[NUM_SIMPLE_BUTTON_SCRIPT_METHODS] = {
|
|
{ "Enable", &CSimpleButton_Enable },
|
|
{ "Disable", &CSimpleButton_Disable },
|
|
{ "IsEnabled", &CSimpleButton_IsEnabled },
|
|
{ "GetButtonState", &CSimpleButton_GetButtonState },
|
|
{ "SetButtonState", &CSimpleButton_SetButtonState },
|
|
{ "SetNormalFontObject", &CSimpleButton_SetNormalFontObject },
|
|
{ "GetNormalFontObject", &CSimpleButton_GetNormalFontObject },
|
|
{ "SetDisabledFontObject", &CSimpleButton_SetDisabledFontObject },
|
|
{ "GetDisabledFontObject", &CSimpleButton_GetDisabledFontObject },
|
|
{ "SetHighlightFontObject", &CSimpleButton_SetHighlightFontObject },
|
|
{ "GetHighlightFontObject", &CSimpleButton_GetHighlightFontObject },
|
|
{ "SetFontString", &CSimpleButton_SetFontString },
|
|
{ "GetFontString", &CSimpleButton_GetFontString },
|
|
{ "SetText", &CSimpleButton_SetText },
|
|
{ "SetFormattedText", &CSimpleButton_SetFormattedText },
|
|
{ "GetText", &CSimpleButton_GetText },
|
|
{ "SetNormalTexture", &CSimpleButton_SetNormalTexture },
|
|
{ "GetNormalTexture", &CSimpleButton_GetNormalTexture },
|
|
{ "SetPushedTexture", &CSimpleButton_SetPushedTexture },
|
|
{ "GetPushedTexture", &CSimpleButton_GetPushedTexture },
|
|
{ "SetDisabledTexture", &CSimpleButton_SetDisabledTexture },
|
|
{ "GetDisabledTexture", &CSimpleButton_GetDisabledTexture },
|
|
{ "SetHighlightTexture", &CSimpleButton_SetHighlightTexture },
|
|
{ "GetHighlightTexture", &CSimpleButton_GetHighlightTexture },
|
|
{ "SetPushedTextOffset", &CSimpleButton_SetPushedTextOffset },
|
|
{ "GetPushedTextOffset", &CSimpleButton_GetPushedTextOffset },
|
|
{ "GetTextWidth", &CSimpleButton_GetTextWidth },
|
|
{ "GetTextHeight", &CSimpleButton_GetTextHeight },
|
|
{ "RegisterForClicks", &CSimpleButton_RegisterForClicks },
|
|
{ "Click", &CSimpleButton_Click },
|
|
{ "LockHighlight", &CSimpleButton_LockHighlight },
|
|
{ "UnlockHighlight", &CSimpleButton_UnlockHighlight },
|
|
{ "GetMotionScriptsWhileDisabled", &CSimpleButton_GetMotionScriptsWhileDisabled },
|
|
{ "SetMotionScriptsWhileDisabled", &CSimpleButton_SetMotionScriptsWhileDisabled }
|
|
};
|