ESOUI SVN ZAMUnitFramesReactionColors

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

Compare with Previous | Blame | View Log

-- ZAM_UnitFrames © ZAM Network LLC
-- All Rights Reserved

--add "you have died" text to inside player frame?
--recreate the reticleover frame

local versionNo = "1.3"
local wm = GetWindowManager()
local strformat = string.format
local LAM = LibStub("LibAddonMenu-2.0")
local LMP = LibStub("LibMediaProvider-1.0")
local targetFrame, inCombat, db


--create these in the main chunk
local playerFrame = wm:CreateTopLevelWindow("ZAMUnitFrames_Player")
do
        playerFrame.health = wm:CreateControl("ZAMUnitFrames_PlayerHealth", playerFrame, CT_STATUSBAR)
        playerFrame.magicka = wm:CreateControl("ZAMUnitFrames_PlayerMagicka", playerFrame, CT_STATUSBAR)
        playerFrame.stamina = wm:CreateControl("ZAMUnitFrames_PlayerStamina", playerFrame, CT_STATUSBAR)
        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 = {
        locked = true,
        barTexture = "ESO Basic",
        font = "Arial Narrow",
        fontStyle = "soft-shadow-thin", --add an option for this
        border = "ESO Gold",
        borderSpacing = 4,
        borderSize = 32,
        targetReaction = false,
        combatFade = false,
}

local function SetFonts(frame)
        local fontConfig = "%s|%d|%s"
        local path = LMP:Fetch("font", db.font)
        local fstyle = db.fontStyle
        
        frame.health.text:SetFont(strformat(fontConfig, path, frame == playerFrame and 36 or 22, fstyle))
        if frame == playerFrame then
                frame.magicka.text:SetFont(strformat(fontConfig, path, 22, fstyle))
                frame.stamina.text:SetFont(strformat(fontConfig, path, 22, fstyle))
        else    --target frame
                frame.name:SetFont(strformat(fontConfig, path, 18, fstyle))
                frame.level:SetFont(strformat(fontConfig, path, 18, fstyle))
                frame.caption:SetFont(strformat(fontConfig, path, 18, fstyle))
        end
end

local function SetBarTextures(frame)
        local tex = LMP:Fetch("statusbar", db.barTexture)
        --local tex = [[LMP_MediaStash\statusbar\Glamour7]]
        if frame == playerFrame then
                frame.health:SetTexture(tex)
                frame.magicka:SetTexture(tex)
                frame.stamina:SetTexture(tex)
                frame.siege:SetTexture(tex)
                frame.werewolf:SetTexture(tex)
                frame.mount:SetTexture(tex)
        else    --target frame
                frame.health.barLeft:SetTexture(tex)
                frame.health.barRight:SetTexture(tex)
        end
end

