ESOUI SVN ZAMUnitFramesReactionColors

[/] [trunk/] [ZAM_UnitFrames/] [ZAM_UnitFrames.lua] - Rev 2

Go to most recent revision | Compare with Previous | Blame | View Log

--why did health bar show in combat? (while committing suicide)
--add "you have died" text to inside player frame

local wm = GetWindowManager()
local strformat = string.format
local db

--create these in the main chunk
local playerFrame = wm:CreateTopLevelWindow("ZAMUnitFrames_Player")
do
        playerFrame.health = wm:CreateControlFromVirtual("ZAMUnitFrames_PlayerHealth", playerFrame, "ZO_DefaultStatusBar")
        playerFrame.magicka = wm:CreateControlFromVirtual("ZAMUnitFrames_PlayerMagicka", playerFrame, "ZO_DefaultStatusBar")
        playerFrame.stamina = wm:CreateControlFromVirtual("ZAMUnitFrames_PlayerStamina", playerFrame, "ZO_DefaultStatusBar")
        playerFrame.health.text = wm:CreateControl("ZAMUnitFrames_PlayerHealthText", playerFrame, CT_LABEL)
        playerFrame.magicka.text = wm:CreateControl("ZAMUnitFrames_PlayerMagickaText", playerFrame, CT_LABEL)
        playerFrame.stamina.text = wm:CreateControl("ZAMUnitFrames_PlayerStaminaText", playerFrame, CT_LABEL)
end

local defaults = {
        flatBars = true,
        locked = true,
}

