otclient-redemption/modules/corelib/globals.lua
2026-01-08 09:00:51 -08:00

88 lines
2 KiB
Lua

-- @docvars @{
-- root widget
rootWidget = g_ui.getRootWidget()
modules = package.loaded
-- G is used as a global table to save variables in memory between reloads
G = G or {}
-- @}
-- @docfuncs @{
local function getEventName(callback)
local ok, info = pcall(debug.getinfo, callback, "S")
if ok and info then
local src = info.short_src or "lua"
local line = info.linedefined or 0
return src .. ":" .. line
end
return "lua"
end
function scheduleEvent(callback, delay)
local name = getEventName(callback)
local event
if g_dispatcher.scheduleEventEx then
event = g_dispatcher.scheduleEventEx(name, callback, delay)
else
event = g_dispatcher.scheduleEvent(callback, delay)
end
-- must hold a reference to the callback, otherwise it would be collected
event._callback = callback
return event
end
function addEvent(callback, front)
local name = getEventName(callback)
local event
if g_dispatcher.addEventEx then
event = g_dispatcher.addEventEx(name, callback)
else
event = g_dispatcher.addEvent(callback, front)
end
-- must hold a reference to the callback, otherwise it would be collected
event._callback = callback
return event
end
function cycleEvent(callback, interval)
local name = getEventName(callback)
local event
if g_dispatcher.cycleEventEx then
event = g_dispatcher.cycleEventEx(name, callback, interval)
else
event = g_dispatcher.cycleEvent(callback, interval)
end
-- must hold a reference to the callback, otherwise it would be collected
event._callback = callback
return event
end
function periodicalEvent(eventFunc, conditionFunc, delay, autoRepeatDelay)
delay = delay or 30
autoRepeatDelay = autoRepeatDelay or delay
local func
func = function()
if conditionFunc and not conditionFunc() then
func = nil
return
end
eventFunc()
scheduleEvent(func, delay)
end
scheduleEvent(function()
func()
end, autoRepeatDelay)
end
function removeEvent(event)
if event then
event:cancel()
event._callback = nil
end
end
-- @}