commit
260375c067
@ -0,0 +1,71 @@ |
|||||||
|
-- Create an EventManager class |
||||||
|
---@class EventManager |
||||||
|
local EventManager = { |
||||||
|
events = {}, |
||||||
|
eventHandlers = {}, |
||||||
|
wowEventHandlers = {}, |
||||||
|
frame = nil |
||||||
|
} |
||||||
|
|
||||||
|
EventManager.__index = EventManager |
||||||
|
|
||||||
|
-- Constructor |
||||||
|
---@return EventManager |
||||||
|
function EventManager:New() |
||||||
|
local self = setmetatable({}, EventManager) |
||||||
|
self.events = {} |
||||||
|
self.eventHandlers = {} |
||||||
|
self.wowEventHandlers = {} |
||||||
|
|
||||||
|
-- Frame for wow events |
||||||
|
self.frame = CreateFrame("Frame") |
||||||
|
|
||||||
|
self.frame:SetScript('OnEvent', function(f, event, ...) |
||||||
|
if self.wowEventHandlers[event] then |
||||||
|
for _, callback in ipairs(self.wowEventHandlers[event]) do |
||||||
|
callback(...) |
||||||
|
end |
||||||
|
end |
||||||
|
end) |
||||||
|
|
||||||
|
return self |
||||||
|
end |
||||||
|
|
||||||
|
-- Register an event |
||||||
|
---@param event string |
||||||
|
---@param handler fun(...) |
||||||
|
---@return nil |
||||||
|
function EventManager:RegisterEvent(event, handler) |
||||||
|
if not self.events[event] then |
||||||
|
self.events[event] = {} |
||||||
|
end |
||||||
|
|
||||||
|
table.insert(self.events[event], handler) |
||||||
|
end |
||||||
|
|
||||||
|
-- Register a wow event |
||||||
|
---@param event string |
||||||
|
---@param handler fun(...) |
||||||
|
---@return nil |
||||||
|
function EventManager:RegisterWoWEvent(event, handler) |
||||||
|
if not self.wowEventHandlers[event] then |
||||||
|
self.wowEventHandlers[event] = {} |
||||||
|
self.frame:RegisterEvent(event) |
||||||
|
end |
||||||
|
|
||||||
|
table.insert(self.wowEventHandlers[event], handler) |
||||||
|
end |
||||||
|
|
||||||
|
-- Trigger an event |
||||||
|
---@param event string |
||||||
|
---@param ... any |
||||||
|
---@return nil |
||||||
|
function EventManager:TriggerEvent(event, ...) |
||||||
|
if self.events[event] then |
||||||
|
for _, handler in pairs(self.events[event]) do |
||||||
|
handler(...) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
return EventManager |
@ -0,0 +1,27 @@ |
|||||||
|
local Tinkr, Vision = ... |
||||||
|
|
||||||
|
local Timer = Vision.Timer |
||||||
|
|
||||||
|
local TimeManager = { |
||||||
|
timers = {}, |
||||||
|
} |
||||||
|
|
||||||
|
TimeManager.__index = TimeManager |
||||||
|
|
||||||
|
-- Constructor |
||||||
|
---@return TimeManager |
||||||
|
function TimeManager:New() |
||||||
|
local self = setmetatable({}, TimeManager) |
||||||
|
self.timers = {} |
||||||
|
|
||||||
|
return self |
||||||
|
end |
||||||
|
|
||||||
|
function TimeManager:GetTimer(label, start_events, reset_events) |
||||||
|
if self.timers[label] == nil then |
||||||
|
self.timers[label] = Timer:New(label, start_events, reset_events) |
||||||
|
return self.timers[label] |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
return TimeManager |
@ -0,0 +1,49 @@ |
|||||||
|
local Tinkr, Vision = ... |
||||||
|
|
||||||
|
local Timer = { |
||||||
|
start_events = {}, |
||||||
|
reset_events = {}, |
||||||
|
time = 0, |
||||||
|
label = nil |
||||||
|
} |
||||||
|
|
||||||
|
Timer.__index = Timer |
||||||
|
|
||||||
|
-- Constructor |
||||||
|
---@param label String |
||||||
|
---@param start Table |
||||||
|
---@param reset Table |
||||||
|
---@return Timer |
||||||
|
function Timer:New(label, start, reset) |
||||||
|
local self = setmetatable({}, Timer) |
||||||
|
self.start_events = start |
||||||
|
self.reset_events = reset |
||||||
|
self.time = 0 |
||||||
|
self.label = label |
||||||
|
|
||||||
|
for _, event in pairs(self.start_events) do |
||||||
|
Vision.EventManager:RegisterWoWEvent(event, function() |
||||||
|
self.time = GetTime() |
||||||
|
end) |
||||||
|
end |
||||||
|
|
||||||
|
for _, event in pairs(self.reset_events) do |
||||||
|
Vision.EventManager:RegisterWoWEvent(event, function() |
||||||
|
self.time = 0 |
||||||
|
end) |
||||||
|
end |
||||||
|
|
||||||
|
return self |
||||||
|
end |
||||||
|
|
||||||
|
-- Start Timer |
||||||
|
---@return number |
||||||
|
function Timer:GetTime() |
||||||
|
if self.time == 0 then |
||||||
|
return 0 |
||||||
|
else |
||||||
|
return GetTime() - self.time |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
return Timer |
@ -0,0 +1,34 @@ |
|||||||
|
local Tinkr = ... |
||||||
|
|
||||||
|
|
||||||
|
---@class Vision |
||||||
|
local Vision = { |
||||||
|
DebugMode = false |
||||||
|
} |
||||||
|
Vision.__index = Vision |
||||||
|
|
||||||
|
function Vision.require(class) |
||||||
|
return require("scripts/Vision/" .. class .. "/" .. class, Vision) |
||||||
|
end |
||||||
|
|
||||||
|
|
||||||
|
---@type EventManager |
||||||
|
Vision.EventManager = Vision.require("EventManager"):New() |
||||||
|
|
||||||
|
---@type Timer |
||||||
|
Vision.Timer = Vision.require("Timer") |
||||||
|
|
||||||
|
---@type TimeManager |
||||||
|
Vision.TimeManager = Vision.require("TimeManager"):New() |
||||||
|
|
||||||
|
local DeathTimer = Vision.TimeManager:GetTimer("DeathTimer", { "PLAYER_DEAD" }, { "PLAYER_UNGHOST" }) |
||||||
|
|
||||||
|
Vision.Enabled = true |
||||||
|
|
||||||
|
Vision.Ticker = C_Timer.NewTicker(1, function() |
||||||
|
if Vision.Enabled then |
||||||
|
if DeathTimer:GetTime() > 60 then |
||||||
|
print("We have been dead for a minute or more.") |
||||||
|
end |
||||||
|
end |
||||||
|
end) |
Loading…
Reference in new issue