Files
aux-addon-ClassicAPI/control.lua
T
Manuel Simon Hirsig bf12b438e5 bugfix
2015-10-02 20:10:58 +02:00

137 lines
2.4 KiB
Lua

Aux.control = {}
local event_listeners = {}
local update_listeners = {}
function Aux.control.on_event()
for listener, _ in pairs(event_listeners) do
if event == listener.event then
listener.action()
end
end
end
function Aux.control.on_update()
for listener, _ in pairs(update_listeners) do
listener.action()
end
end
function Aux.control.event_listener(event, action) -- async!
local self = {}
local listener = { event=event, action=action }
function self:set_action(self, action)
listener.action = action
end
function self:start(self)
Aux.util.set_add(event_listeners, listener)
if not Aux.util.any(event_listeners, function(l) return l.event == event end) then
AuxControlFrame:RegisterEvent(event)
end
return self
end
function self:stop(self)
Aux.util.set_remove(event_listeners, listener)
if not Aux.util.any(event_listeners, function(l) return l.event == event end) then
AuxControlFrame:UnregisterEvent(event)
end
return self
end
return self
end
function Aux.control.update_listener(action)
local self = {}
local listener = { action=action }
function self:set_action(self, action)
listener.action = action
end
function self:start(self)
Aux.util.set_add(update_listeners, listener)
return self
end
function self:stop(self)
Aux.util.set_remove(update_listeners, listener)
return self
end
return self
end
function Aux.control.on_next_update(callback)
local listener = Aux.control.update_listener()
listener:set_action(function()
listener:stop()
callback()
end)
listener:start()
end
function Aux.control.as_soon_as(p, callback)
local listener = Aux.control.update_listener()
listener:set_action(function()
if p() then
callback()
listener:stop()
end
end)
listener:start()
end
function Aux.control.on_next_event(event, callback)
local ok
local listener = Aux.control.event_listener(event)
listener:set_action(function()
listener:stop()
ok = true
end)
listener:start()
Aux.control.as_soon_as(function() return ok end, callback)
end
function Aux.control.timer()
local self = {}
local t_0
function self:start(self)
t_0 = GetTime()
end
function self:after(self, t, callback)
Aux.util.as_soon_as(function() return t_0 and GetTime() - t_0 > t end, callback)
end
return self
end
function Aux.control.after_time(t, callback)
local timer = Aux.control.timer()
timer:start()
timer:after(t, callback)
end