vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local Default                           = {
        CastingBar                      = {
                width                   = 255,
                height                  = 25,
                edgeFile                = "Default",
                texture                 = "Default",
                timeSize                = 12,
                spellSize               = 10,
                delaySize               = 14,
        },
        MirrorBar                       = {
                width                   = 255,
                height                  = 25,
                edgeFile                = "Default",
                texture                 = "Default",
                timeSize                = 12,
                spellSize               = 10,
                delaySize               = 14,
        },
        Colors                          = {
                Complete                = {r=0, g=1, b=0},
                Casting                 = {r=1, g=.7, b=0},
                Channel         = {r=.3, g=.3, b=1},
                Failed                  = {r=1, g=0, b=0},
        },
        Mirror                          = {
                EXHAUSTION      = {r=1, g=.9, b=0},
                BREATH                  = {r=0, g=.5, b=1},
                DEATH                   = {r=0, g=.7, b=1},
                FEIGNDEATH      = {r=1, g=.7, b=1}
        },
        Pos = {}
}
local Textures          = {
        ["Default"]     = "Interface\\AddOns\\oCB\\textures\\oCB",
        ["Perl"]                = "Interface\\AddOns\\oCB\\textures\\perl",
        ["Smooth"]      = "Interface\\AddOns\\oCB\\textures\\smooth",
        ["Glaze"]       = "Interface\\AddOns\\oCB\\textures\\glaze",
        ["Blizzard"]    = "Interface\\TargetingFrame\\UI-StatusBar",
        ["Striped"]     = "Interface\\AddOns\\oCB\\textures\\striped",
    ["BantoBar"]        = "Interface\\AddOns\\oCB\\textures\\BantoBar",
}
local Borders           = {
        ["Default"]             = "Interface\\Tooltips\\UI-Tooltip-Border",
        ["None"]                = ""
}

oCB = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceDebug-2.0", "AceHook-2.0", "AceDB-2.0", "AceConsole-2.0")

