vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local module = ArcHUD:NewModule("DruidMana")
module.unit = "player"
module.defaults = {
        Enabled = false,
        Outline = true,
        ShowText = true,
        ShowPerc = true,
        Side = 2,
        Level = 1,
}
module.options = {
        {name = "ShowText", text = "SHOWTEXT", tooltip = "SHOWTEXT"},
        {name = "ShowPerc", text = "SHOWPERC", tooltip = "SHOWPERC"},
        attach = true,
}
module.localized = true

function module:Initialize()
        -- Setup the frame we need
        self.f = self:CreateRing(true, ArcHUDFrame)
        self.f:SetAlpha(0)

        self.MPText = self:CreateFontString(self.f, "BACKGROUND", {150, 13}, 12, "LEFT", {0.0, 1.0, 1.0}, {"TOPLEFT", ArcHUDFrameCombo, "TOPRIGHT", 0, 14})
        self.MPPerc = self:CreateFontString(self.f, "BACKGROUND", {70, 12}, 10, "LEFT", {1.0, 1.0, 1.0}, {"TOPLEFT", self.parent:GetModule("Mana").MPPerc, "TOPRIGHT", 0, -1})

        -- Override Update timer
        self:RegisterMetro(self.name .. "Update", self.UpdateAlpha, 0.05, self)

        -- Add timer for DruidBar
        self:RegisterMetro(self.name .. "DruidBarUpdate", self.DruidBarUpdate, 0.5, self)
end

function module:Update()
        if(self.db.profile.ShowText) then
                self.MPText:Show()
        else
                self.MPText:Hide()
        end

        if(self.db.profile.ShowPerc) then
                self.MPPerc:Show()
        else
                self.MPPerc:Hide()
        end

        if(self.db.profile.Outline) then
                self.f.BG:Show()
        else
                self.f.BG:Hide()
        end

        -- Clear all points for the ring
        self.f:ClearAllPoints()
        self.f:SetValue(0)
        if(self.db.profile.Side == 1) then
                -- Attach to left side
                self.f:SetPoint("TOPLEFT", self.parent:GetModule("Anchors").Left, "TOPLEFT", self.db.profile.Level * -15, 0)
                self.f.BG:SetReversed(false)
                self.f:SetReversed(false)
        else
                -- Attach to right side
                self.f:SetPoint("TOPRIGHT", self.parent:GetModule("Anchors").Right, "TOPRIGHT", self.db.profile.Level * 15, 0)
                self.f.BG:SetReversed(true)
                self.f:SetReversed(true)
        end
        self.f.BG:SetAngle(180)
end

function module:Enable()
        self.f:UpdateColor({r=0.0, g=0.0, b=1.0})

        -- Don't go further if player is not a druid
        local _, class = UnitClass(self.unit)
        if(class ~= "DRUID") then return end

        -- Register the events we will use
        self:RegisterEvent("UNIT_DISPLAYPOWER")

        -- Activate the timers
        self:StartMetro(self.name .. "Alpha")
        self:StartMetro(self.name .. "Fade")
        self:StartMetro(self.name .. "Update")

        -- Check if we have any druid mana addons loaded
        if(DruidBarKey) then
                -- We got DruidBar
                self:StartMetro(self.name .. "DruidBarUpdate")

                self.gotAddon = true
        elseif(SoleManax) then
                -- We got SoleManax
                SoleManax:AddUser(self.UpdateMana, true, self)
                --self:UpdateMana(SoleManax:GetPlayerMana())

                self.gotAddon = true
        end

        self.f:Show()
end

function module:Disable()
        if(SoleManax) then
                SoleManax:DelUser(self.UpdateMana)
        end
end

function module:UpdateAlpha()
        if(self.doUpdates) then
                if(self.f.startValue < self.f.maxValue and ArcHUD.PlayerIsInCombat) then
                        self.f:SetRingAlpha(ArcHUD.db.profile.FadeIC)
                elseif(self.f.startValue < self.f.maxValue and not ArcHUD.PlayerIsInCombat) then
                        self.f:SetRingAlpha(ArcHUD.db.profile.FadeOOC)
                else
                        self.f:SetRingAlpha(0)
                end
        else
                self.f:SetRingAlpha(0)
        end
end

function module:DruidBarUpdate()
        self:UpdateMana(DruidBarKey.keepthemana, DruidBarKey.maxmana)
end

function module:UpdateMana(curMana, maxMana)
        if(self.doUpdates) then
                self.MPText:SetText(floor(curMana).."/"..floor(maxMana))
                self.MPPerc:SetText(floor((curMana/maxMana)*100).."%")
                self.f:SetMax(maxMana)
                self.f:SetValue(curMana)
        end
end

function module:UNIT_DISPLAYPOWER()
        if(arg1 ~= self.unit) then return end
        if(UnitPowerType(self.unit) == 1 or UnitPowerType(self.unit) == 3 and not self.doUpdates) then
                --Bear or Cat form
                self.doUpdates = true
        elseif(UnitPowerType(self.unit) == 0 and self.doUpdates) then
                --player/aqua/travel
                self.doUpdates = false
        end
end