lua: select, log, body, on, get_text, set_text, subscribtions, events (keyup, keydown, keypress, mouseover, mouseup, mousedown, mouseenter, mouseexit, click, focusin, focusout)
2025-08-04 14:07:56 +03:00
|
|
|
class_name LuaPrintUtils
|
|
|
|
|
extends RefCounted
|
|
|
|
|
|
|
|
|
|
static func lua_print(vm: LuauVM) -> int:
|
|
|
|
|
var message_parts: Array[String] = []
|
|
|
|
|
var num_args: int = vm.lua_gettop()
|
|
|
|
|
|
|
|
|
|
for i in range(1, num_args + 1):
|
|
|
|
|
var value_str = lua_value_to_string(vm, i)
|
|
|
|
|
message_parts.append(value_str)
|
|
|
|
|
|
|
|
|
|
var final_message = "\t".join(message_parts)
|
2025-08-04 16:31:16 +03:00
|
|
|
lua_print_direct(final_message)
|
lua: select, log, body, on, get_text, set_text, subscribtions, events (keyup, keydown, keypress, mouseover, mouseup, mousedown, mouseenter, mouseexit, click, focusin, focusout)
2025-08-04 14:07:56 +03:00
|
|
|
return 0
|
|
|
|
|
|
2025-08-04 16:31:16 +03:00
|
|
|
static func lua_print_direct(msg) -> void:
|
|
|
|
|
print("GURT LOG: ", msg)
|
|
|
|
|
|
lua: select, log, body, on, get_text, set_text, subscribtions, events (keyup, keydown, keypress, mouseover, mouseup, mousedown, mouseenter, mouseexit, click, focusin, focusout)
2025-08-04 14:07:56 +03:00
|
|
|
static func lua_value_to_string(vm: LuauVM, index: int) -> String:
|
|
|
|
|
var lua_type = vm.lua_type(index)
|
|
|
|
|
|
|
|
|
|
match lua_type:
|
|
|
|
|
vm.LUA_TNIL:
|
|
|
|
|
return "nil"
|
|
|
|
|
vm.LUA_TBOOLEAN:
|
|
|
|
|
return "true" if vm.lua_toboolean(index) else "false"
|
|
|
|
|
vm.LUA_TNUMBER:
|
|
|
|
|
return str(vm.lua_tonumber(index))
|
|
|
|
|
vm.LUA_TSTRING:
|
|
|
|
|
return vm.lua_tostring(index)
|
|
|
|
|
vm.LUA_TTABLE:
|
|
|
|
|
return table_to_string(vm, index)
|
|
|
|
|
vm.LUA_TFUNCTION:
|
|
|
|
|
return "[function]"
|
|
|
|
|
vm.LUA_TUSERDATA:
|
|
|
|
|
return "[userdata]"
|
|
|
|
|
vm.LUA_TVECTOR:
|
|
|
|
|
var vec = vm.lua_tovector(index)
|
|
|
|
|
return "vector(" + str(vec.x) + ", " + str(vec.y) + ", " + str(vec.z) + ", " + str(vec.w) + ")"
|
|
|
|
|
_:
|
|
|
|
|
return "[" + vm.lua_typename(lua_type) + "]"
|
|
|
|
|
|
|
|
|
|
static func table_to_string(vm: LuauVM, index: int, max_depth: int = 3, current_depth: int = 0) -> String:
|
|
|
|
|
if current_depth >= max_depth:
|
|
|
|
|
return "{...}"
|
|
|
|
|
|
|
|
|
|
var result = "{"
|
|
|
|
|
var first = true
|
|
|
|
|
var count = 0
|
|
|
|
|
var max_items = 10
|
|
|
|
|
|
|
|
|
|
# Convert negative index to positive
|
|
|
|
|
if index < 0:
|
|
|
|
|
index = vm.lua_gettop() + index + 1
|
|
|
|
|
|
|
|
|
|
# Iterate through table
|
|
|
|
|
vm.lua_pushnil() # First key
|
|
|
|
|
while vm.lua_next(index):
|
|
|
|
|
if count >= max_items:
|
|
|
|
|
# We need to pop the value and key before breaking
|
|
|
|
|
vm.lua_pop(2) # Remove value and key
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
if not first:
|
|
|
|
|
result += ", "
|
|
|
|
|
first = false
|
|
|
|
|
|
|
|
|
|
# Get key
|
|
|
|
|
var key_str = lua_value_to_string(vm, -2)
|
|
|
|
|
# Get value
|
|
|
|
|
var value_str = ""
|
|
|
|
|
if vm.lua_type(-1) == vm.LUA_TTABLE:
|
|
|
|
|
value_str = table_to_string(vm, -1, max_depth, current_depth + 1)
|
|
|
|
|
else:
|
|
|
|
|
value_str = lua_value_to_string(vm, -1)
|
|
|
|
|
|
|
|
|
|
# Check if key is a valid identifier (for shorthand)
|
|
|
|
|
if key_str.is_valid_identifier():
|
|
|
|
|
result += key_str + ": " + value_str
|
|
|
|
|
else:
|
|
|
|
|
result += "[" + key_str + "]: " + value_str
|
|
|
|
|
|
|
|
|
|
vm.lua_pop(1) # Remove value, keep key for next iteration
|
|
|
|
|
count += 1
|
|
|
|
|
|
|
|
|
|
if count >= max_items:
|
|
|
|
|
result += ", ..."
|
|
|
|
|
|
|
|
|
|
result += "}"
|
2025-08-04 16:31:16 +03:00
|
|
|
return result
|