Files

95 lines
2.6 KiB
Lua

local CooldownType = {
New = function(self)
local o = {}
setmetatable(o, self)
self.__index = self
return o
end,
}
local NullType = CooldownType:New()
NullType.GetActiveInfo = function(self) return false, 0, 0 end
local TotemType = CooldownType:New()
TotemType.GetActiveInfo = function(self)
for i = 1, 4 do
local present, name, start, duration = GetTotemInfo(i)
if present and name == self.name then return true, start, duration end
end
return false, 0, 0
end
local Cooldown = {
New = function(self, type, spellid, keybind)
local o = {
["type"] = type,
["spellid"] = spellid,
["name"] = GetSpellInfo(spellid),
["icon"] = GetSpellTexture(spellid),
["keybind"] = keybind,
}
setmetatable(o, self)
self.__index = self
return o
end,
GetCooldownInfo = function(self)
local start, duration = GetSpellCooldown(self.spellid)
return start > 0 and duration > aura_env.gcdThreshold, start, duration
end,
GetActiveInfo = function(self) return self.type:GetActiveInfo() end,
}
aura_env.cooldowns = {
[5394] = Cooldown:New(TotemType, 5394, "C"), -- Healing Stream Totem
[2484] = Cooldown:New(TotemType, 2484, "SY"), -- Earthbind Totem
[8143] = Cooldown:New(TotemType, 8143, "S5"), -- Tremor Totem
[8177] = Cooldown:New(TotemType, 8177, "5"), -- Grounding Totem
[108273] = Cooldown:New(TotemType, 108273, "S4"), -- Windwalk Totem
[108270] = Cooldown:New(TotemType, 108270, "SF"), -- Stone Bulwark Totem
}
aura_env.gcdThreshold = 1.5
aura_env.Update = function(allstates, cd)
local state = allstates[cd.spellid] or {}
state.IsOnCooldown = cd:GetCooldownInfo()
state.IsActive = cd:GetActiveInfo()
state.Keybind = cd.keybind
if state.IsOnCooldown and not state.IsActive then
local _, start, duration = cd:GetCooldownInfo()
state.progressType = "timed"
state.duration = duration
state.expirationTime = start + duration
elseif state.IsOnCooldown and state.IsActive then
local _, start, duration = cd:GetActiveInfo()
state.progressType = "timed"
state.duration = duration
state.expirationTime = start + duration
end
state.changed = true
state.show = true
state.name = cd.name
state.icon = cd.icon
state.spellid = cd.spellid
allstates[cd.spellid] = state
end
aura_env.UpdateAll = function(allstates)
for _, v in pairs(aura_env.cooldowns) do
aura_env.Update(allstates, v)
end
end
aura_env.HandleEvent = function(allstates)
-- TODO: Handle events better
-- On cooldown begin -> trigger update on relevant spell
-- On totem die -> same
-- On buff remove
-- On debuff remove
-- On... Whatever else might happen
aura_env.UpdateAll(allstates)
end