function oCB:OnInitialize()
        self.Textures = Textures
        self.Borders = Borders

        local consoleOptions = {
                type = 'group',
                args = {
                        lock = {
                                name = "Lock", type = 'toggle', order = 1,
                                desc = "Lock/Unlock the casting bar.",
                                get = function() return self.db.profile.lock end,
                                set = function() self.db.profile.lock = not self.db.profile.lock end
                        },
                        castingbar = {
                                name = "Casting Bar", type = 'group', order = 2,
                                desc = "Casting Bar", 
                                args = {
                                        width = {
                                                name = "Width", type = 'range', min = 10, max = 500, step = 1,
                                                desc = "Set the width of the casting bar.",
                                                get = function() return self.db.profile.CastingBar.width end,
                                                set = function(v)
                                                        self.db.profile.CastingBar.width = v
                                                        self:Layout("CastingBar")
                                                end
                                        },
                                        height = {
                                                name = "Height", type = 'range', min = 5, max = 50, step = 1,
                                                desc = "Set the height of the casting bar.",
                                                get = function() return self.db.profile.CastingBar.height end,
                                                set = function(v)
                                                        self.db.profile.CastingBar.height = v
                                                        self:Layout("CastingBar")
                                                end
                                        },
                                        border = {
                                                name = "Border", type = 'text',
                                                desc = "Toggle the border.",
                                                get = function() return self.db.profile.CastingBar.edgeFile end,
                                                set = function(v)
                                                        self.db.profile.CastingBar.edgeFile = v
                                                        self:Layout("CastingBar")
                                                end,
                                                validate = {"Default","None"}
                                        },
                                        texture = {
                                                name = "Texture", type = 'text',
                                                desc = "Toggle the texture.",
                                                get = function() return self.db.profile.CastingBar.texture end,
                                                set = function(v)
                                                        self.db.profile.CastingBar.texture = v
                                                        self:Layout("CastingBar")
                                                end,
                                                validate = {"Default","Perl","Smooth","Glaze","Blizzard","Striped", "BantoBar"}
                                        },
                                        font = {
                                                name = "Font", type = 'group',
                                                desc = "Set the font size of different elements.",
                                                args = {
                                                        spell = {
                                                                name = "Spell", type = 'range', min = 6, max = 32, step = 1,
                                                                desc = "Set the font size on the spellname, when casting.",
                                                                get = function() return self.db.profile.CastingBar.spellSize end,
                                                                set = function(v)
                                                                        self.db.profile.CastingBar.spellSize = v
                                                                        self:Layout("CastingBar")
                                                                end
                                                        },
                                                        time = {
                                                                name = "Time", type = 'range', min = 6, max = 32, step = 1,
                                                                desc = "Set the font size on the spell time.",
                                                                get = function() return self.db.profile.CastingBar.timeSize end,
                                                                set = function(v)
                                                                        self.db.profile.CastingBar.timeSize = v
                                                                        self:Layout("CastingBar")
                                                                end
                                                        },
                                                        delay = {
                                                                name = "Delay", type = 'range', min = 6, max = 32, step = 1,
                                                                desc = "Set the font size on the delay time.",
                                                                get = function() return self.db.profile.CastingBar.delaySize end,
                                                                set = function(v)
                                                                        self.db.profile.CastingBar.delaySize = v
                                                                        self:Layout("CastingBar")
                                                                end
                                                        }
                                                }
                                        }
                                }
                        },
                        mirrorbar = {
                                name = "Mirror Bar", type = 'group', order = 3,
                                desc = "Mirror Bar",
                                args = {
                                        width = {
                                                name = "Width", type = 'range', min = 10, max = 500, step = 1,
                                                desc = "Set the width of the mirror bar.",
                                                get = function() return self.db.profile.MirrorBar.width end,
                                                set = function(v)
                                                        self.db.profile.MirrorBar.width = v
                                                        self:Layout("BREATH", "MirrorBar")
                                                        self:Layout("EXHAUSTION", "MirrorBar")
                                                        self:Layout("FEIGNDEATH", "MirrorBar")
                                                end
                                        },
                                        height = {
                                                name = "Height", type = 'range', min = 5, max = 50, step = 1,
                                                desc = "Set the height of the mirror bar.",
                                                get = function() return self.db.profile.MirrorBar.height end,
                                                set = function(v)
                                                        self.db.profile.MirrorBar.height = v
                                                        self:Layout("BREATH", "MirrorBar")
                                                        self:Layout("EXHAUSTION", "MirrorBar")
                                                        self:Layout("FEIGNDEATH", "MirrorBar")
                                                end
                                        },
                                        border = {
                                                name = "Border", type = 'text',
                                                desc = "Toggle the border.",
                                                get = function() return self.db.profile.MirrorBar.edgeFile end,
                                                set = function(v)
                                                        self.db.profile.MirrorBar.edgeFile = v
                                                        self:Layout("BREATH", "MirrorBar")
                                                        self:Layout("EXHAUSTION", "MirrorBar")
                                                        self:Layout("FEIGNDEATH", "MirrorBar")
                                                end,
                                                validate = {"Default","None"}
                                        },
                                        texture = {
                                                name = "Texture", type = 'text',
                                                desc = "Toggle the texture.",
                                                get = function() return self.db.profile.MirrorBar.texture end,
                                                set = function(v)
                                                        self.db.profile.MirrorBar.texture = v
                                                        self:Layout("BREATH", "MirrorBar")
                                                        self:Layout("EXHAUSTION", "MirrorBar")
                                                        self:Layout("FEIGNDEATH", "MirrorBar")
                                                end,
                                                validate = {"Default","Perl","Smooth","Glaze","Blizzard","Striped", "BantoBar"}
                                        },
                                        font = {
                                                name = "Font", type = 'group',
                                                desc = "Set the font size of different elements.",
                                                args = {
                                                        spell = {
                                                                name = "Spell", type = 'range', min = 6, max = 32, step = 1,
                                                                desc = "Set the font size on the spellname, when shown.",
                                                                get = function() return self.db.profile.MirrorBar.spellSize end,
                                                                set = function(v)
                                                                        self.db.profile.MirrorBar.spellSize = v
                                                                        self:Layout("MirrorBar")
                                                                end
                                                        },
                                                        time = {
                                                                name = "Time", type = 'range', min = 6, max = 32, step = 1,
                                                                desc = "Set the font size on the spell time.",
                                                                get = function() return self.db.profile.MirrorBar.timeSize end,
                                                                set = function(v)
                                                                        self.db.profile.MirrorBar.timeSize = v
                                                                        self:Layout("BREATH", "MirrorBar")
                                                                        self:Layout("EXHAUSTION", "MirrorBar")
                                                                        self:Layout("FEIGNDEATH", "MirrorBar")
                                                                end
                                                        },
                                                        delay = {
                                                                name = "Delay", type = 'range', min = 6, max = 32, step = 1,
                                                                desc = "Set the font size on the delay time.",
                                                                get = function() return self.db.profile.MirrorBar.delaySize end,
                                                                set = function(v)
                                                                        self.db.profile.MirrorBar.delaySize = v
                                                                        self:Layout("BREATH", "MirrorBar")
                                                                        self:Layout("EXHAUSTION", "MirrorBar")
                                                                        self:Layout("FEIGNDEATH", "MirrorBar")
                                                                end
                                                        }
                                                }
                                        }
                                }
                        },
                        colors = {
                                name = "Colors", type = 'group', order = 4,
                                desc = "Set the bar colors.",
                                args = {
                                        spell = {
                                                name = "Spell", type = 'color',
                                                desc = "Sets the color of the casting bars on spells.",
                                                get = function()
                                                        local v = self.db.profile.Colors.Casting
                                                        return v.r,v.g,v.b
                                                end,
                                                set = function(r,g,b) self.db.profile.Colors.Casting = {r=r,g=g,b=b} end
                                        },
                                        success = {
                                                name = "Success", type = 'color',
                                                desc = "Sets the color of the casting bars on succsessful casts.",
                                                get = function()
                                                        local v = self.db.profile.Colors.Complete
                                                        return v.r,v.g,v.b
                                                end,
                                                set = function(r,g,b) self.db.profile.Colors.Complete = {r=r,g=g,b=b} end
                                        },
                                        channel = {
                                                name = "Channel", type = 'color',
                                                desc = "Sets the color of the casting bars while channeling.",
                                                get = function()
                                                        local v = self.db.profile.Colors.Channel
                                                        return v.r,v.g,v.b
                                                end,
                                                set = function(r,g,b) self.db.profile.Colors.Channel = {r=r,g=g,b=b} end
                                        },
                                        failed = {
                                                name = "Failed", type = 'color',
                                                desc = "Sets the color of the casting bars on failed casts.",
                                                get = function()
                                                        local v = self.db.profile.Colors.Failed
                                                        return v.r,v.g,v.b
                                                end,
                                                set = function(r,g,b) self.db.profile.Colors.Failed = {r=r,g=g,b=b} end
                                        }
                                }
                        }
                }
        }
        
        self:RegisterDB("oCBDB")
        self:RegisterDefaults('profile', Default)
        
        self:RegisterChatCommand({ "/oCB"}, consoleOptions)
    
        self:SetDebugging(false)