local function CreatePlayerFrame()
        --main frame
        playerFrame:SetDimensions(300, 54)
        if not db.playerFrame then
                db.playerFrame = {}
                db.playerFrame.point = {["a"]=BOTTOM, ["b"]=BOTTOM, ["x"]=0, ["y"]=-100}
        end
        local anchor = db.playerFrame.point
        playerFrame:SetAnchor(anchor.a, GuiRoot, anchor.b or anchor.a, anchor.x, anchor.y)
        playerFrame:SetDrawLayer(DL_BACKGROUND)
        playerFrame:SetMouseEnabled(true)
        playerFrame:SetMovable(not db.locked)
        playerFrame:SetClampedToScreen(true)
        playerFrame:SetHandler("OnMouseUp", function(self)
                        self:StopMovingOrResizing()
                        local _,a,_,b,x,y = self:GetAnchor()
                        --db[self:GetName()].point = {["a"]=a, ["b"]=b, ["x"]=x, ["y"]=y}
                        db.playerFrame.point = {["a"]=a, ["b"]=b, ["x"]=x, ["y"]=y}
                end)
        
        --border & background
        playerFrame.frameL = wm:CreateControlFromVirtual("ZAMUnitFrames_PlayerFrameL", playerFrame, "ZO_PlayerAttributeFrameLeft")
        playerFrame.frameL:SetDimensions(10, 65)
        playerFrame.frameR = wm:CreateControlFromVirtual("ZAMUnitFrames_PlayerFrameR", playerFrame, "ZO_PlayerAttributeFrameRight")
        playerFrame.frameR:SetDimensions(10, 65)
        playerFrame.frameC = wm:CreateControlFromVirtual("ZAMUnitFrames_PlayerFrameC", playerFrame, "ZO_PlayerAttributeFrameCenter")
        playerFrame.frameC:SetAnchor(TOPLEFT, playerFrame.frameL, TOPRIGHT, 0, 0)
        playerFrame.frameC:SetAnchor(BOTTOMRIGHT, playerFrame.frameR, BOTTOMLEFT, 0, 0)
        playerFrame.bg = wm:CreateControl("ZAMUnitFrames_PlayerBG", playerFrame, CT_TEXTURE)
        playerFrame.bg:SetAnchorFill(playerFrame)
        playerFrame.bg:SetColor(0, 0, 0, .5)
        
        --health bar
        playerFrame.health:SetAnchor(TOPLEFT, playerFrame, TOPLEFT, 1, 1)
        playerFrame.health:SetAnchor(TOPRIGHT, playerFrame, TOPRIGHT, -1, 1)
        playerFrame.health:SetHeight(20)
        playerFrame.health:SetMinMax(0, 100)
        playerFrame.health:SetValue(100)
        playerFrame.health.gloss:SetHidden(db.flatBars)
        playerFrame.health.text:SetFont("EsoUi\\Common\\Fonts\\Univers67.otf|36|soft-shadow-thin")
        playerFrame.health.text:SetAnchor(LEFT, playerFrame, RIGHT, 5, 0)
        playerFrame.health.text:SetText("100%")
        do
                local r1,g1,b1 = ZO_POWER_BAR_GRADIENT_COLORS[POWERTYPE_HEALTH][1]:UnpackRGBA()
                local r2,g2,b2 = ZO_POWER_BAR_GRADIENT_COLORS[POWERTYPE_HEALTH][2]:UnpackRGBA()
                playerFrame.health:SetGradientColors(r1, g1, b1, 1, r2, g2, b2, 1)
                playerFrame.health.text:SetColor(r2, g2, b2)
        end
                
        --magicka bar
        playerFrame.magicka:SetAnchor(TOPLEFT, playerFrame.health, BOTTOMLEFT, 0, 1)
        playerFrame.magicka:SetAnchor(TOPRIGHT, playerFrame.health, BOTTOMRIGHT, 0, 1)
        playerFrame.magicka:SetHeight(15)
        playerFrame.magicka:SetMinMax(0,100)
        playerFrame.magicka:SetValue(50)
        playerFrame.magicka.gloss:SetHidden(db.flatBars)        --for flat textures
        playerFrame.magicka.text:SetFont("EsoUi\\Common\\Fonts\\Univers67.otf|22|soft-shadow-thin")
        playerFrame.magicka.text:SetAnchor(TOPRIGHT, playerFrame, TOPLEFT, -5, 0)
        playerFrame.magicka.text:SetText("100%")
        do
                local r1,g1,b1 = ZO_POWER_BAR_GRADIENT_COLORS[POWERTYPE_MAGICKA][1]:UnpackRGBA()
                local r2,g2,b2 = ZO_POWER_BAR_GRADIENT_COLORS[POWERTYPE_MAGICKA][2]:UnpackRGBA()
                playerFrame.magicka:SetGradientColors(r1, g1, b1, 1, r2, g2, b2, 1)
                playerFrame.magicka.text:SetColor(r2, g2, b2)
        end
        
        --stamina bar
        playerFrame.stamina:SetAnchor(TOPLEFT, playerFrame.magicka, BOTTOMLEFT, 0, 1)
        playerFrame.stamina:SetAnchor(TOPRIGHT, playerFrame.magicka, BOTTOMRIGHT, 0, 1)
        playerFrame.stamina:SetHeight(15)
        playerFrame.stamina:SetMinMax(0,100)
        playerFrame.stamina:SetValue(75)
        playerFrame.stamina.gloss:SetHidden(db.flatBars)        --for flat textures
        playerFrame.stamina.text:SetFont("EsoUi\\Common\\Fonts\\Univers67.otf|22|soft-shadow-thick")
        playerFrame.stamina.text:SetAnchor(BOTTOMRIGHT, playerFrame, BOTTOMLEFT, -5, 0)
        playerFrame.stamina.text:SetText("100%")
        do
                local r1,g1,b1 = ZO_POWER_BAR_GRADIENT_COLORS[POWERTYPE_STAMINA][1]:UnpackRGBA()
                local r2,g2,b2 = ZO_POWER_BAR_GRADIENT_COLORS[POWERTYPE_STAMINA][2]:UnpackRGBA()
                playerFrame.stamina:SetGradientColors(r1, g1, b1, 1, r2, g2, b2, 1)
                playerFrame.stamina.text:SetColor(r2 +.05, g2 +.05, b2 +.05)
        end
end

local function InitializeBars()
        local curHealth, maxHealth, effMaxHealth = GetUnitPower("player", POWERTYPE_HEALTH)
        playerFrame.health:SetMinMax(0, effMaxHealth)
        playerFrame.health:SetValue(curHealth)
        local curMagicka, maxMagicka, effMaxMagicka = GetUnitPower("player", POWERTYPE_MAGICKA)
        playerFrame.magicka:SetMinMax(0, effMaxMagicka)
        playerFrame.magicka:SetValue(curMagicka)
        local curStamina, maxStamina, effMaxStamina = GetUnitPower("player", POWERTYPE_STAMINA)
        playerFrame.stamina:SetMinMax(0, effMaxStamina)
        playerFrame.stamina:SetValue(curStamina)
end

