vanilla-wow-addons – Rev 1
?pathlinks?
assert( oRA, "oRA not found!")
------------------------------
-- Are you local? --
------------------------------
local L = AceLibrary("AceLocale-2.2"):new("oRAOCoolDown")
local roster = AceLibrary("RosterLib-2.0")
----------------------------
-- Localization --
----------------------------
L:RegisterTranslations("enUS", function() return {
["CoolDown Monitor"] = true,
["cooldown"] = true,
["cooldownoptional"] = true,
["Optional/CoolDown"] = true,
["Options for CoolDown."] = true,
["Toggle"] = true,
["toggle"] = true,
["Toggle the CoolDown Monitor."] = true,
} end )
L:RegisterTranslations("koKR", function() return {
["CoolDown Monitor"] = "재사용대기시간 모니터",
["Optional/CoolDown"] = "부가/재사용대기시간",
["Options for CoolDown."] = "재사용대기시간에 관한 설정.",
["Toggle"] = "토글",
["Toggle the CoolDown Monitor."] = "재사용대기시간 모니터 토글",
} end )
L:RegisterTranslations("zhCN", function() return {
["CoolDown Monitor"] = "冷却监视器",
["cooldown"] = "冷却",
["cooldownoptional"] = "cooldownoptional",
["Optional/CoolDown"] = "Optional/CoolDown",
["Options for CoolDown."] = "冷却监视器的选项",
["Toggle"] = "显示",
["toggle"] = "显示",
["Toggle the CoolDown Monitor."] = "显示冷却监视器",
} end )
L:RegisterTranslations("zhTW", function() return {
["CoolDown Monitor"] = "冷卻監視器",
["cooldown"] = "冷卻",
["cooldownoptional"] = "cooldownoptional",
["Optional/CoolDown"] = "可選/冷卻",
["Options for CoolDown."] = "冷卻監視器的選項",
["Toggle"] = "顯示",
["toggle"] = "顯示",
["Toggle the CoolDown Monitor."] = "顯示冷卻監視器",
} end )
L:RegisterTranslations("frFR", function() return {
["CoolDown Monitor"] = "Surveillance des \"cooldowns\"",
--["cooldown"] = true,
--["cooldownoptional"] = true,
["Optional/CoolDown"] = "Optionnel/Temps de recharge",
["Options for CoolDown."] = "Options concernant les temps de recharge.",
["Toggle"] = "Afficher",
--["toggle"] = true,
["Toggle the CoolDown Monitor."] = "Affiche ou non la surveillance des temps de recharge.",
} end )
----------------------------------
-- Module Declaration --
----------------------------------
oRAOCoolDown = oRA:NewModule(L["cooldownoptional"], "CandyBar-2.0")
oRAOCoolDown.defaults = {
hidden = false,
cooldowns = {},
}
oRAOCoolDown.optional = true
oRAOCoolDown.name = L["Optional/CoolDown"]
oRAOCoolDown.consoleCmd = L["cooldown"]
oRAOCoolDown.consoleOptions = {
type = "group",
desc = L["Options for CoolDown."],
name = L["CoolDown Monitor"],
args = {
[L["toggle"]] = {
type = "toggle", name = L["Toggle"],
desc = L["Toggle the CoolDown Monitor."],
get = function() return not oRAOCoolDown.db.profile.hidden end,
set = function(v)
oRAOCoolDown:ToggleView()
end,
},
}
}
------------------------------
-- Initialization --
------------------------------
function oRAOCoolDown:OnEnable()
roster:Enable()
if not self.db.profile.cooldowns then self.db.profile.cooldowns = {} end
self.enabled = nil
self:RegisterEvent("oRA_LeftRaid")
self:RegisterEvent("oRA_JoinedRaid")
self:RegisterEvent("oRA_BarTexture")
end
function oRAOCoolDown:OnDisable()
self:UnregisterAllEvents()
self:DisableMonitor()
end
------------------------
-- Event Handlers --
------------------------
function oRAOCoolDown:oRA_JoinedRaid()
if not self.enabled then
self.enabled = true
if not self.db.profile.hidden then
self:SetupFrames()
self.cdframe:Show()
self:StartAllCoolDowns()
end
self:RegisterCheck("CD", "oRA_CoolDown")
end
end
function oRAOCoolDown:oRA_LeftRaid()
self:DisableMonitor()
end
function oRAOCoolDown:oRA_CoolDown(msg, author)
msg = self:CleanMessage(msg)
local _,_,what,length = string.find( msg, "^CD (%d+) (%d+)")
if author and what and time then
if not self.db.profile.cooldowns then self.db.profile.cooldowns = {} end
self.db.profile.cooldowns[author] = time() + tonumber(length)*60
self:StartCoolDown( author, tonumber(length)*60)
end
end
function oRAOCoolDown:oRA_BarTexture( texture )
for key, val in pairs( self.db.profile.cooldowns) do
self:SetCandyBarTexture( "oRAOCoolDown "..key, self.core.bartextures[texture] )
end
end
-------------------------
-- Utility Functions --
-------------------------
function oRAOCoolDown:DisableMonitor()
self.enabled = nil
if self.cdframe and self.cdframe:IsVisible() then self.cdframe:Hide() end
self:StopAllCoolDowns()
self:UnregisterCheck("CD")
end
function oRAOCoolDown:SavePosition()
local f = self.cdframe
local x,y = f:GetLeft(), f:GetTop()
local s = f:GetEffectiveScale()
x,y = x*s,y*s
self.db.profile.posx = x
self.db.profile.posy = y
end
function oRAOCoolDown:RestorePosition()
local x = self.db.profile.posx
local y = self.db.profile.posy
if not x or not y then return end
local f = self.cdframe
local s = f:GetEffectiveScale()
x,y = x/s,y/s
f:ClearAllPoints()
f:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", x, y)
end
function oRAOCoolDown:SetupFrames()
if not self.cdframe then
local cdframe = CreateFrame("Frame", "oRACoolDownFrame", UIParent)
cdframe:EnableMouse(true)
cdframe:SetMovable(true)
cdframe:RegisterForDrag("LeftButton")
cdframe:SetScript("OnDragStart", function() if IsAltKeyDown() then self["cdframe"]:StartMoving() end end)
cdframe:SetScript("OnDragStop", function() self["cdframe"]:StopMovingOrSizing() self:SavePosition() end)
cdframe:SetWidth(175)
cdframe:SetHeight(50)
--cdframe:SetBackdrop({
-- bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", tile = true, tileSize = 16,
-- edgeFile = "Interface\Tooltips\UI-Tooltip-Border", edgeSize = 16,
-- insets = {left = 0, right = 0, top = 0, bottom = 0},
--})
--cdframe:SetBackdropColor(0,0,0,0.5)
--cdframe:SetBackdropBorderColor(1,1,1,.5)
cdframe:Hide()
cdframe:SetPoint("CENTER", UIParent, "CENTER", 0, 100)
local title = cdframe:CreateFontString(nil, "ARTWORK")
title:SetFontObject(GameFontNormalSmall)
title:SetText(L["CoolDown Monitor"])
title:SetJustifyH("CENTER")
title:SetWidth(160)
title:SetHeight(12)
title:Show()
title:ClearAllPoints()
title:SetPoint("TOP", cdframe, "TOP", 0, -5)
local text = cdframe:CreateFontString(nil, "ARTWORK")
text:SetFontObject(GameFontHighlightSmall)
text:SetJustifyH("CENTER")
text:SetJustifyV("TOP")
text:SetWidth(160)
--text:SetHeight(25)
text:Show()
text:ClearAllPoints()
text:SetPoint("TOPLEFT", title, "BOTTOMLEFT", 0, -5)
self.cdframe = cdframe
self.title = title
self.text = text
self:RestorePosition()
end
end
function oRAOCoolDown:StartAllCoolDowns()
local t = time()
for key, val in pairs(self.db.profile.cooldowns) do
if t >= val then
self.db.profile.cooldowns[key] = nil
self:StopCoolDown( key )
else
self:StartCoolDown( key, val - t )
end
end
end
function oRAOCoolDown:StopAllCoolDowns()
local t = time()
for key, val in pairs(self.db.profile.cooldowns) do
if t >= val then self.db.profile.cooldowns[key] = nil end
self:StopCoolDown( key )
end
end
function oRAOCoolDown:StartCoolDown( player, time )
if not self.enabled or self.db.profile.hidden then return end
local unit = roster:GetUnitObjectFromName( player )
if not unit then return end
self:RegisterCandyBarGroup("oRAOCoolDownGroup")
self:SetCandyBarGroupPoint("oRAOCoolDownGroup", "TOP", self.text, "BOTTOM", 0, -5 )
self:RegisterCandyBar( "oRAOCoolDown "..player, time, player, nil, unit.class)
self:RegisterCandyBarWithGroup( "oRAOCoolDown "..player, "oRAOCoolDownGroup")
self:SetCandyBarWidth( "oRAOCoolDown "..player, 150)
self:SetCandyBarTexture( "oRAOCoolDown "..player, self.core.bartextures[self.core.db.profile.bartexture] )
self:StartCandyBar( "oRAOCoolDown "..player, true)
end
function oRAOCoolDown:StopCoolDown( player )
self:UnregisterCandyBar( "oRAOCoolDown "..player )
end
-------------------------
-- Command Handlers --
-------------------------
function oRAOCoolDown:ToggleView()
self.db.profile.hidden = not self.db.profile.hidden
if self.cdframe and self.cdframe:IsVisible() then
self:StopAllCoolDowns()
self.cdframe:Hide()
end
if self.enabled and not self.db.profile.hidden then
if not self.cdframe then self:SetupFrames() end
self.cdframe:Show()
self:StartAllCoolDowns()
end
end