end

function oCB:OnEnable()
        if not self.frames then self.frames = {} end
        
        self:Events()
        self:HideBlizzCB()
        
        self:CreateFramework("CastingBar", "oCBFrame")
        self:CreateFramework("BREATH", "oCBMirror1", "MirrorBar")
        self:CreateFramework("EXHAUSTION","oCBMirror2", "MirrorBar")
        self:CreateFramework("FEIGNDEATH","oCBMirror3", "MirrorBar")
end

function oCB:Events()
        self:RegisterEvent("SPELLCAST_START", "SpellStart")
        self:RegisterEvent("SPELLCAST_CHANNEL_START", "SpellChannelStart")
        self:RegisterEvent("SPELLCAST_CHANNEL_STOP", "SpellChannelStop")
        self:RegisterEvent("SPELLCAST_CHANNEL_UPDATE", "SpellChannelUpdate")
        
        self:RegisterEvent("MIRROR_TIMER_START")
        self:RegisterEvent("MIRROR_TIMER_PAUSE")
        self:RegisterEvent("MIRROR_TIMER_STOP")
        
        UIParent:UnregisterEvent("MIRROR_TIMER_START")
end

function oCB:updatePositions(n)
        if(self.db.profile.Pos[n]) then
                local z = self:Split(self.db.profile.Pos[n], " ")
                local s = self.frames[n]:GetEffectiveScale()
                
                self.frames[n]:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", z[1]/s, z[2]/s)
        elseif(self.frames[n]) then
                self.frames[n]:ClearAllPoints()
                self.frames[n]:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
        end
end

function oCB:savePosition()
        local f = self.frames[this.name]
        local x,y = f:GetLeft(), f:GetTop()
        local s = f:GetEffectiveScale()
        
        x,y = x*s,y*s
        
        self.db.profile.Pos[this.name] = x.." "..y
end

function oCB:Split(msg, char)
        local arr = { };
        while (string.find(msg, char) ) do
                local iStart, iEnd = string.find(msg, char);
                tinsert(arr, strsub(msg, 1, iStart-1));
                msg = strsub(msg, iEnd+1, strlen(msg));
        end
        if ( strlen(msg) > 0 ) then
                tinsert(arr, msg);
        end
        return arr;
end