95 lines
2.6 KiB
Lua
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
|