vanilla-wow-addons – Rev 1
?pathlinks?
-- Set mixins and libraries
ArcHUD:SetModuleMixins("AceEvent-2.0", "AceHook-2.0", "Metrognome-2.0")
ArcHUD.modulePrototype.parent = ArcHUD
-- Debug function uses the core :Debug function
function ArcHUD.modulePrototype:Debug(level, ...)
if(self.parent.LevelDebug) then
self.parent:LevelDebug(level, "["..self.name.."] "..unpack(arg))
end
end
function ArcHUD.modulePrototype:RegisterDewdropSettings()
table.insert(self.parent.dewdrop_menu.L1, {"text", self.name, "hasArrow", true, "value", "L2_"..self.name})
self.parent.dewdrop_menu["L2_"..self.name] = {
{
"text", self.name,
"isTitle", true
},
{
"text", self.L("Version: ")..self.version,
"notClickable", true
},
{
"text", self.L("Author: ")..self.author,
"notClickable", true
},
{},
{
"text", self.L("TEXT","ENABLED"),
"tooltipTitle", self.L("TEXT","ENABLED"),
"tooltipText", self.L("TOOLTIP","ENABLED"),
"checked", false,
"func", ArcHUD.modDB,
"arg1", "toggle",
"arg2", "Enabled",
"arg3", self.name
},
{
"text", self.L("TEXT","OUTLINE"),
"tooltipTitle", self.L("TEXT","OUTLINE"),
"tooltipText", self.L("TOOLTIP","OUTLINE"),
"checked", false,
"func", ArcHUD.modDB,
"arg1", "toggle",
"arg2", "Outline",
"arg3", self.name
},
}
local t = {}
for k,v in ipairs(self.options) do
if(type(v) == "table") then
t = {
"text", self.L("TEXT",v.text),
"tooltipTitle", self.L("TEXT",v.text),
"tooltipText", self.L("TOOLTIP",v.tooltip),
"checked", false,
"func", ArcHUD.modDB,
"arg1", "toggle",
"arg2", v.name,
"arg3", self.name
}
table.insert(self.parent.dewdrop_menu["L2_"..self.name], t)
end
end
if(self.options.attach) then
t = {
"text", self.L("TEXT","SIDE"),
"tooltipTitle", self.L("TEXT","SIDE"),
"tooltipText", self.L("TOOLTIP","SIDE"),
"hasArrow", true,
"value", "L3_"..self.name
}
table.insert(self.parent.dewdrop_menu["L2_"..self.name], t)
self.parent.dewdrop_menu["L3_"..self.name] = {
{
"text", self.L("SIDE","LEFT"),
"isRadio", true,
"checked", true,
"func", ArcHUD.modDB,
"arg1", "set",
"arg2", "Side",
"arg3", self.name,
"arg4", 1
},
{
"text", self.L("SIDE","RIGHT"),
"isRadio", true,
"checked", false,
"func", ArcHUD.modDB,
"arg1", "set",
"arg2", "Side",
"arg3", self.name,
"arg4", 2
},
}
t = {
"text", self.L("TEXT","LEVEL"),
"tooltipTitle", self.L("TEXT","LEVEL"),
"tooltipText", self.L("TOOLTIP","LEVEL"),
"hasArrow", true,
"hasSlider", true,
"sliderMin", -5,
"sliderMax", 5,
"sliderStep", 1,
"sliderValue", 0,
"sliderFunc", ArcHUD.modDB,
"sliderArg1", "set",
"sliderArg2", "Level",
"sliderArg3", self.name
}
table.insert(self.parent.dewdrop_menu["L2_"..self.name], t)
end
end
-- Enabling/Disabling
function ArcHUD.modulePrototype:OnInitialize()
self.parent:ToggleModuleActive(self, false)
self:Debug(3, "Creating locale instance")
self.L = AceLibrary("AceLocale-2.0"):new("ArcHUD_Module")
if(self.Initialize) then
self:Initialize()
self:Debug(2, "Ring initialized")
self:RegisterEvent("ARCHUD_MODULE_ENABLE")
self:RegisterEvent("ARCHUD_MODULE_UPDATE")
else
self:Debug(1, "Missing Initialize(). Aborting")
return
end
if(self.defaults and type(self.defaults) == "table") then
-- Add defaults to ArcHUD defaults table
self:Debug(3, "Acquiring ring DB namespace")
self.db = self.parent:AcquireDBNamespace(self.name)
self:Debug(3, "Registering ring default options")
self.parent:RegisterDefaults(self.name, "profile", self.defaults)
if(not self.db) then
self:Debug(1, "Failed to acquire DB namespace")
end
-- Register chat commands
self:RegisterDewdropSettings()
end
-- Add metadata for module if it doesn't exist
if(not self.version) then
self.version = self.parent.version
end
if(not self.author) then
self.author = self.parent.author
end
if(not self.date) then
self.date = self.parent.date
end
self:Debug(3, "Registering Metrognome timers")
if(not self:MetroStatus(self.name .. "Alpha")) then
self:RegisterMetro(self.name .. "Alpha", ArcHUDRingTemplate.AlphaUpdate, 0.01, self.f)
end
if(not self:MetroStatus(self.name .. "Fade")) then
self:RegisterMetro(self.name .. "Fade", ArcHUDRingTemplate.DoFadeUpdate, 0.01, self.f)
end
if(not self:MetroStatus(self.name .. "Update")) then
self:RegisterMetro(self.name .. "Update", ArcHUDRingTemplate.UpdateAlpha, 0.05, self)
end
self:Debug(2, "Ring loaded")
end
function ArcHUD.modulePrototype:OnEnable()
self:Debug(3, "Recieved enable event")
if(self.Enable and self.db.profile.Enabled) then
self:Debug(2, "Enabling ring")
if(self.disableEvents and (not self.disableEvents.option or self.disableEvents.option and self.db.profile[self.disableEvents.option])) then
self:Debug(3, "Disabling events:")
for k,v in ipairs(self.disableEvents) do
local f = getglobal(v.frame)
if(f) then
self:Debug(3, "- Frame '"..f:GetName().."':")
for _, event in pairs(v.events) do
self:Debug(3, " * "..event)
f:UnregisterEvent(event)
end
if(v.hide and f:IsVisible()) then
self:Debug(3, "- Frame '"..f:GetName().."' hiding")
f:Hide()
end
end
end
self.eventsDisabled = TRUE
end
self:Debug(3, "Calling self:Enable()")
if(self.Update) then
self:Update()
end
self:Enable()
self:RegisterEvent("ARCHUD_MODULE_DISABLE")
if(not self:IsEventRegistered("ARCHUD_MODULE_UPDATE")) then
self:RegisterEvent("ARCHUD_MODULE_UPDATE")
end
self:Debug(2, "Ring enabled")
else
self:Debug(2, "Ring disabled as per user setting")
self.parent:ToggleModuleActive(self, false)
end
end
function ArcHUD.modulePrototype:OnDisable()
self:Debug(2, "Disabling ring")
if(self.disableEvents and self.eventsDisabled) then
self:Debug(3, "Re-enabling events:")
for k,v in ipairs(self.disableEvents) do
local f = getglobal(v.frame)
if(f) then
self:Debug(3, "- Frame '"..f:GetName().."':")
for _, event in pairs(v.events) do
self:Debug(3, " * "..event)
f:RegisterEvent(event)
end
end
end
self.eventsDisabled = FALSE
end
if(self.f) then
self.f:Hide()
end
if(self.Disable) then
self:Disable()
end
self:RegisterEvent("ARCHUD_MODULE_ENABLE")
self:RegisterEvent("ARCHUD_MODULE_UPDATE")
self:Debug(2, "Ring disabled")
end
function ArcHUD.modulePrototype:ARCHUD_MODULE_ENABLE()
self.parent:ToggleModuleActive(self, true)
end
function ArcHUD.modulePrototype:ARCHUD_MODULE_DISABLE()
self.parent:ToggleModuleActive(self, false)
end
function ArcHUD.modulePrototype:ARCHUD_MODULE_UPDATE(module)
if(module == self.name) then
if(self.db.profile.Enabled and not self.parent:IsModuleActive(self)) then
self.parent:ToggleModuleActive(self, true)
elseif(not self.db.profile.Enabled and self.parent:IsModuleActive(self)) then
self.parent:ToggleModuleActive(self, false)
elseif(self.db.profile.Enabled and self.parent:IsModuleActive(self)) then
if(self.Update) then
self:Debug(2, "Updating ring")
self:Update()
end
end
end
end
-- Ring frame creation and setup
function ArcHUD.modulePrototype:CreateRing(hasBG, parent)
-- Create frame
local f = CreateFrame("Frame", nil, parent)
f:SetFrameStrata("BACKGROUND")
f:SetFrameLevel(10)
f:SetWidth(256)
f:SetHeight(256)
-- Set up textures
local t
f.quadrants = {}
t = f:CreateTexture(nil, "ARTWORK")
t:SetTexture("Interface\\Addons\\ArcHUD2\\Icons\\Ring.tga")
t:SetAllPoints(f)
f.quadrants[1] = t
t = f:CreateTexture(nil, "ARTWORK")
t:SetTexture("Interface\\Addons\\ArcHUD2\\Icons\\Ring.tga")
t:SetAllPoints(f)
f.quadrants[2] = t
t = f:CreateTexture(nil, "ARTWORK")
t:SetTexture("Interface\\Addons\\ArcHUD2\\Icons\\Ring.tga")
t:SetAllPoints(f)
f.chip = t
t = f:CreateTexture(nil, "ARTWORK")
t:SetTexture("Interface\\Addons\\ArcHUD2\\Icons\\Slice.tga")
t:SetAllPoints(f)
f.slice = t
-- Set up frame
ArcHUDRingTemplate:OnLoad(f)
if(hasBG) then
-- Create frame
local fBG = CreateFrame("Frame", nil, f)
fBG:SetFrameLevel(0)
fBG:SetPoint("BOTTOMLEFT", f, "BOTTOMLEFT", 0, 0)
fBG:SetWidth(256)
fBG:SetHeight(256)
-- Set up textures
fBG.quadrants = {}
t = fBG:CreateTexture(nil, "BACKGROUND")
t:SetTexture("Interface\\Addons\\ArcHUD2\\Icons\\RingBG.tga")
t:SetAllPoints(fBG)
fBG.quadrants[1] = t
t = fBG:CreateTexture(nil, "BACKGROUND")
t:SetTexture("Interface\\Addons\\ArcHUD2\\Icons\\RingBG.tga")
t:SetAllPoints(fBG)
fBG.quadrants[2] = t
t = fBG:CreateTexture(nil, "BACKGROUND")
t:SetTexture("Interface\\Addons\\ArcHUD2\\Icons\\RingBG.tga")
t:SetAllPoints(fBG)
fBG.chip = t
t = fBG:CreateTexture(nil, "BACKGROUND")
t:SetTexture("Interface\\Addons\\ArcHUD2\\Icons\\Slice.tga")
t:SetAllPoints(fBG)
fBG.slice = t
-- Set up frame
ArcHUDRingTemplate:OnLoadBG(fBG)
f.BG = fBG
end
return f
end
function ArcHUD.modulePrototype:CreateFontString(parent, layer, size, fontsize, justify, color, point)
local fs = parent:CreateFontString(nil, layer)
local width, height = unpack(size)
fs:SetWidth(width)
fs:SetHeight(height)
fs:SetFont("Fonts\\"..self.L"FONT", fontsize, "OUTLINE")
if(color) then
fs:SetTextColor(unpack(color))
end
fs:SetJustifyH(justify)
fs:SetPoint(unpack(point))
fs:Show()
return fs
end
function ArcHUD.modulePrototype:CreateTexture(parent, layer, size, texture, point)
local t = parent:CreateTexture(nil, layer)
local width, height = unpack(size)
t:SetWidth(width)
t:SetHeight(height)
if(texture) then
t:SetTexture(texture)
end
if(point) then
t:SetPoint(unpack(point))
end
t:Show()
return t
end