vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local metro = AceLibrary("Metrognome-2.0")
local tablet = AceLibrary("Tablet-2.0")

CombatTimeFu = AceLibrary("AceAddon-2.0"):new("FuBarPlugin-2.0", "AceEvent-2.0")

function CombatTimeFu:OnInitialize()
                self.combatStart = 0
                self.combatEnd = 0
                self.inCombat = false
                
                self.name = "CombatTimeFu"
end

function CombatTimeFu:OnEnable()
        self:RegisterEvent("PLAYER_REGEN_DISABLED", "OnPlayerRegenDisabled")
        self:RegisterEvent("PLAYER_REGEN_ENABLED", "OnPlayerRegenEnabled")
        self:RegisterEvent("PLAYER_ENTERING_WORLD", "OnPlayerRegenEnabled");
end

function CombatTimeFu:OnDisable()
        self:UnRegisterEvent("PLAYER_REGEN_DISABLED")
        self:UnRegisterEvent("PLAYER_REGEN_ENABLED")
        self:UnRegisterEvent("PLAYER_ENTERING_WORLD");
end

-- Out of combat
function CombatTimeFu:OnPlayerRegenEnabled()
        self.combatEnd = GetTime()
        self.inCombat = false
        self:Update()

        -- Disable updating, don't need it while idle
        metro:Unregister(self.name)
end

        -- In combat
function CombatTimeFu:OnPlayerRegenDisabled()
        self.combatStart = GetTime()
        self.combatEnd = 0
        self.inCombat = true

        -- Start updating while in combat
        metro:Register(self.name, self.Update, 0.1, self)
        metro:Start(self.name)
end

function CombatTimeFu:GetCurrentCombatTime()
        local sec = 0
        if self.inCombat then
                sec = GetTime()-self.combatStart
        else
                sec = self.combatEnd-self.combatStart
        end
        if(sec < 0) then 
                sec = 0
        end
        local s = math.floor(sec)
        local frac = (sec - s)*100
        local m = math.floor(sec/60)
        sec = math.mod(sec, 60)
        return string.format("%d:%02d:%02d", m, sec, frac)
end

function CombatTimeFu:OnTextUpdate()
        if self.inCombat == true then
                self:SetText("Combat: |cffff0000".. self:GetCurrentCombatTime() .."|r")
        else
                if self.combatEnd == 0 then
                        self:SetText("Combat: |cff00ff00No|r")
                else
                        self:SetText("Combat: |cff00ff00".. self:GetCurrentCombatTime() .."|r")
                end
        end
end

function CombatTimeFu:OnTooltipUpdate()
        local cat = tablet:AddCategory(
                'columns', 2,
                'child_textR', 1,
                'child_textG', 1,
                'child_textB', 0,
                'child_text2R', 1,
                'child_text2G', 1,
                'child_text2B', 1
        )
        cat:AddLine(
                'text', "Combat status",
                'text2', self.inCombat and "|cffff0000In combat|r" or "|cff00ff00Not in combat|r"
        )
        cat:AddLine(
                'text', "Combat time",
                'text2', self.combatStart > 0 and self:GetCurrentCombatTime() or "None"
        )
end

Generated by GNU Enscript 1.6.5.90.