local function BorderConfig(frame)
        local spacing = db.borderSpacing
        frame.bg:ClearAnchors()
        frame.bg:SetAnchor(TOPLEFT, frame, TOPLEFT, -(spacing), -(spacing))
        frame.bg:SetAnchor(BOTTOMRIGHT, frame, BOTTOMRIGHT, spacing, spacing)
        frame.bg:SetInsets(spacing, spacing, -(spacing), -(spacing))
        frame.bg:SetEdgeTexture(LMP:Fetch("border", db.border), 256, 32, db.borderSize)
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 CreatePlayerFrame()
        --main frame
        playerFrame:SetDimensions(300, 54)
        playerFrame:SetDrawLayer(DL_BACKGROUND)
        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:SetMouseEnabled(true)
        playerFrame:SetMovable(not db.locked)
        playerFrame:SetClampedToScreen(true)
        if db.combatFade then playerFrame:SetAlpha(0) end
        playerFrame:SetHandler("OnMouseUp", function(self)
                        self:StopMovingOrResizing()
                        local _,a,_,b,x,y = self:GetAnchor()
                        db.playerFrame.point = {["a"]=a, ["b"]=b, ["x"]=x, ["y"]=y}
                end)
        
        --border & background
        playerFrame.bg = wm:CreateControl("ZAMUnitFrames_PlayerBG", playerFrame, CT_BACKDROP)
        playerFrame.bg:SetCenterColor(0, 0, 0, .5)
        playerFrame.bg:SetEdgeColor(1, 1, 1, 1)
        BorderConfig(playerFrame)
        
        --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.text:SetAnchor(LEFT, playerFrame, RIGHT, 8, 0)
        playerFrame.health.text:SetText("100%")
        
        --siege health mini-bar
        playerFrame.siege = wm:CreateControl("ZAMUnitFrames_PlayerSiegeHealth", playerFrame.health, CT_STATUSBAR)
        playerFrame.siege:SetAnchor(BOTTOMLEFT, playerFrame.health, BOTTOMLEFT)
        playerFrame.siege:SetAnchor(BOTTOMRIGHT, playerFrame.health, BOTTOMRIGHT)
        playerFrame.siege:SetHeight(8)
        playerFrame.siege:SetMinMax(0,100)
        playerFrame.siege:SetHidden(true)
        --playerFrame.siege:SetValue(90)
        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)
                --playerFrame.siege:SetColor(r1-.1, g1-.1, b1-.1)
                playerFrame.siege:SetGradientColors(r1-.2, g1-.2, b1-.2, 1, r2-.2, g2-.2, b2-.2, 1)
        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.text:SetAnchor(TOPRIGHT, playerFrame, TOPLEFT, -8, 0)
        playerFrame.magicka.text:SetText("100%")
        
        --werewolf mini-bar
        playerFrame.werewolf = wm:CreateControl("ZAMUnitFrames_PlayerWerewolf", playerFrame.magicka, CT_STATUSBAR)
        playerFrame.werewolf:SetAnchor(BOTTOMLEFT, playerFrame.magicka, BOTTOMLEFT)
        playerFrame.werewolf:SetAnchor(BOTTOMRIGHT, playerFrame.magicka, BOTTOMRIGHT)
        playerFrame.werewolf:SetHeight(5)
        --playerFrame.mount:SetMinMax(0,100)
        playerFrame.werewolf:SetHidden(true)
        --playerFrame.werewolf:SetValue(70)
        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)
                --playerFrame.werewolf:SetColor(r1-.1, g1-.1, b1-.1)
                playerFrame.werewolf:SetGradientColors(r1-.2, g1-.2, b1-.2, 1, r2-.2, g2-.2, b2-.2, 1)
        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.text:SetAnchor(BOTTOMRIGHT, playerFrame, BOTTOMLEFT, -8, 0)
        playerFrame.stamina.text:SetText("100%")
        
        --mount stamina mini-bar
        playerFrame.mount = wm:CreateControl("ZAMUnitFrames_PlayerMountStamina", playerFrame.stamina, CT_STATUSBAR)
        playerFrame.mount:SetAnchor(BOTTOMLEFT, playerFrame.stamina, BOTTOMLEFT)
        playerFrame.mount:SetAnchor(BOTTOMRIGHT, playerFrame.stamina, BOTTOMRIGHT)
        playerFrame.mount:SetHeight(5)
        --playerFrame.mount:SetMinMax(0,100)
        playerFrame.mount:SetHidden(true)
        --playerFrame.mount:SetValue(70)
        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)
                --playerFrame.mount:SetColor(r1-.1, g1-.1, b1-.1)
                playerFrame.mount:SetGradientColors(r1-.2, g1-.2, b1-.2, 1, r2-.2, g2-.2, b2-.2, 1)
        end
        
        --set the fonts & bar textures
        SetFonts(playerFrame)
        SetBarTextures(playerFrame)
        
        --reparent & reuse warner frame/animations
        local healthwarner = ZO_PlayerAttributeHealthWarner
        playerFrame.health.warner = healthwarner
        healthwarner:SetParent(playerFrame.health)
        healthwarner:ClearAnchors()
        healthwarner:SetAnchor(TOPLEFT, playerFrame.health, TOPLEFT, -18, 0)
        healthwarner:SetAnchor(BOTTOMRIGHT, playerFrame.health, BOTTOMRIGHT, 18, 0)
        GetControl(healthwarner, "Left"):SetTextureCoords(.7578125, .5234375, 0, 1)
        GetControl(healthwarner, "Right"):SetTextureCoords(.5234375, .7578125, 0, 1)
        GetControl(healthwarner, "Left"):SetWidth(30)
        GetControl(healthwarner, "Right"):SetWidth(30)
        local magickawarner = ZO_PlayerAttributeMagickaWarner
        playerFrame.magicka.warner = magickawarner
        magickawarner:SetParent(playerFrame.magicka)
        magickawarner:ClearAnchors()
        magickawarner:SetAnchor(TOPLEFT, playerFrame.magicka, TOPLEFT, -18, 0)
        magickawarner:SetAnchor(BOTTOMRIGHT, playerFrame.magicka, BOTTOMRIGHT, 18, 0)
        GetControl(magickawarner, "Left"):SetTextureCoords(.7578125, .5234375, 0, 1)
        GetControl(magickawarner, "Right"):SetTextureCoords(.5234375, .7578125, 0, 1)
        GetControl(magickawarner, "Left"):SetWidth(30)
        GetControl(magickawarner, "Right"):SetWidth(30)
        local staminawarner = ZO_PlayerAttributeStaminaWarner
        playerFrame.stamina.warner = staminawarner
        staminawarner:SetParent(playerFrame.stamina)
        staminawarner:ClearAnchors()
        staminawarner:SetAnchor(TOPLEFT, playerFrame.stamina, TOPLEFT, -18, 0)
        staminawarner:SetAnchor(BOTTOMRIGHT, playerFrame.stamina, BOTTOMRIGHT, 18, 0)
        GetControl(staminawarner, "Left"):SetTextureCoords(.7578125, .5234375, 0, 1)
        GetControl(staminawarner, "Right"):SetTextureCoords(.5234375, .7578125, 0, 1)
        GetControl(staminawarner, "Left"):SetWidth(30)
        GetControl(staminawarner, "Right"):SetWidth(30)
        
        UnregisterAttributeBars()