local function UnregisterAttributeBars()
        ZO_PlayerAttributeMagicka:UnregisterForEvent(EVENT_POWER_UPDATE)
        ZO_PlayerAttributeMagicka:UnregisterForEvent(EVENT_INTERFACE_SETTING_CHANGED)
        ZO_PlayerAttributeMagicka:UnregisterForEvent(EVENT_PLAYER_ACTIVATED)
        EVENT_MANAGER:UnregisterForUpdate("ZO_PlayerAttributeMagickaFadeUpdate")
        ZO_PlayerAttributeMagicka:SetHidden(true)
        
        ZO_PlayerAttributeStamina:UnregisterForEvent(EVENT_POWER_UPDATE)
        ZO_PlayerAttributeStamina:UnregisterForEvent(EVENT_INTERFACE_SETTING_CHANGED)
        ZO_PlayerAttributeStamina:UnregisterForEvent(EVENT_PLAYER_ACTIVATED)
        EVENT_MANAGER:UnregisterForUpdate("ZO_PlayerAttributeStaminaFadeUpdate")
        ZO_PlayerAttributeStamina:SetHidden(true)
        
        ZO_PlayerAttributeHealth:UnregisterForEvent(EVENT_POWER_UPDATE)
        ZO_PlayerAttributeHealth:UnregisterForEvent(EVENT_INTERFACE_SETTING_CHANGED)
        ZO_PlayerAttributeHealth:UnregisterForEvent(EVENT_PLAYER_ACTIVATED)
        EVENT_MANAGER:UnregisterForUpdate("ZO_PlayerAttributeHealthFadeUpdate")
        ZO_PlayerAttributeHealth:SetHidden(true)
        
end

local function SetUpDB()
        ZAM_UnitFramesDB = ZAM_UnitFramesDB or {}
        for k,v in pairs(defaults) do
            if type(ZAM_UnitFramesDB[k]) == "nil" then
                ZAM_UnitFramesDB[k] = v
            end
        end
        db = ZAM_UnitFramesDB
end

local function CreateOptions()
        local LAM = LibStub("LibAddonMenu-1.0")
        local zamPanel = LAM:CreateControlPanel("ZAM_ADDON_OPTIONS", "ZAM Addons")
        LAM:AddHeader(zamPanel, "ZAM_UnitFrames_Options_Header", "ZAM UnitFrames")
        LAM:AddCheckbox(zamPanel, "ZAM_UnitFrames_Options_Locked", "Lock Frames", "Lock the unit frames in place.",
                                        function() return db.locked end,
                                        function() db.locked = not db.locked playerFrame:SetMovable(not db.locked) end)
        LAM:AddCheckbox(zamPanel, "ZAM_UnitFrames_Options_Flat", "Flat Bar Texture", "Remove the gloss from the bar textures.",
                                        function() return db.flatBars end,
                                        function()
                                                db.flatBars = not db.flatBars
                                                playerFrame.health.gloss:SetHidden(db.flatBars)
                                                playerFrame.magicka.gloss:SetHidden(db.flatBars)
                                                playerFrame.stamina.gloss:SetHidden(db.flatBars)
                                        end)
end
        
playerFrame:RegisterForEvent(EVENT_ADD_ON_LOADED, function(event, addon)
                if addon == "ZAM_UnitFrames" then
                        SetUpDB()
                        CreatePlayerFrame()
                        InitializeBars()
                        UnregisterAttributeBars()
                        CreateOptions()
                        
                        playerFrame:UnregisterForEvent(EVENT_ADD_ON_LOADED)
                end
        end)
        
playerFrame:RegisterForEvent(EVENT_POWER_UPDATE, function(self, unitTag, powerIndex, powerType, powerValue, powerMax, powerEffectiveMax)
                if unitTag == "player" then
                        if powerType == POWERTYPE_MAGICKA then
                                ZO_StatusBar_SmoothTransition(playerFrame.magicka, powerValue, powerEffectiveMax)
                                playerFrame.magicka.text:SetText(strformat("%d%%", powerValue/powerEffectiveMax*100))
                        elseif powerType == POWERTYPE_STAMINA then
                                --playerFrame.stamina:SetValue(powerValue)
                                ZO_StatusBar_SmoothTransition(playerFrame.stamina, powerValue, powerEffectiveMax)
                                playerFrame.stamina.text:SetText(strformat("%d%%", powerValue/powerEffectiveMax*100))
                        elseif powerType == POWERTYPE_HEALTH then
                                --playerFrame.health:SetValue(powerValue)
                                ZO_StatusBar_SmoothTransition(playerFrame.health, powerValue, powerEffectiveMax)
                                playerFrame.health.text:SetText(strformat("%d%%", powerValue/powerEffectiveMax*100))
                        end
                end
        end)
        
        

Go to most recent revision | Compare with Previous | Blame