More lua stuff, yay.
Some checks failed
Build Dusk / run-tests (push) Failing after 1m18s
Build Dusk / build-linux (push) Failing after 1m43s
Build Dusk / build-psp (push) Failing after 1m46s

This commit is contained in:
2026-02-01 21:54:33 -06:00
parent 053778a502
commit c6f4518684
14 changed files with 131 additions and 202 deletions

View File

@@ -7,6 +7,7 @@
#include "uielement.h"
#include "display/screen.h"
#include "debug/debug.h"
errorret_t uiElementInitScript(
uielement_t *element,
@@ -18,40 +19,52 @@ errorret_t uiElementInitScript(
}
errorret_t uiElementUpdate(uielement_t *element) {
if(!scriptContextHasFunc(&element->ctx, "update")) errorOk();
errorChain(scriptContextCallFunc(
&element->ctx,
"update",
NULL,
0,
NULL
));
lua_getglobal(element->ctx.luaState, "uiElementUpdate");
if(lua_isfunction(element->ctx.luaState, -1)) {
if(lua_pcall(element->ctx.luaState, 0, 0, 0) != LUA_OK) {
const char_t *strErr = lua_tostring(element->ctx.luaState, -1);
lua_pop(element->ctx.luaState, 1);
errorThrow("Failed to call UI element uiElementUpdate: %s", strErr);
}
} else {
lua_pop(element->ctx.luaState, 1);
}
errorOk();
}
errorret_t uiElementRender(uielement_t *element) {
if(!scriptContextHasFunc(&element->ctx, "render")) errorOk();
lua_getglobal(element->ctx.luaState, "uiElementRender");
if(lua_isfunction(element->ctx.luaState, -1)) {
// scriptvalue_t args[4] = {
// { .type = SCRIPT_VALUE_TYPE_FLOAT, .value.floatValue = 0.0f },
// { .type = SCRIPT_VALUE_TYPE_FLOAT, .value.floatValue = 0.0f },
// { .type = SCRIPT_VALUE_TYPE_FLOAT, .value.floatValue = SCREEN.width },
// { .type = SCRIPT_VALUE_TYPE_FLOAT, .value.floatValue = SCREEN.height },
// };
// errorChain(scriptContextCallFunc(
// &element->ctx,
// "render",
// args,
// 4,
// NULL
// ));
// Push parameters: x, y, w, h
lua_pushnumber(element->ctx.luaState, 0);
lua_pushnumber(element->ctx.luaState, 0);
lua_pushnumber(element->ctx.luaState, SCREEN.width);
lua_pushnumber(element->ctx.luaState, SCREEN.height);
if(lua_pcall(element->ctx.luaState, 4, 0, 0) != LUA_OK) {
const char_t *strErr = lua_tostring(element->ctx.luaState, -1);
lua_pop(element->ctx.luaState, 1);
errorThrow("Failed to call UI element uiElementRender: %s", strErr);
}
} else {
lua_pop(element->ctx.luaState, 1);
}
errorOk();
}
void uiElementDispose(uielement_t *element) {
lua_getglobal(element->ctx.luaState, "uiElementDispose");
if(lua_isfunction(element->ctx.luaState, -1)) {
if(lua_pcall(element->ctx.luaState, 0, 0, 0) != LUA_OK) {
const char_t *strErr = lua_tostring(element->ctx.luaState, -1);
lua_pop(element->ctx.luaState, 1);
debugPrint("Failed to call UI element uiElementDispose: %s\n", strErr);
}
} else {
lua_pop(element->ctx.luaState, 1);
}
scriptContextDispose(&element->ctx);
}