end

local function TargetFrameTweaks()
        targetFrame = ZO_TargetUnitFramereticleover
        targetFrame.health = {}
        targetFrame.health.barLeft = ZO_TargetUnitFramereticleoverBarLeft
        targetFrame.health.barRight = ZO_TargetUnitFramereticleoverBarRight
        targetFrame.health.barRight.gloss:SetHidden(true)
        targetFrame.health.barLeft.gloss:SetHidden(true)
        targetFrame.health.text = wm:CreateControl("ZAMUnitFrames_TargetHealthText", targetFrame, CT_LABEL)
        targetFrame.health.text:SetAnchor(RIGHT, targetFrame, LEFT, -5, 0)
        targetFrame.health.text:SetText("100%")
        targetFrame.name = ZO_TargetUnitFramereticleoverName
        targetFrame.level = ZO_TargetUnitFramereticleoverLevel
        targetFrame.caption = ZO_TargetUnitFramereticleoverCaption
        
        if not db.targetFrame then
                db.targetFrame = {}
                db.targetFrame.point = {["a"] = TOP, ["b"] = TOP, ["x"] = 0, ["y"] = 88}
        end
        targetFrame:ClearAnchors()
        local anchor = db.targetFrame.point
        targetFrame:SetAnchor(anchor.a, GuiRoot, anchor.b, anchor.x, anchor.y)
        targetFrame.moverFrame = wm:CreateTopLevelWindow("ZAMUnitFrames_TargetMoverFrame")
        local moverFrame = targetFrame.moverFrame
        moverFrame:SetDrawLayer(DL_BACKGROUND)
        moverFrame:SetAnchor(anchor.a, GuiRoot, anchor.b, anchor.x, anchor.y)
        moverFrame:SetDimensions(280, 75)
        moverFrame.bg = wm:CreateControl("ZAMUnitFrames_TargetMoverFrameBG", moverFrame, CT_TEXTURE)
        moverFrame.bg:SetColor(1, 1, 1, .5)
        moverFrame.bg:SetAnchorFill(moverFrame)
        moverFrame:SetHidden(db.locked)
        moverFrame:SetMouseEnabled(true)
        moverFrame:SetMovable(not db.locked)
        moverFrame:SetClampedToScreen(true)
        moverFrame:SetHandler("OnMouseUp", function(self)
                        self:StopMovingOrResizing()
                        local _,a,_,b,x,y = self:GetAnchor()
                        db.targetFrame.point = {["a"] = a, ["b"] = b, ["x"] = x, ["y"] = y}
                        targetFrame:ClearAnchors()
                        targetFrame:SetAnchor(a, GuiRoot, b, x, y)
                end)    

        SetFonts(targetFrame)
        
        local function UpdateColor()
                if DoesUnitExist("reticleover") then
                        local curHealthT, maxHealthT, effMaxHealthT = GetUnitPower("reticleover", POWERTYPE_HEALTH)
                        targetFrame.health.text:SetText(strformat("%d%%", curHealthT/effMaxHealthT*100))
                        if db.targetReaction then
                                local r, g, b = GetUnitReactionColor("reticleover")
                                targetFrame.health.barLeft:SetGradientColors(r*.52, g*.73, b*.73, 1, r, g, b, 1)
                                targetFrame.health.barRight:SetGradientColors(r*.52, g*.73, b*.73, 1, r, g, b, 1)
                        end
                end
        end
        targetFrame.health.text:RegisterForEvent(EVENT_RETICLE_TARGET_CHANGED, UpdateColor)
        targetFrame.health.text:RegisterForEvent(EVENT_DISPOSITION_UPDATE, UpdateColor)
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)
        local curWerewolf, maxWerewolf, effMaxWerewolf = GetUnitPower("player", POWERTYPE_WEREWOLF)
        playerFrame.werewolf:SetMinMax(0, effMaxWerewolf)
        playerFrame.werewolf:SetValue(curWerewolf)
        local curMountSta, maxMountSta, effMaxMountSta = GetUnitPower("player", POWERTYPE_MOUNT_STAMINA)
        playerFrame.mount:SetMinMax(0, effMaxMountSta)
        playerFrame.mount:SetValue(curMountSta)
