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)