end

local function CombatFade(event, inCombatBool)  --make this fade in/out instead?
        if db.combatFade then
                inCombat = inCombatBool or inCombat
                local curHealth, maxHealth, effMaxHealth = GetUnitPower("player", POWERTYPE_HEALTH)
                local curMagicka, maxMagicka, effMaxMagicka = GetUnitPower("player", POWERTYPE_MAGICKA)
                if not inCombat and curHealth == effMaxHealth  and curMagicka == effMaxMagicka then
                        playerFrame:SetAlpha(0)
                else
                        playerFrame:SetAlpha(1)
                end
        end
end

local function UpdateSiegeHealthBar(event, unit)
        unit = unit or (IsGameCameraSiegeControlled() and "controlledsiege") or (IsPlayerEscortingRam() and "escortedram")
        if not DoesUnitExist("player") and (unit == "controlledsiege" or unit == "escortedram") then
                playerFrame.siege:SetHidden(false)
                local curHealth, maxHealth, effMaxHealth = GetUnitPower(unit, POWERTYPE_HEALTH)
                ZO_StatusBar_SmoothTransition(playerFrame.siege, curHealth, effMaxHealth)
        else
                playerFrame.siege:SetHidden(true)
        end
end

local function PowerUpdate(event, 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
                        ZO_StatusBar_SmoothTransition(playerFrame.stamina, powerValue, powerEffectiveMax)
                        playerFrame.stamina.text:SetText(strformat("%d%%", powerValue/powerEffectiveMax*100))
                elseif powerType == POWERTYPE_HEALTH then
                        ZO_StatusBar_SmoothTransition(playerFrame.health, powerValue, powerEffectiveMax)
                        playerFrame.health.text:SetText(strformat("%d%%", powerValue/powerEffectiveMax*100))
                elseif powerType == POWERTYPE_WEREWOLF then
                        ZO_StatusBar_SmoothTransition(playerFrame.werewolf, powerValue, powerEffectiveMax)
                elseif powerType == POWERTYPE_MOUNT_STAMINA then
                        ZO_StatusBar_SmoothTransition(playerFrame.mount, powerValue, powerEffectiveMax)
                end
                CombatFade()
        elseif unitTag == "reticleover" and powerType == POWERTYPE_HEALTH then
                targetFrame.health.text:SetText(strformat("%d%%", powerValue/powerEffectiveMax*100))
        elseif (unitTag == "controlledsiege" or unitTag == "escortedram") and powerType == POWERTYPE_HEALTH then        --does this event fire for these units?
                ZO_StatusBar_SmoothTransition(playerFrame.siege, powerValue, powerEffectiveMax)
        end
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 panelData = {
        type = "panel",
        name = "ZAM UnitFrames",
        displayName = "|t72:36:ZAM_Stats\\ZAM_Logo.dds|t UnitFrames",
        slashCommand = "/zamuf",
        registerForDefaults = true,
        author = "Seerah",
        version = versionNo,
}
local optionsData = {
        [1] = {
                type = "checkbox",
                name = "Lock Frames",
                tooltip = "Lock the unit frames in place.",
                getFunc = function() return db.locked end,
                setFunc = function(value)
                                                db.locked = value
                                                playerFrame:SetMovable(not db.locked)
                                                targetFrame.moverFrame:SetHidden(db.locked)
                                                targetFrame.moverFrame:SetMovable(not db.locked)
                                        end,
                default = defaults.locked
        },
        [2] = {
                type = "checkbox",
                name = "Target Reaction",
                tooltip = "Color the reticle target's healthbar by reaction.",
                getFunc = function() return db.targetReaction end,
                setFunc = function(value)
                                                db.targetReaction = value
                                                if not db.targetReaction then
                                                        targetFrame.health.barRight:SetGradientColors(114/255, 35/255, 35/255, 1, 218/255, 48/255, 48/255, 1)
                                                        targetFrame.health.barLeft:SetGradientColors(114/255, 35/255, 35/255, 1, 218/255, 48/255, 48/255, 1)
                                                end
                                        end,
                default = defaults.targetReaction
        },
        [3] = {
                type = "checkbox",
                name = "Show Only In Combat",
                tooltip = "Show the player frame only when in combat or when health or magicka aren't full.",
                getFunc = function() return db.combatFade end,
                setFunc = function(value)
                                                db.combatFade = value
                                                playerFrame:SetAlpha(db.combatFade and 0 or 1)
                                        end,
                default = defaults.combatFade
        },
        [4] = {
                type = "header",
                name = "Skinning Options",
        },
        [5] = {
                type = "dropdown",
                name = "Bar Texture",
                tooltip = "The texture to use for the status bars.",
                choices = LMP:List("statusbar"),
                getFunc = function() return db.barTexture end,
                setFunc = function(barTexture)
                                                db.barTexture = barTexture
                                                SetBarTextures(playerFrame)
                                        end,
                default = defaults.barTexture
        },
        [6] = {
                type = "dropdown",
                name = "Font",
                tooltip = "The font to use for the text.",
                choices = LMP:List("font"),
                getFunc = function() return db.font end,
                setFunc = function(font)
                                                db.font = font
                                                SetFonts(ZAMUnitFrames_Player)
                                        end,
                default = defaults.font
        },
        [7] = {
                type = "dropdown",
                name = "Border",
                tooltip = "The texture to use for the border.",
                choices = LMP:List("border"),
                getFunc = function() return db.border end,
                setFunc = function(border)
                                                db.border = border
                                                playerFrame.bg:SetEdgeTexture(LMP:Fetch("border", border), 256, 32, 40)
                                        end,
                default = defaults.border
        },
        [8] = {
                type = "slider",
                name = "Border Spacing",
                tooltip = "The distance between the outside edge of the border and the background of the frame.",
                min = 0,
                max = 20,
                step = 1,
                getFunc = function() return db.borderSpacing end,
                setFunc = function(val)
                                                db.borderSpacing = val
                                                BorderConfig(playerFrame)
                                        end,
                warning = "Each border is different in regards to what combination of spacing and size works best with it.  Play with the two sliders until you reach your desired result.",
                width = "half",
                default = defaults.borderSpacing,
        },
        [9] = {
                type = "slider",
                name = "Border Size",
                tooltip = "The width of the border.",
                min = 2,
                max = 64,
                step = 2,
                getFunc = function() return db.borderSize end,
                setFunc = function(val)
                                                db.borderSize = val
                                                BorderConfig(playerFrame)
                                        end,
                warning = "Each border is different in regards to what combination of spacing and size works best with it.  Play with the two sliders until you reach your desired result.",
                width = "half",
                default = defaults.borderSize,
        },
}

local function CreateOptions()
        LAM:RegisterAddonPanel("ZAMUnitFramesOptions", panelData)
        LAM:RegisterOptionControls("ZAMUnitFramesOptions", optionsData)
end
        
playerFrame:RegisterForEvent(EVENT_ADD_ON_LOADED, function(event, addon)
--playerFrame:RegisterForEvent(EVENT_PLAYER_ACTIVATED, function(event, addon)
                if addon == "ZAM_UnitFrames" then
                        SetUpDB()
                        CreatePlayerFrame()
                        TargetFrameTweaks()
                        InitializeBars()
                        CreateOptions()
                        
                        playerFrame:RegisterForEvent(EVENT_POWER_UPDATE, PowerUpdate)
                        playerFrame:RegisterForEvent(EVENT_PLAYER_COMBAT_STATE, CombatFade)
                        playerFrame:RegisterForEvent(EVENT_UNIT_CREATED, UpdateSiegeHealthBar)
                        playerFrame:RegisterForEvent(EVENT_BEGIN_SIEGE_CONTROL, UpdateSiegeHealthBar)
                        playerFrame:RegisterForEvent(EVENT_END_SIEGE_CONTROL, UpdateSiegeHealthBar)
                        playerFrame:RegisterForEvent(EVENT_LEAVE_RAM_ESCORT, UpdateSiegeHealthBar)
                        playerFrame:RegisterForEvent(EVENT_WEREWOLF_STATE_CHANGED, function(event, isWerewolf)
                                        playerFrame.werewolf:SetHidden(not isWerewolf)
                                end)
                        playerFrame:RegisterForEvent(EVENT_MOUNTED_STATE_CHANGED, function(event, isMounted)
                                        playerFrame.mount:SetHidden(not isMounted)
                                end)
                        
                        
                        playerFrame:UnregisterForEvent(EVENT_ADD_ON_LOADED)
                        --playerFrame:UnregisterForEvent(EVENT_PLAYER_ACTIVATED)
                end
        end)
        
        

Compare with Previous | Blame