From 2fd3a08ea338ab90ca1e6c7f95b11db45625ac5b Mon Sep 17 00:00:00 2001 From: Eric Mauser Date: Mon, 2 May 2016 20:47:00 +0200 Subject: [PATCH] moved to github, reset trashy history --- env/colors.lua | 18 ++ env/locales.lua | 73 +++++++ fonts/arial.ttf | Bin 0 -> 209700 bytes fonts/combat_font.ttf | Bin 0 -> 163840 bytes fonts/homespun.ttf | Bin 0 -> 21196 bytes img/bar.tga | Bin 0 -> 247 bytes img/bg.tga | Bin 0 -> 236 bytes img/border.tga | Bin 0 -> 2092 bytes img/border_col.tga | Bin 0 -> 2092 bytes img/gitter.tga | Bin 0 -> 119 bytes img/minimap.tga | Bin 0 -> 236 bytes modules/actionbar.lua | 330 +++++++++++++++++++++++++++++++ modules/autoshift.lua | 92 +++++++++ modules/bags.lua | 318 +++++++++++++++++++++++++++++ modules/chat.lua | 354 +++++++++++++++++++++++++++++++++ modules/cooldown.lua | 70 +++++++ modules/font.lua | 47 +++++ modules/minimap.lua | 32 +++ modules/panel.lua | 129 ++++++++++++ modules/pet.lua | 278 ++++++++++++++++++++++++++ modules/player.lua | 361 +++++++++++++++++++++++++++++++++ modules/skin.lua | 63 ++++++ modules/target.lua | 417 +++++++++++++++++++++++++++++++++++++++ modules/targettarget.lua | 118 +++++++++++ modules/uf_tukui.lua | 25 +++ modules/xpbar.lua | 137 +++++++++++++ pfUI.lua | 97 +++++++++ pfUI.toc | 28 +++ 28 files changed, 2987 insertions(+) create mode 100644 env/colors.lua create mode 100644 env/locales.lua create mode 100644 fonts/arial.ttf create mode 100755 fonts/combat_font.ttf create mode 100644 fonts/homespun.ttf create mode 100644 img/bar.tga create mode 100644 img/bg.tga create mode 100644 img/border.tga create mode 100644 img/border_col.tga create mode 100644 img/gitter.tga create mode 100644 img/minimap.tga create mode 100644 modules/actionbar.lua create mode 100644 modules/autoshift.lua create mode 100644 modules/bags.lua create mode 100644 modules/chat.lua create mode 100644 modules/cooldown.lua create mode 100644 modules/font.lua create mode 100644 modules/minimap.lua create mode 100644 modules/panel.lua create mode 100644 modules/pet.lua create mode 100644 modules/player.lua create mode 100644 modules/skin.lua create mode 100644 modules/target.lua create mode 100644 modules/targettarget.lua create mode 100644 modules/uf_tukui.lua create mode 100644 modules/xpbar.lua create mode 100644 pfUI.lua create mode 100644 pfUI.toc diff --git a/env/colors.lua b/env/colors.lua new file mode 100644 index 00000000..7bd6c3b5 --- /dev/null +++ b/env/colors.lua @@ -0,0 +1,18 @@ +ManaBarColor = {} +ManaBarColor[0] = { r = 0.00, g = 0.00, b = 1.00, prefix = TEXT(MANA) }; +ManaBarColor[1] = { r = 1.00, g = 0.00, b = 0.00, prefix = TEXT(RAGE_POINTS) }; +ManaBarColor[2] = { r = 1.00, g = 0.50, b = 0.25, prefix = TEXT(FOCUS_POINTS) }; +ManaBarColor[3] = { r = 1.00, g = 1.00, b = 0.00, prefix = TEXT(ENERGY_POINTS) }; +ManaBarColor[4] = { r = 0.00, g = 1.00, b = 1.00, prefix = TEXT(HAPPINESS_POINTS) }; + +RAID_CLASS_COLORS = { + ["WARRIOR"] = { r = 0.78, g = 0.61, b = 0.43, colorStr = "ffc79c6e" }, + ["MAGE"] = { r = 0.41, g = 0.8, b = 0.94, colorStr = "ff69ccf0" }, + ["ROGUE"] = { r = 1, g = 0.96, b = 0.41, colorStr = "fffff569" }, + ["DRUID"] = { r = 1, g = 0.49, b = 0.04, colorStr = "ffff7d0a" }, + ["HUNTER"] = { r = 0.67, g = 0.83, b = 0.45, colorStr = "ffabd473" }, + ["SHAMAN"] = { r = 0.14, g = 0.35, b = 1.0, colorStr = "ff0070de" }, + ["PRIEST"] = { r = 1, g = 1, b = 1, colorStr = "ffffffff" }, + ["WARLOCK"] = { r = 0.58, g = 0.51, b = 0.79, colorStr = "ff9482c9" }, + ["PALADIN"] = { r = 0.96, g = 0.55, b = 0.73, colorStr = "fff58cba" } +} diff --git a/env/locales.lua b/env/locales.lua new file mode 100644 index 00000000..2c13279b --- /dev/null +++ b/env/locales.lua @@ -0,0 +1,73 @@ +pfLocaleClass = { + ["enGB"] = { + ["Warlock"] = "WARLOCK", + ["Warrior"] = "WARRIOR", + ["Hunter"] = "HUNTER", + ["Mage"] = "MAGE", + ["Priest"] = "PRIEST", + ["Druid"] = "DRUID", + ["Paladin"] = "PALADIN", + ["Shaman"] = "SHAMAN", + ["Rogue"] = "ROGUE", + }, + + ["deDE"] = { + ["Hexenmeister"] = "WARLOCK", + ["Krieger"] = "WARRIOR", + ["Jäger"] = "HUNTER", + ["Magier"] = "MAGE", + ["Priester"] = "PRIEST", + ["Druide"] = "DRUID", + ["Paladin"] = "PALADIN", + ["Schamane"] = "SHAMAN", + ["Schurke"] = "ROGUE", + }, + + ["frFR"] = { + ["D\195\169moniste"] = "WARLOCK", + ["Guerrier"] = "WARRIOR", + ["Chasseur"] = "HUNTER", + ["Mage"] = "MAGE", + ["Pr\195\170tre"] = "PRIEST", + ["Druide"] = "DRUID", + ["Paladin"] = "PALADIN", + ["Chaman"] = "SHAMAN", + ["Voleur"] = "ROGUE", + }, + + ["zhCN"] = { + ["术士"] = "WARLOCK", + ["战士"] = "WARRIOR", + ["猎人"] = "HUNTER", + ["法师"] = "MAGE", + ["牧师"] = "PRIEST", + ["德鲁伊"] = "DRUID", + ["圣骑士"] = "PALADIN", + ["萨满祭司"] = "SHAMAN", + ["盗贼"] = "ROGUE", + }, + + ["zhTW"] = { + ["術士"] = "WARLOCK", + ["戰士"] = "WARRIOR", + ["獵人"] = "HUNTER", + ["法師"] = "MAGE", + ["牧師"] = "PRIEST", + ["德魯伊"] = "DRUID", + ["聖騎士"] = "PALADIN", + ["薩滿"] = "SHAMAN", + ["盜賊"] = "ROGUE", + }, + + ["koKR"] = { + ["흑마법사"] = "WARLOCK", + ["전사"] = "WARRIOR", + ["사냥꾼"] = "HUNTER", + ["마법사"] = "MAGE", + ["사제"] = "PRIEST", + ["드루이드"] = "DRUID", + ["성기사"] = "PALADIN", + ["주술사"] = "SHAMAN", + ["도적"] = "ROGUE", + } +} diff --git a/fonts/arial.ttf b/fonts/arial.ttf new file mode 100644 index 0000000000000000000000000000000000000000..42237fc66f9f0d4a2f58b520e93b86db1f59010d GIT binary patch literal 209700 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

    v^@Yy`^aR5l9MTce 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

    vtDy-wP_wb{E#vNl=<|7v=wLu!7Fq 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 anVGD&YcqkZRoA`4rR-;mRNTdl-tiw&g|9{c literal 0 HcmV?d00001 diff --git a/fonts/homespun.ttf b/fonts/homespun.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2f3eb9ec2fa0930bab5a276e96df5efeb5d5fed2 GIT binary patch literal 21196 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 OfzPAgpD{FFss9W9#4yqT literal 0 HcmV?d00001 diff --git a/img/bar.tga b/img/bar.tga new file mode 100644 index 0000000000000000000000000000000000000000..0144dd0e83d189570313dce331f2b463d93514c1 GIT binary patch literal 247 zcmXw!Z3@CL5Ja~Xp?C@}ptn#ch=N~uomjk13kf7(3MnLzfVtC{Rl4wY-^{-yTG2cW zHMDLP!_cGe3w(zGf<>;N;{)!7vG^8n~XppdaK0O7KwkKgj*$ zU|5(9M*jodh85sTe?SdHrvsRuL3&{9!Ib{7dLAf<&;KAfVlc9wk=cX6|I~6nx#0)X zHxT6?C@zS_urv!&kHm&KpAe0#2hJYI_y_rcR16C%nE#1MJ5WEu{fr!b1Lc31KggwF g{s-zO79jf{tS2NW)HTdA*wf!nH^R-+$5oF30RNp9FymmbKMh7mOcJ5Wnq z%cn8MI7;;1qe#xVnWHe>Ntzn;(!($Q@BGq#j$>vu@^f#CwzhvPFz*4FMT5Mi{a=LV zk8Au=v$$r~c@6wq^`ARG=t}(m 11 then + frame = "BankFrame" + container = -1 + else + frame = "ContainerFrame" .. j + container = j - 1 + end + for i=1, GetContainerNumSlots(container) do + getglobal(frame .. "Item" .. i):SetAlpha(1) + end + end + + pfUI.bag.money:Show() + end) + +pfUI.bag.search.edit:SetPoint("TOPLEFT", pfUI.bag.search, "TOPLEFT", pfUI.config.bars.border*2, 0) +pfUI.bag.search.edit:SetPoint("BOTTOMRIGHT", pfUI.bag.search, "BOTTOMRIGHT", -pfUI.config.bars.border*2, 0) + +pfUI.bag.search.edit:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 10, "OUTLINE") +pfUI.bag.search.edit:SetAutoFocus(false) +pfUI.bag.search.edit:SetText("Search") +pfUI.bag.search.edit:SetTextColor(.5,.5,.5,1) +pfUI.bag.search.edit:SetScript("OnTextChanged", function(self) + if pfUI.bag.search.edit:GetText() == "Search" then return end + for j=1, 12 do + + local frame, container = nil + if j > 11 then + frame = "BankFrame" + container = -1 + else + frame = "ContainerFrame" .. j + container = j - 1 + end + + for i=1, GetContainerNumSlots(container) do + local texture, itemCount, locked, quality, readable = GetContainerItemInfo(container, i); + if itemCount then + local itemLink = GetContainerItemLink(container, i); + local itemstring = string.sub(itemLink, string.find(itemLink, "%[")+1, string.find(itemLink, "%]")-1); + if strfind(strlower(itemstring), strlower(pfUI.bag.search.edit:GetText())) then + getglobal(frame .. "Item" .. i):SetAlpha(1) + else + getglobal(frame .. "Item" .. i):SetAlpha(.25) + end + end + end + end + end) + +pfUI.bag.money = CreateFrame("Frame", "pfUIBagsMoney", pfUI.bag, "SmallMoneyFrameTemplate") +pfUI.bag.money:ClearAllPoints() +pfUI.bag.money:SetPoint("TOPRIGHT", pfUI.bag, "TOPRIGHT", -13, -6) +pfUIBagsMoneyGoldButton:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 10, "OUTLINE") +for i,v in ipairs({pfUIBagsMoneyGoldButton:GetRegions()}) do if i == 1 then v:SetHeight(10); v:SetWidth(10) end end +pfUIBagsMoneySilverButton:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 10, "OUTLINE") +for i,v in ipairs({pfUIBagsMoneySilverButton:GetRegions()}) do if i == 1 then v:SetHeight(10); v:SetWidth(10) end end +pfUIBagsMoneyCopperButton:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 10, "OUTLINE") +for i,v in ipairs({pfUIBagsMoneyCopperButton:GetRegions()}) do if i == 1 then v:SetHeight(10); v:SetWidth(10) end end + +pfUI.bag:RegisterEvent("BAG_UPDATE"); +pfUI.bag:RegisterEvent("BAG_CLOSED"); +pfUI.bag:RegisterEvent("BAG_OPEN"); +pfUI.bag:RegisterEvent("BAG_UPDATE_COOLDOWN"); +pfUI.bag:RegisterEvent("ITEM_LOCK_CHANGED"); +pfUI.bag:RegisterEvent("UPDATE_INVENTORY_ALERTS") +pfUI.bag:SetScript("OnEvent", function() + local x = -1 + local y = 0 + local x_max = 10 + + local button_size = (this:GetWidth() - pfUI.config.bars.border*3) / x_max - pfUI.config.bars.border + + for j=1, 5 do + for i=1, GetContainerNumSlots(j-1) do + x = x + 1 + if x >= x_max then y = y + 1; x = 0 end + + getglobal("ContainerFrame" .. j).size = GetContainerNumSlots(j-1) + f = getglobal("ContainerFrame" .. j .. "Item" .. i) + f:SetParent(pfUI.bag[j]) + f:SetID(i) + f:SetPoint("TOPLEFT", pfUI.bag, "TOPLEFT", pfUI.config.bars.border*2 + x*button_size + x*pfUI.config.bars.border, -pfUI.config.bars.border*2 - y*button_size - y * pfUI.config.bars.border - 17) + f:Show() + f:SetHeight(button_size) + f:SetWidth(button_size) + local texture, itemCount, locked, quality, readable = GetContainerItemInfo(j-1, i); + f:SetNormalTexture(nil) + + f:SetBackdrop( + { bgFile = texture, tile = false, tileSize = pfUI.config.unitframes.buff_size, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border_col", edgeSize = 8, + insets = { left = 0, right = 0, top = 0, bottom = 0} + }) + if quality and quality > 1 then + f:SetBackdropBorderColor(GetItemQualityColor(quality)) + else + f:SetBackdropBorderColor(.3,.3,.3,1) + end + + SetItemButtonCount(getglobal("ContainerFrame" .. j .. "Item" .. i), itemCount); + if ( texture ) then + local cooldown = getglobal(getglobal("ContainerFrame" .. j .. "Item" .. i):GetName().."Cooldown"); + local start, duration, enable = GetContainerItemCooldown(j-1, getglobal("ContainerFrame" .. j .. "Item" .. i):GetID()); + CooldownFrame_SetTimer(cooldown, start, duration, enable); + if ( duration > 0 and enable == 0 ) then + SetItemButtonTextureVertexColor(button, 0.4, 0.4, 0.4); + end + getglobal("ContainerFrame" .. j .. "Item" .. i .. "Cooldown"):Show(); + else + getglobal("ContainerFrame" .. j .. "Item" .. i .. "Cooldown"):Hide(); + end + + getglobal("ContainerFrame" .. j .. "Item" .. i .. "Count"):SetPoint("BOTTOMLEFT", 0,0) + getglobal("ContainerFrame" .. j .. "Item" .. i .. "Count"):SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") + + for i,v in ipairs({f:GetRegions()}) do + -- 2 is stack count + if i == 4 then v:SetAlpha(0) end + end + end + end + y = y + 1 + pfUI.bag:SetHeight( y * button_size + y * pfUI.config.bars.border + pfUI.config.bars.border*3 + 17 + 17) + end) + +pfUI.bank:RegisterEvent("BAG_UPDATE"); +pfUI.bank:RegisterEvent("BANKFRAME_OPENED"); +pfUI.bank:RegisterEvent("BANKFRAME_CLOSED"); +pfUI.bank:RegisterEvent("BAG_UPDATE_COOLDOWN"); +pfUI.bank:RegisterEvent("ITEM_LOCK_CHANGED"); +pfUI.bank:RegisterEvent("UPDATE_INVENTORY_ALERTS") +pfUI.bank:RegisterEvent("BANKFRAME_OPENED"); +pfUI.bank:RegisterEvent("PLAYERBANKSLOTS_CHANGED"); +pfUI.bank:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED"); +pfUI.bank:SetScript("OnEvent", function() + BankFrame:SetWidth(.1) + BankFrame:SetHeight(.1) + BankFrame:SetAlpha(0) + + if event == "BANKFRAME_OPENED" then pfUI.bank:Show(); pfUI.bag:Show() end + if event == "BANKFRAME_CLOSED" then pfUI.bank:Hide(); HideUIPanel(this) end + + local x = -1 + local y = 0 + local x_max = 10 + + local button_size = (this:GetWidth() - pfUI.config.bars.border*3) / x_max - pfUI.config.bars.border + + for j=5, 11 do + local frame, container = nil + if j == 5 then + frame = "BankFrame" + container = -1 + else + frame = "ContainerFrame" .. j + container = j - 1 + end + + for i=1, GetContainerNumSlots(container) do + x = x + 1 + if x >= x_max then y = y + 1; x = 0 end + getglobal(frame).size = GetContainerNumSlots(j-1) + f = getglobal(frame .. "Item" .. i) + if j == 5 then f:SetParent(pfUI.bank[12]) else f:SetParent(pfUI.bank[j]) end + f:Show() + f:SetID(i) + f:SetPoint("TOPLEFT", pfUI.bank, "TOPLEFT", pfUI.config.bars.border*2 + x*button_size + x*pfUI.config.bars.border, -pfUI.config.bars.border*2 - y*button_size - y * pfUI.config.bars.border) + f:SetAlpha(1) + f:SetHeight(button_size) + f:SetWidth(button_size) + local texture, itemCount, locked, quality, readable = GetContainerItemInfo(container, i); + f:SetNormalTexture(nil) + + f:SetBackdrop( + { bgFile = texture, tile = false, tileSize = pfUI.config.unitframes.buff_size, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border_col", edgeSize = 8, + insets = { left = 0, right = 0, top = 0, bottom = 0} + }) + if quality and quality > 1 then + f:SetBackdropBorderColor(GetItemQualityColor(quality)) + else + f:SetBackdropBorderColor(.3,.3,.3,1) + end + + SetItemButtonCount(getglobal(frame .. "Item" .. i), itemCount); + if ( texture ) then + local cooldown = getglobal(getglobal(frame .. "Item" .. i):GetName().."Cooldown"); + if cooldown then + local start, duration, enable = GetContainerItemCooldown(container, getglobal(frame .. "Item" .. i):GetID()); + CooldownFrame_SetTimer(cooldown, start, duration, enable); + if ( duration > 0 and enable == 0 ) then + SetItemButtonTextureVertexColor(button, 0.4, 0.4, 0.4); + end + end + end + + getglobal(frame .. "Item" .. i .. "Count"):SetPoint("BOTTOMLEFT", 0,0) + getglobal(frame .. "Item" .. i .. "Count"):SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") + + for i,v in ipairs({f:GetRegions()}) do + -- 2 is stack count + if i == 4 then v:SetAlpha(0) end + if j == 5 and i == 1 then v:SetAlpha(0) end + + end + end + end + y = y + 1 + pfUI.bank:SetHeight( y * button_size + y * pfUI.config.bars.border + pfUI.config.bars.border*3 + 17) + end) diff --git a/modules/chat.lua b/modules/chat.lua new file mode 100644 index 00000000..39a0f936 --- /dev/null +++ b/modules/chat.lua @@ -0,0 +1,354 @@ +pfUI.chat = CreateFrame("Frame",nil,UIParent) + +pfUI.chat.left = CreateFrame("Frame", "leftChat", UIParent) +pfUI.chat.left:SetFrameStrata("BACKGROUND") +pfUI.chat.left:SetWidth(350) +pfUI.chat.left:SetHeight(150) +pfUI.chat.left:SetPoint("BOTTOMLEFT", 5,5) +pfUI.chat.left:SetBackdrop(pfUI.backdrop) +pfUI.chat.left:SetBackdropColor(0,0,0,.75) + +pfUI.chat.left.panelTop = CreateFrame("Frame", "leftChatPanelTop", pfUI.chat.left) +pfUI.chat.left.panelTop:ClearAllPoints() +pfUI.chat.left.panelTop:SetHeight(19) +pfUI.chat.left.panelTop:SetPoint("TOPLEFT", pfUI.chat.left, "TOPLEFT", 2, -2) +pfUI.chat.left.panelTop:SetPoint("TOPRIGHT", pfUI.chat.left, "TOPRIGHT", -2, -2) +pfUI.chat.left.panelTop:SetBackdrop(pfUI.backdrop) +pfUI.chat.left.panelTop:SetBackdropColor(0,0,0,.75) + +pfUI.chat.right = CreateFrame("Frame", "leftChat", UIParent) +pfUI.chat.right:SetFrameStrata("BACKGROUND") +pfUI.chat.right:SetWidth(350) +pfUI.chat.right:SetHeight(150) +pfUI.chat.right:SetPoint("BOTTOMRIGHT", -5,5) +pfUI.chat.right:SetBackdrop(pfUI.backdrop) +pfUI.chat.right:SetBackdropColor(0,0,0,.75) + +pfUI.chat.right.panelTop = CreateFrame("Frame", "rightChatPanelTop", pfUI.chat.right) +pfUI.chat.right.panelTop:ClearAllPoints() +pfUI.chat.right.panelTop:SetHeight(19) +pfUI.chat.right.panelTop:SetPoint("TOPLEFT", pfUI.chat.right, "TOPLEFT", 2, -2) +pfUI.chat.right.panelTop:SetPoint("TOPRIGHT", pfUI.chat.right, "TOPRIGHT", -2, -2) +pfUI.chat.right.panelTop:SetBackdrop(pfUI.backdrop) +pfUI.chat.right.panelTop:SetBackdropColor(0,0,0,.75) + +pfUI.chat:RegisterEvent("PLAYER_ENTERING_WORLD") +pfUI.chat:RegisterEvent("UI_SCALE_CHANGED") +pfUI.chat:RegisterEvent("FRIENDLIST_UPDATE") +pfUI.chat:RegisterEvent("GUILD_ROSTER_UPDATE") +pfUI.chat:RegisterEvent("RAID_ROSTER_UPDATE") +pfUI.chat:RegisterEvent("PARTY_MEMBERS_CHANGED") +pfUI.chat:RegisterEvent("PLAYER_TARGET_CHANGED") +pfUI.chat:RegisterEvent("WHO_LIST_UPDATE") +pfUI.chat:RegisterEvent("CHAT_MSG_SYSTEM") + +pfUI.chat:SetScript("OnEvent", function() + if event == "PLAYER_ENTERING_WORLD" or event == "UI_SCALE_CHANGED" then + for i,v in ipairs({ChatFrameMenuButton:GetRegions()}) do + v:SetAllPoints(ChatFrameMenuButton) + local _, class = UnitClass("player") + v:SetTexture(.5,.5,.5, 1) + v:SetVertexColor(RAID_CLASS_COLORS[class].r + .3 * .5, RAID_CLASS_COLORS[class].g +.3 * .5, RAID_CLASS_COLORS[class].b +.3 * .5,1) + end + + pfUI.chat.setupPositions() + pfUI.chat.setupChannels() + + for i=1, NUM_CHAT_WINDOWS do + for j,v in ipairs({getglobal("ChatFrame" .. i .. "Tab"):GetRegions()}) do + if j==5 then v:SetTexture(0,0,0,0) end + end + + local _, relativeTo = getglobal("ChatFrame" .. i):GetPoint(1) + getglobal("ChatFrame" .. i .. "Tab"):SetParent(pfUI.chat.left.panelTop) + getglobal("ChatFrame" .. i .. "ResizeBottom"):Hide() + + if relativeTo == pfUI.chat.left then + getglobal("ChatFrame" .. i .. "Tab"):SetParent(pfUI.chat.left.panelTop) + getglobal("ChatFrame" .. i):SetParent(pfUI.chat.left.panelTop) + elseif relativeTo == pfUI.chat.right then + getglobal("ChatFrame" .. i .. "Tab"):SetParent(pfUI.chat.right.panelTop) + getglobal("ChatFrame" .. i):SetParent(pfUI.chat.right.panelTop) + end + + getglobal("ChatFrame" .. i .. "TabText"):SetJustifyV("TOP") + getglobal("ChatFrame" .. i .. "TabLeft"):SetAlpha(0) + getglobal("ChatFrame" .. i .. "TabMiddle"):SetAlpha(0) + getglobal("ChatFrame" .. i .. "TabRight"):SetAlpha(0) + getglobal("ChatFrame" .. i .. "TabFlash"):SetAlpha(0) + local _, class = UnitClass("player") + getglobal("ChatFrame" .. i .. "TabText"):SetTextColor(RAID_CLASS_COLORS[class].r + .3 * .5, RAID_CLASS_COLORS[class].g + .3 * .5, RAID_CLASS_COLORS[class].b + .3 * .5, 1) + getglobal("ChatFrame" .. i .. "TabText"):SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") + + if getglobal("ChatFrame" .. i).isDocked or getglobal("ChatFrame" .. i):IsVisible() then + getglobal("ChatFrame" .. i .. "Tab"):Show() + end + + local cf = getglobal("ChatFrame" .. i) + cf:EnableMouseWheel(true) + cf:SetScript("OnMouseWheel", function() + if (arg1 > 0) then + if IsShiftKeyDown() then + cf:ScrollToTop() + else + cf:ScrollUp() + end + elseif (arg1 < 0) then + if IsShiftKeyDown() then + cf:ScrollToBottom() + else + cf:ScrollDown() + end + end + end) + end + + elseif event == "FRIENDLIST_UPDATE" or event == "PLAYER_ENTERING_WORLD" then + local Name, Class, Level + for i = 1, GetNumFriends() do + Name, Level, Class = GetFriendInfo(i) + if pfLocaleClass[GetLocale()] and pfLocaleClass[GetLocale()][Class] then + Class = pfLocaleClass[GetLocale()][Class] + end + pfUI.playerDB[Name] = { class = Class, level = Level } + end + elseif event == "GUILD_ROSTER_UPDATE" or event == "PLAYER_ENTERING_WORLD" then + local Name, Class, Level + for i = 1, GetNumGuildMembers() do + Name, _, _, Level, Class = GetGuildRosterInfo(i) + if pfLocaleClass[GetLocale()] and pfLocaleClass[GetLocale()][Class] then + Class = pfLocaleClass[GetLocale()][Class] + end + pfUI.playerDB[Name] = { class = Class, level = Level } + end + + elseif event == "RAID_ROSTER_UPDATE" or event == "PLAYER_ENTERING_WORLD" then + local Name, Class, SubGroup, Level + for i = 1, GetNumRaidMembers() do + Name, _, SubGroup, Level, Class = GetRaidRosterInfo(i) + if pfLocaleClass[GetLocale()] and pfLocaleClass[GetLocale()].Class then + Class = pfLocaleClass[GetLocale()][Class] + end + pfUI.playerDB[Name] = { class = Class, level = Level } + end + + elseif event == "PARTY_MEMBERS_CHANGED" or event == "PLAYER_ENTERING_WORLD" then + local Class, Unit + for i = 1, GetNumPartyMembers() do + Unit = "party" .. i + _, Class = UnitClass(Unit) + pfUI.playerDB[UnitName(Unit)] = { class = Class, level = UnitLevel(Unit) } + end + + elseif event == "PLAYER_TARGET_CHANGED" then + local Class + if not UnitIsPlayer("target") or not UnitIsFriend("player", "target") then + return + end + _, Class = UnitClass("target") + pfUI.playerDB[UnitName("target")] = { class = Class, level = UnitLevel("target") } + + elseif event == "WHO_LIST_UPDATE" or event == "CHAT_MSG_SYSTEM" then + local Name, Class, Level + for i = 1, GetNumWhoResults() do + Name, _, Level, _, Class, _ = GetWhoInfo(i) + if pfLocaleClass[GetLocale()] and pfLocaleClass[GetLocale()][Class] then + Class = pfLocaleClass[GetLocale()][Class] + end + pfUI.playerDB[Name] = { class = Class, level = Level } + end + end + end) + +Hook_ChatFrame_OnUpdate = ChatFrame_OnUpdate +function ChatFrame_OnUpdate (arg1) + for i=1, NUM_CHAT_WINDOWS do + getglobal("ChatFrame" .. i .. "UpButton"):Hide() + getglobal("ChatFrame" .. i .. "DownButton"):Hide() + getglobal("ChatFrame" .. i .. "BottomButton"):Hide() + end + Hook_ChatFrame_OnUpdate(arg1) +end + +pfUI.chat.setupPositions = function () + -- set position of Main Window + ChatFrame1:ClearAllPoints() + ChatFrame1:SetPoint("TOPLEFT", pfUI.chat.left ,"TOPLEFT", 5, -25) + ChatFrame1:SetPoint("BOTTOMRIGHT", pfUI.chat.left ,"BOTTOMRIGHT", -5, 25) + + FCF_SetLocked(ChatFrame1, 1) + FCF_SetWindowColor(ChatFrame1, 0, 0, 0); + FCF_SetWindowAlpha(ChatFrame1, 0); + FCF_SetChatWindowFontSize(ChatFrame1, 12) + -- set position of Loot & Spam + if not ChatFrame3.isDocked == 1 or not ChatFrame3:IsShown() then + FCF_OpenNewWindow("Loot & Spam") + end + + FCF_SetWindowColor(ChatFrame3, 0, 0, 0); + FCF_SetWindowAlpha(ChatFrame3, 0); + FCF_SetChatWindowFontSize(ChatFrame3, 12) + FCF_SetWindowName(ChatFrame3, "Loot & Spam", 1 ) + FCF_UnDockFrame(ChatFrame3) + ChatFrame3:ClearAllPoints() + ChatFrame3:SetPoint("TOPLEFT", pfUI.chat.right ,"TOPLEFT", 5, -25) + ChatFrame3:SetPoint("BOTTOMRIGHT", pfUI.chat.right ,"BOTTOMRIGHT", -5, 25) + FCF_SetLocked(ChatFrame3, 1) + -- save positions on logout + ChatFrame1:SetUserPlaced(1); + ChatFrame3:SetUserPlaced(1); +end + +pfUI.chat.setupChannels = function () + ChatFrame_RemoveAllMessageGroups(ChatFrame1) + ChatFrame_RemoveAllMessageGroups(ChatFrame3) + + local normalg = {"SAY", "EMOTE", "YELL", "GUILD", "OFFICER", "GUILD_ACHIEVEMENT", "WHISPER", + "MONSTER_SAY", "MONSTER_EMOTE", "MONSTER_YELL", "MONSTER_WHISPER", "MONSTER_BOSS_EMOTE", "MONSTER_BOSS_WHISPER", + "PARTY", "PARTY_LEADER", "RAID", "RAID_LEADER", "RAID_WARNING", "BATTLEGROUND", "BATTLEGROUND_LEADER", + "BG_HORDE", "BG_ALLIANCE", "BG_NEUTRAL", "SYSTEM", "ERRORS", "AFK", "DND", "IGNORED", "BN_WHISPER", "BN_CONVERSATION"} + for _,group in pairs(normalg) do + ChatFrame_AddMessageGroup(ChatFrame1, group) + end + + local spamg = { "COMBAT_XP_GAIN", "COMBAT_HONOR_GAIN", "COMBAT_FACTION_CHANGE", "LOOT", "MONEY" } + for _,group in pairs(spamg) do + ChatFrame_AddMessageGroup(ChatFrame3, group) + end + + local spamc = { "Trade", "General", "LocalDefense", "GuildRecruitment", "LookingForGroup", + "Handel", "Allgemein", "LokaleVerteidigung", "Gildenrekrutierung", "SucheNachGruppe", "World" } + for _,channel in pairs(spamc) do + ChatFrame_RemoveChannel(ChatFrame1, channel) + ChatFrame_AddChannel(ChatFrame3, channel) + end + + JoinChannelByName("World") + ChatFrame_AddChannel(ChatFrame3, "World") +end + +-- orig. function but removed flashing +function FCF_OnUpdate(elapsed) + -- Need to draw the dock regions for a frame to define their rects + if ( not ChatFrame1.init ) then + for i=1, NUM_CHAT_WINDOWS do + getglobal("ChatFrame"..i.."TabDockRegion"):Show(); + FCF_UpdateButtonSide(getglobal("ChatFrame"..i)); + end + ChatFrame1.init = 1; + return; + elseif ( ChatFrame1.init == 1 ) then + for i=1, NUM_CHAT_WINDOWS do + getglobal("ChatFrame"..i.."TabDockRegion"):Hide(); + end + ChatFrame1.init = 2; + end + + -- Detect if mouse is over any chat frames and if so show their tabs, if not hide them + local chatFrame, chatTab; + + if ( MOVING_CHATFRAME ) then + -- Set buttons to the left or right side of the frame + -- If the the side of the buttons changes and the frame is the default frame, then set every docked frames buttons to the same side + local updateAllButtons = nil; + if (FCF_UpdateButtonSide(MOVING_CHATFRAME) and MOVING_CHATFRAME == DEFAULT_CHAT_FRAME ) then + updateAllButtons = 1; + end + local dockRegion; + for index, value in DOCKED_CHAT_FRAMES do + if ( updateAllButtons ) then + FCF_UpdateButtonSide(value); + end + + dockRegion = getglobal(value:GetName().."TabDockRegion"); + if ( MouseIsOver(dockRegion) and MOVING_CHATFRAME ~= DEFAULT_CHAT_FRAME ) then + dockRegion:Show(); + else + dockRegion:Hide(); + end + end + end + + -- If the default chat frame is resizing, then resize the dock + if ( DEFAULT_CHAT_FRAME.resizing ) then + FCF_DockUpdate(); + end +end + +ChatFrameMenuButton:SetNormalTexture("foo") +ChatFrameMenuButton:ClearAllPoints() +ChatFrameMenuButton:SetParent(pfUI.chat.left.panelTop) +ChatFrameMenuButton:SetPoint("TOPRIGHT",-6,-6) +ChatFrameMenuButton:SetHeight(6) +ChatFrameMenuButton:SetWidth(6) + +ChatFrameEditBox:ClearAllPoints() +ChatFrameEditBox:SetHeight(22) +ChatFrameEditBox:SetPoint("BOTTOMLEFT", pfUI.bars.bottom, "TOPLEFT", 0, 5) +ChatFrameEditBox:SetPoint("BOTTOMRIGHT", pfUI.bars.bottom, "TOPRIGHT", 0, 5) + +ChatFrameEditBox:SetBackdrop(pfUI.backdrop) + +for i,v in ipairs({ChatFrameEditBox:GetRegions()}) do + if i==6 or i==7 or i==8 then + v:SetTexture(0,0,0,1) + v:SetHeight(ChatFrameEditBox:GetHeight()) + end +end +ChatFrameEditBox:SetAltArrowKeyMode(false) + +local shortnames = { channel1 = "[1]", channel2 = "[2]", + channel3 = "[3]", channel4 = "[4]", channel5 = "[5]", + channel6 = "[6]", channel7 = "[7]", channel8 = "[8]", + channel9 = "[9]", channel10 = "[10]", } + +local default = " " .. "%s" .. "|r:" .. "\32" +CHAT_CHANNEL_GET = "%s" .. "|r:" .. "\32"; +CHAT_GUILD_GET = '[G]' .. default +CHAT_OFFICER_GET = '[O]'.. default +CHAT_PARTY_GET = '[P]' .. default +CHAT_RAID_GET = '[R]' .. default +CHAT_RAID_LEADER_GET = '[RL]' .. default +CHAT_RAID_WARNING_GET = '[RW]' .. default +CHAT_BATTLEGROUND_GET = '[BG]' .. default +CHAT_BATTLEGROUND_LEADER_GET = '[BL]' .. default +CHAT_SAY_GET = '[S]' .. default +CHAT_WHISPER_GET = '|cffffaaff[W]' .. default +CHAT_WHISPER_INFORM_GET = '[W]' .. default +CHAT_YELL_GET = '[Y]' .. default + +for i=1,NUM_CHAT_WINDOWS do + local HookAddMessage = getglobal("ChatFrame"..i).AddMessage + getglobal("ChatFrame"..i).AddMessage = function (frame, text, ...) + if text then + local Name = string.gsub(text, ".*|Hplayer:(.-)|h.*", "%1") + if pfUI.playerDB[Name] and pfUI.playerDB[Name].class ~= nil then + local Class = pfUI.playerDB[Name].class + if RAID_CLASS_COLORS[Class] ~= nil then + local Color = string.format("%02x%02x%02x", + RAID_CLASS_COLORS[Class].r * 255, + RAID_CLASS_COLORS[Class].g * 255, + RAID_CLASS_COLORS[Class].b * 255) + Name = "|cff" .. Color .. Name .. "|r" + end + end + text = string.gsub(text, "|Hplayer:(.-)|h%[.-%]|h(.-:-)", "[|Hplayer:%1|h" .. Name .. "|h]" .. "%2") + + -- make incoming whispers lighter than outgoing + if string.find(text, '|cffffaaff') == 1 then + text = string.gsub(text, "|r", "|cffffaaff") + end + + local pattern = "%]%s+(.*|Hplayer)" + local channel = string.gsub(text, ".*%[(.-)" .. pattern ..".+", "%1") + if string.find(channel, "%d+%. ") then + channel = string.gsub(channel, "(%d+)%..*", "channel%1") + channel = string.gsub(channel, "channel", "") + pattern = "%[%d+%..-" .. pattern + text = string.gsub(text, pattern, "["..channel.."]".."%1") + end + + HookAddMessage(frame, text, unpack(arg)) + end + end +end diff --git a/modules/cooldown.lua b/modules/cooldown.lua new file mode 100644 index 00000000..5b398e2d --- /dev/null +++ b/modules/cooldown.lua @@ -0,0 +1,70 @@ +function CooldownFrame_SetTimer(this, start, duration, enable) + if ( start > 0 and duration > 0 and enable > 0) then + + this.start = start; + this.duration = duration; + this.stopping = 0; + this:SetSequence(0); + + if not this.cd then + this.cd = CreateFrame("Frame") + this.cd:SetAllPoints(this) + this.cd:SetParent(this:GetParent()) + + this.cd.back = this.cd:CreateTexture(nil,"BACKGROUND") + this.cd.back:SetTexture(0,0,0,1) + this.cd.back:SetAlpha(.5) + this.cd.back:SetAllPoints(this.cd) + + this.cd.text = this.cd:CreateFontString("Status", "HIGH", "GameFontNormal") + this.cd.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + this.cd.text:ClearAllPoints() + this.cd.text:SetParent(this.cd) + this.cd.text:SetAllPoints(this.cd) + this.cd.text:SetJustifyH("CENTER") + this.cd.text:SetFontObject(GameFontWhite) + end + this:Show(); + else + this:Hide() + end + + this:SetAlpha(0) +end + +function CooldownFrame_OnUpdateModel() + if this.start and this.duration then + local remaining = this.duration - (GetTime() - this.start) + + -- disable GCD notify + if ( remaining >= 1.5 ) then + this.cd:Show() + local unit = "" + if remaining > 99 then + remaining = remaining / 60 + unit = "m" + end + + if remaining > 99 then + remaining = remaining / 60 + unit = "h" + end + + this.cd.text:SetText(floor(remaining)..unit) + --elseif ( remaining >= .5 ) then + -- this.cd:Show() + -- this.cd.text:SetText("") + else + this:Hide(); + this.cd:Hide() + this.stopping = 1; + end + end +end + +function CooldownFrame_OnAnimFinished() + if ( this.stopping == 1 ) then + this:Hide(); + this.cd:Hide() + end +end diff --git a/modules/font.lua b/modules/font.lua new file mode 100644 index 00000000..c03e96a2 --- /dev/null +++ b/modules/font.lua @@ -0,0 +1,47 @@ +pfUI.font = CreateFrame("Frame",nil,UIParent) +pfUI.font:RegisterEvent("PLAYER_ENTERING_WORLD") +pfUI.font:RegisterEvent("VARIABLES_LOADED") +pfUI.font:RegisterEvent("ADDON_LOADED") + +pfUI.font:SetScript("OnEvent", function() + pfUI.font:loadFonts() + end) + +pfUI.font.loadFonts = function () + local font = "Interface\\AddOns\\pfUI\\fonts\\arial.ttf" + local combat_font = "Interface\\AddOns\\pfUI\\fonts\\combat_font.ttf" + + STANDARD_TEXT_FONT = font; + UNIT_NAME_FONT = font; + DAMAGE_TEXT_FONT = combat_font; + NAMEPLATE_FONT = font; + + SystemFont:SetFont(font, 15) + GameFontNormal:SetFont(font, 12) + GameFontBlack:SetFont(font, 12) + GameFontNormalSmall:SetFont(font, 10) + GameFontNormalLarge:SetFont(font, 16) + GameFontNormalHuge:SetFont(font, 20) + NumberFontNormal:SetFont(font, 14, "OUTLINE") + NumberFontNormalSmall:SetFont(font, 14, "OUTLINE") + NumberFontNormalLarge:SetFont(font, 16, "OUTLINE") + NumberFontNormalHuge:SetFont(font, 30, "OUTLINE") + QuestTitleFont:SetFont(font, 18) + QuestFont:SetFont(font, 13) + QuestFontHighlight:SetFont(font, 14) + ItemTextFontNormal:SetFont(font, 15) + MailTextFontNormal:SetFont(font, 15) + SubSpellFont:SetFont(font, 10) + DialogButtonNormalText:SetFont(font, 16) + ZoneTextFont:SetFont(font, 48, "OUTLINE") + SubZoneTextFont:SetFont(font, 24, "OUTLINE") + TextStatusBarTextSmall:SetFont(font, 12, "NORMAL") + GameTooltipText:SetFont(font, 12) + GameTooltipTextSmall:SetFont(font, 10) + GameTooltipHeaderText:SetFont(font, 14) + WorldMapTextFont:SetFont(font, 102, "THICK") + InvoiceTextFontNormal:SetFont(font, 12) + InvoiceTextFontSmall:SetFont(font, 10) + CombatTextFont:SetFont(font, 25) + ChatFontNormal:SetFont(font, 12, "NORMAL") +end diff --git a/modules/minimap.lua b/modules/minimap.lua new file mode 100644 index 00000000..c96e4f90 --- /dev/null +++ b/modules/minimap.lua @@ -0,0 +1,32 @@ +MinimapToggleButton:Hide() +MinimapBorderTop:Hide() +MinimapZoneTextButton:Hide() +MinimapZoomIn:Hide() +MinimapZoomOut:Hide() +GameTimeFrame:Hide() + +MinimapBorder:SetTexture(nil) +Minimap:SetMaskTexture("Interface\\AddOns\\pfUI\\img\\minimap") + +Minimap:EnableMouseWheel(true) +Minimap:SetScript("OnMouseWheel", function() + if(arg1 > 0) then Minimap_ZoomIn() else Minimap_ZoomOut() end + end) + +pfUI.minimap = CreateFrame("Frame",nil,UIParent) +pfUI.minimap:SetBackdrop(pfUI.backdrop) +pfUI.minimap:SetBackdropColor(0,0,0,0) +pfUI.minimap:SetPoint("TOPRIGHT", UIParent, -5, -5) +pfUI.minimap:SetWidth(Minimap:GetWidth()) +pfUI.minimap:SetHeight(Minimap:GetHeight()) +pfUI.minimap:SetFrameStrata("BACKGROUND") +pfUI.minimap.background = pfUI.minimap:CreateTexture(nil,"BACKGROUND") +pfUI.minimap.background:SetTexture(0,0,0,1) +pfUI.minimap.background:SetAllPoints(pfUI.minimap) + +Minimap:SetParent(pfUI.minimap) +Minimap:ClearAllPoints() +Minimap:SetPoint("TOPLEFT", pfUI.minimap, "TOPLEFT", 3, -3) +Minimap:SetPoint("BOTTOMRIGHT", pfUI.minimap, "BOTTOMRIGHT", -3, 3) + +MiniMapTrackingFrame:SetFrameStrata("LOW") diff --git a/modules/panel.lua b/modules/panel.lua new file mode 100644 index 00000000..9ccbd49d --- /dev/null +++ b/modules/panel.lua @@ -0,0 +1,129 @@ +pfUI.panel = CreateFrame("Frame",nil,UIParent) + +pfUI.panel.left = CreateFrame("Frame", "leftChatPanelBottom", pfUI.panel) +pfUI.panel.left:ClearAllPoints() +pfUI.panel.left:SetHeight(19) +pfUI.panel.left:SetPoint("BOTTOMLEFT", pfUI.chat.left, "BOTTOMLEFT", 2, 2) +pfUI.panel.left:SetPoint("BOTTOMRIGHT", pfUI.chat.left, "BOTTOMRIGHT", -2, 2) +pfUI.panel.left:SetBackdrop(pfUI.backdrop) +pfUI.panel.left:SetBackdropColor(0,0,0,.75) + +pfUI.panel.left.hide = CreateFrame("Button", nil, pfUI.panel.left) +pfUI.panel.left.hide:ClearAllPoints() +pfUI.panel.left.hide:SetWidth(15) +pfUI.panel.left.hide:SetHeight(pfUI.panel.left:GetHeight()) +pfUI.panel.left.hide:SetPoint("LEFT", 0, 0) +pfUI.panel.left.hide:SetBackdrop(pfUI.backdrop) +pfUI.panel.left.hide.text = pfUI.panel.left.hide:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.panel.left.hide.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") +pfUI.panel.left.hide.text:ClearAllPoints() +pfUI.panel.left.hide.text:SetAllPoints(pfUI.panel.left.hide) +pfUI.panel.left.hide.text:SetPoint("LEFT", 0, 0) +pfUI.panel.left.hide.text:SetFontObject(GameFontWhite) +pfUI.panel.left.hide.text:SetText("< ") +pfUI.panel.left.hide:SetScript("OnClick", function() + if pfUI.chat.left:IsShown() then pfUI.chat.left:Hide() else pfUI.chat.left:Show() end + end) + +pfUI.panel.left.left = CreateFrame("Frame", nil, pfUI.panel.left) +pfUI.panel.left.left:ClearAllPoints() +pfUI.panel.left.left:SetWidth(115) +pfUI.panel.left.left:SetHeight(pfUI.panel.left:GetHeight()) +pfUI.panel.left.left:SetPoint("LEFT", 0, 0) +pfUI.panel.left.left.text = pfUI.panel.left.left:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.panel.left.left.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") +pfUI.panel.left.left.text:ClearAllPoints() +pfUI.panel.left.left.text:SetAllPoints(pfUI.panel.left.left) +pfUI.panel.left.left.text:SetPoint("CENTER", 0, 0) +pfUI.panel.left.left.text:SetFontObject(GameFontWhite) +pfUI.panel.left.left.text:SetText("[DUMMY]") + +pfUI.panel.left.center = CreateFrame("Frame", nil, pfUI.panel.left) +pfUI.panel.left.center:ClearAllPoints() +pfUI.panel.left.center:SetWidth(115) +pfUI.panel.left.center:SetHeight(pfUI.panel.left:GetHeight()) +pfUI.panel.left.center:SetPoint("CENTER", 0, 0) +pfUI.panel.left.center.text = pfUI.panel.left.center:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.panel.left.center.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") +pfUI.panel.left.center.text:ClearAllPoints() +pfUI.panel.left.center.text:SetAllPoints(pfUI.panel.left.center) +pfUI.panel.left.center.text:SetPoint("CENTER", 0, 0) +pfUI.panel.left.center.text:SetFontObject(GameFontWhite) +pfUI.panel.left.center.text:SetText("[DUMMY]") + +pfUI.panel.left.right = CreateFrame("Frame", nil, pfUI.panel.left) +pfUI.panel.left.right:ClearAllPoints() +pfUI.panel.left.right:SetWidth(115) +pfUI.panel.left.right:SetHeight(pfUI.panel.left:GetHeight()) +pfUI.panel.left.right:SetPoint("RIGHT", 0, 0) +pfUI.panel.left.right.text = pfUI.panel.left.right:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.panel.left.right.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") +pfUI.panel.left.right.text:ClearAllPoints() +pfUI.panel.left.right.text:SetAllPoints(pfUI.panel.left.right) +pfUI.panel.left.right.text:SetPoint("CENTER", 0, 0) +pfUI.panel.left.right.text:SetFontObject(GameFontWhite) +pfUI.panel.left.right.text:SetText("[DUMMY]") + +pfUI.panel.right = CreateFrame("Frame", "rightChatPanelBottom", pfUI.panel) +pfUI.panel.right:ClearAllPoints() +pfUI.panel.right:SetHeight(19) +pfUI.panel.right:SetPoint("BOTTOMLEFT", pfUI.chat.right, "BOTTOMLEFT", 2, 2) +pfUI.panel.right:SetPoint("BOTTOMRIGHT", pfUI.chat.right, "BOTTOMRIGHT", -2, 2) +pfUI.panel.right:SetBackdrop(pfUI.backdrop) +pfUI.panel.right:SetBackdropColor(0,0,0,.75) + +pfUI.panel.right.hide = CreateFrame("Button", nil, pfUI.panel.right) +pfUI.panel.right.hide:ClearAllPoints() +pfUI.panel.right.hide:SetWidth(15) +pfUI.panel.right.hide:SetHeight(pfUI.panel.right:GetHeight()) +pfUI.panel.right.hide:SetPoint("RIGHT", 0, 0) +pfUI.panel.right.hide:SetBackdrop(pfUI.backdrop) +pfUI.panel.right.hide.text = pfUI.panel.right.hide:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.panel.right.hide.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") +pfUI.panel.right.hide.text:ClearAllPoints() +pfUI.panel.right.hide.text:SetAllPoints(pfUI.panel.right.hide) +pfUI.panel.right.hide.text:SetPoint("LEFT", 0, 0) +pfUI.panel.right.hide.text:SetFontObject(GameFontWhite) +pfUI.panel.right.hide.text:SetText(" >") +pfUI.panel.right.hide:SetScript("OnClick", function() + if pfUI.chat.right:IsShown() then pfUI.chat.right:Hide() else pfUI.chat.right:Show() end + end) + +pfUI.panel.right.left = CreateFrame("Frame", nil, pfUI.panel.right) +pfUI.panel.right.left:ClearAllPoints() +pfUI.panel.right.left:SetWidth(115) +pfUI.panel.right.left:SetHeight(pfUI.panel.right:GetHeight()) +pfUI.panel.right.left:SetPoint("LEFT", 0, 0) +pfUI.panel.right.left.text = pfUI.panel.right.left:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.panel.right.left.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") +pfUI.panel.right.left.text:ClearAllPoints() +pfUI.panel.right.left.text:SetAllPoints(pfUI.panel.right.left) +pfUI.panel.right.left.text:SetPoint("CENTER", 0, 0) +pfUI.panel.right.left.text:SetFontObject(GameFontWhite) +pfUI.panel.right.left.text:SetText("[DUMMY]") + +pfUI.panel.right.center = CreateFrame("Frame", nil, pfUI.panel.right) +pfUI.panel.right.center:ClearAllPoints() +pfUI.panel.right.center:SetWidth(115) +pfUI.panel.right.center:SetHeight(pfUI.panel.right:GetHeight()) +pfUI.panel.right.center:SetPoint("CENTER", 0, 0) +pfUI.panel.right.center.text = pfUI.panel.right.center:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.panel.right.center.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") +pfUI.panel.right.center.text:ClearAllPoints() +pfUI.panel.right.center.text:SetAllPoints(pfUI.panel.right.center) +pfUI.panel.right.center.text:SetPoint("CENTER", 0, 0) +pfUI.panel.right.center.text:SetFontObject(GameFontWhite) +pfUI.panel.right.center.text:SetText("[DUMMY]") + +pfUI.panel.right.right = CreateFrame("Frame", nil, pfUI.panel.right) +pfUI.panel.right.right:ClearAllPoints() +pfUI.panel.right.right:SetWidth(115) +pfUI.panel.right.right:SetHeight(pfUI.panel.right:GetHeight()) +pfUI.panel.right.right:SetPoint("RIGHT", 0, 0) +pfUI.panel.right.right.text = pfUI.panel.right.right:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.panel.right.right.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 9, "OUTLINE") +pfUI.panel.right.right.text:ClearAllPoints() +pfUI.panel.right.right.text:SetAllPoints(pfUI.panel.right.right) +pfUI.panel.right.right.text:SetPoint("CENTER", 0, 0) +pfUI.panel.right.right.text:SetFontObject(GameFontWhite) +pfUI.panel.right.right.text:SetText("[DUMMY]") diff --git a/modules/pet.lua b/modules/pet.lua new file mode 100644 index 00000000..594f7e44 --- /dev/null +++ b/modules/pet.lua @@ -0,0 +1,278 @@ +pfUI.uf.pet = CreateFrame("Button",nil,UIParent) + +pfUI.uf.pet:SetWidth(100) +pfUI.uf.pet:SetHeight(23) +pfUI.uf.pet:ClearAllPoints() +pfUI.uf.pet:SetPoint("TOPLEFT", pfUI.uf.player.hp , "TOPRIGHT", 0, 0) +pfUI.uf.pet:SetPoint("BOTTOMRIGHT", pfUI.uf.target.hp, "BOTTOMLEFT", 0, 0) + +pfUI.uf.pet:RegisterForClicks('LeftButtonUp', 'RightButtonUp') +pfUI.uf.pet:SetScript("OnClick", function () + TargetUnit("pet") + end) + +pfUI.uf.pet:RegisterEvent("PLAYER_ENTERING_WORLD") +pfUI.uf.pet:RegisterEvent("UNIT_PET") +pfUI.uf.pet:RegisterEvent("UNIT_COMBAT"); +pfUI.uf.pet:RegisterEvent("UNIT_AURA"); +pfUI.uf.pet:RegisterEvent("PET_ATTACK_START"); +pfUI.uf.pet:RegisterEvent("PET_ATTACK_STOP"); +pfUI.uf.pet:RegisterEvent("UNIT_HAPPINESS"); + +pfUI.uf.pet:RegisterEvent("UNIT_HEALTH") +pfUI.uf.pet:RegisterEvent("UNIT_MAXHEALTH") +pfUI.uf.pet:RegisterEvent("UNIT_MANA") +pfUI.uf.pet:RegisterEvent("UNIT_MAXMANA") +pfUI.uf.pet:RegisterEvent("UNIT_RAGE") +pfUI.uf.pet:RegisterEvent("UNIT_MAXRAGE") +pfUI.uf.pet:RegisterEvent("UNIT_ENERGY") +pfUI.uf.pet:RegisterEvent("UNIT_MAXENERGY") +pfUI.uf.pet:RegisterEvent("UNIT_FOCUS") +pfUI.uf.pet:RegisterEvent("UNIT_MAXFOCUS") + +pfUI.uf.pet:SetScript("OnEvent", function(arg1) + if UnitExists("pet") then pfUI.uf.pet:Show() else pfUI.uf.pet:Hide() end + local hp, hpmax = UnitHealth("pet"), UnitHealthMax("pet") + local power, powermax = UnitMana("pet"), UnitManaMax("pet") + + local happiness = GetPetHappiness() + if happiness == 1 then + color = { r = 1, g = 0, b = 0 } + elseif happiness == 2 then + color = { r = 1, g = 1, b = 0 } + else + color = { r = 0, g = 1, b = 0 } + end + local r, g, b = (color.r + .5) * .5, (color.g + .5) * .5, (color.b + .5) * .5 + + pfUI.uf.pet.hp.bar:SetMinMaxValues(0, hpmax) + pfUI.uf.pet.hp.bar:SetStatusBarColor(r, g, b, hp / hpmax / 4 + .75) + pfUI.uf.pet.hp.text:SetTextColor(r+.3,g+.3,b+.3, 1) + pfUI.uf.pet.hp.text:SetText(UnitName("pet")) + + pfUI.uf.pet.hpReal = hp + pfUI.uf.pet.powerReal = power + + PowerColor = ManaBarColor[UnitPowerType("pet")]; + pfUI.uf.pet.power.bar:SetStatusBarColor(PowerColor.r + .5, PowerColor.g +.5, PowerColor.b +.5, 1) + pfUI.uf.pet.power.bar:SetMinMaxValues(0, UnitManaMax("pet")) + end) + +pfUI.uf.pet:SetScript("OnUpdate", function() + -- animation hp + local hpDisplay = pfUI.uf.pet.hp.bar:GetValue() + local hpReal = pfUI.uf.pet.hpReal + local hpDiff = abs(hpReal - hpDisplay) + + if hpDisplay < hpReal then + pfUI.uf.pet.hp.bar:SetValue(hpDisplay + ceil(hpDiff / pfUI.config.unitframes.animation_speed)) + elseif hpDisplay > hpReal then + pfUI.uf.pet.hp.bar:SetValue(hpDisplay - ceil(hpDiff / pfUI.config.unitframes.animation_speed)) + end + + -- animation power + local powerDisplay = pfUI.uf.pet.power.bar:GetValue() + local powerReal = pfUI.uf.pet.powerReal + local powerDiff = abs(powerReal - powerDisplay) + + if powerDisplay < powerReal then + pfUI.uf.pet.power.bar:SetValue(powerDisplay + ceil(powerDiff / pfUI.config.unitframes.animation_speed)) + elseif hpDisplay > hpReal then + pfUI.uf.pet.power.bar:SetValue(powerDisplay - ceil(powerDiff / pfUI.config.unitframes.animation_speed)) + end + end) + +pfUI.uf.pet.hp = CreateFrame("Frame",nil, pfUI.uf.pet) +pfUI.uf.pet.hp:SetBackdrop(pfUI.backdrop) +pfUI.uf.pet.hp:SetWidth(100) +pfUI.uf.pet.hp:SetHeight(20) +pfUI.uf.pet.hp:SetPoint("TOP",pfUI.uf.pet,"TOP") +pfUI.uf.pet.hp.bar = CreateFrame("StatusBar", nil, pfUI.uf.pet.hp) +pfUI.uf.pet.hp.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") +pfUI.uf.pet.hp.bar:ClearAllPoints() +pfUI.uf.pet.hp.bar:SetPoint("TOPLEFT", pfUI.uf.pet.hp, "TOPLEFT", 3, -3) +pfUI.uf.pet.hp.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.pet.hp, "BOTTOMRIGHT", -3, 3) +pfUI.uf.pet.hp.bar:SetMinMaxValues(0, 100) +pfUI.uf.pet.hp.bar:SetValue(100) + +pfUI.uf.pet.power = CreateFrame("Frame",nil, pfUI.uf.pet) +pfUI.uf.pet.power:SetBackdrop(pfUI.backdrop) +pfUI.uf.pet.power:SetWidth(100) +pfUI.uf.pet.power:SetHeight(8) +pfUI.uf.pet.power:SetPoint("TOPLEFT",pfUI.uf.pet.hp,"BOTTOMLEFT",0,3) +pfUI.uf.pet.power.bar = CreateFrame("StatusBar", nil, pfUI.uf.pet.power) +pfUI.uf.pet.power.bar:ClearAllPoints() +pfUI.uf.pet.power.bar:SetPoint("TOPLEFT", pfUI.uf.pet.power, "TOPLEFT", 3, -3) +pfUI.uf.pet.power.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.pet.power, "BOTTOMRIGHT", -3, 3) +pfUI.uf.pet.power.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") +pfUI.uf.pet.power.bar:SetBackdropColor(0,0,0,1) +pfUI.uf.pet.power.bar:SetStatusBarColor(0,0,0) +pfUI.uf.pet.power.bar:SetMinMaxValues(0, 100) +pfUI.uf.pet.power.bar:SetValue(100) + +pfUI.uf.pet.hp.text = pfUI.uf.pet.hp.bar:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.uf.pet.hp.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 8, "OUTLINE") +pfUI.uf.pet.hp.text:ClearAllPoints() +pfUI.uf.pet.hp.text:SetAllPoints(pfUI.uf.pet.hp.bar) +pfUI.uf.pet.hp.text:SetPoint("CENTER", 0, 0) +pfUI.uf.pet.hp.text:SetJustifyH("CENTER") +pfUI.uf.pet.hp.text:SetFontObject(GameFontWhite) +pfUI.uf.pet.hp.text:SetText("n/a") + +pfUI.uf.pet.buff = CreateFrame("Frame", nil) +pfUI.uf.pet.buff:RegisterEvent("PLAYER_AURAS_CHANGED") +pfUI.uf.pet.buff:RegisterEvent("PLAYER_AURAS_CHANGED") +pfUI.uf.pet.buff:RegisterEvent("PLAYER_TARGET_CHANGED") +pfUI.uf.pet.buff:RegisterEvent("UNIT_AURA") +pfUI.uf.pet.buff:SetScript("OnEvent", function() + pfUI.uf.pet.buff.refreshBuffs() + end) + +pfUI.uf.pet.buff.buffs = {} +for i=1, 16 do + local id = i + local row = 0 + if i <= 8 then row = 0 else row = 1 end + local buffsize = pfUI.uf.pet.hp:GetWidth()/8 - 1 + + pfUI.uf.pet.buff.buffs[i] = CreateFrame("Button", "pfUITargetBuff" .. i, pfUI.uf.pet) + pfUI.uf.pet.buff.buffs[i].stacks = pfUI.uf.pet.buff.buffs[i]:CreateFontString(nil, "OVERLAY", pfUI.uf.pet.buff.buffs[i]) + pfUI.uf.pet.buff.buffs[i].stacks:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + pfUI.uf.pet.buff.buffs[i].stacks:SetPoint("BOTTOMRIGHT", pfUI.uf.pet.buff.buffs[i], 2, -2) + pfUI.uf.pet.buff.buffs[i].stacks:SetJustifyH("LEFT") + pfUI.uf.pet.buff.buffs[i].stacks:SetShadowColor(0, 0, 0) + pfUI.uf.pet.buff.buffs[i].stacks:SetShadowOffset(0.8, -0.8) + pfUI.uf.pet.buff.buffs[i].stacks:SetTextColor(1,1,.5) + + pfUI.uf.pet.buff.buffs[i]:RegisterForClicks("RightButtonUp") + pfUI.uf.pet.buff.buffs[i]:ClearAllPoints() + pfUI.uf.pet.buff.buffs[i]:SetPoint("BOTTOMLEFT", pfUI.uf.pet.hp, "TOPLEFT", (i-8*row)*1 + (i-8*row)*buffsize - buffsize -1 , 1*row + buffsize*row +1) + pfUI.uf.pet.buff.buffs[i]:SetWidth(buffsize) + pfUI.uf.pet.buff.buffs[i]:SetHeight(buffsize) + pfUI.uf.pet.buff.buffs[i]:SetNormalTexture(nil) + pfUI.uf.pet.buff.buffs[i]:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetUnitBuff("pet", id) + end) + + pfUI.uf.pet.buff.buffs[i]:SetScript("OnLeave", function() + GameTooltip:Hide() + end) +end + +pfUI.uf.pet.buff.refreshBuffs = function () + local buffsize = pfUI.uf.pet.hp:GetWidth()/8 - 1 + for i=1, 16 do + local texture, stacks = UnitBuff("pet",i) + pfUI.uf.pet.buff.buffs[i]:SetBackdrop( + { bgFile = texture, tile = false, tileSize = buffsize, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border", edgeSize = 8, + insets = { left = 0, right = 0, top = 0, bottom = 0} + }) + + if texture then + pfUI.uf.pet.buff.buffs[i]:Show() + if stacks > 1 then + pfUI.uf.pet.buff.buffs[i].stacks:SetText(stacks) + else + pfUI.uf.pet.buff.buffs[i].stacks:SetText("") + end + else + pfUI.uf.pet.buff.buffs[i]:Hide() + end + end +end + +pfUI.uf.pet.debuff = CreateFrame("Frame", nil) +pfUI.uf.pet.debuff:RegisterEvent("PLAYER_AURAS_CHANGED") +pfUI.uf.pet.debuff:RegisterEvent("PLAYER_TARGET_CHANGED") +pfUI.uf.pet.debuff:RegisterEvent("UNIT_AURA") +pfUI.uf.pet.debuff:SetScript("OnEvent", function() + pfUI.uf.pet.debuff.refreshBuffs() + end) + +pfUI.uf.pet.debuff.debuffs = {} +for i=1, 16 do + local id = i + pfUI.uf.pet.debuff.debuffs[i] = CreateFrame("Button", "pfUITargetDebuff" .. i, pfUI.uf.pet) + pfUI.uf.pet.debuff.debuffs[i].stacks = pfUI.uf.pet.debuff.debuffs[i]:CreateFontString(nil, "OVERLAY", pfUI.uf.pet.debuff.debuffs[i]) + pfUI.uf.pet.debuff.debuffs[i].stacks:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + pfUI.uf.pet.debuff.debuffs[i].stacks:SetPoint("BOTTOMRIGHT", pfUI.uf.pet.debuff.debuffs[i], 2, -2) + pfUI.uf.pet.debuff.debuffs[i].stacks:SetJustifyH("LEFT") + pfUI.uf.pet.debuff.debuffs[i].stacks:SetShadowColor(0, 0, 0) + pfUI.uf.pet.debuff.debuffs[i].stacks:SetShadowOffset(0.8, -0.8) + pfUI.uf.pet.debuff.debuffs[i].stacks:SetTextColor(1,1,.5) + pfUI.uf.pet.debuff.debuffs[i]:RegisterForClicks("RightButtonUp") + pfUI.uf.pet.debuff.debuffs[i]:ClearAllPoints() + + local row = 0; + local top = 0; + local debuffsize = pfUI.uf.pet.hp:GetWidth()/8 - 1 + if i > 8 then row = 1 end + if pfUI.uf.pet.buff.buffs[1]:IsShown() then top = top + 1 end + if pfUI.uf.pet.buff.buffs[9]:IsShown() then top = top + 1 end + + pfUI.uf.pet.debuff.debuffs[i]:SetPoint("BOTTOMLEFT", pfUI.uf.pet.hp, "TOPLEFT", + (i-8*row)*1 + (i-8*row)*debuffsize - debuffsize -1 , + 1*row + debuffsize*row +1 + (top*(debuffsize+1)) + ) + + pfUI.uf.pet.debuff.debuffs[i]:SetWidth(debuffsize) + pfUI.uf.pet.debuff.debuffs[i]:SetHeight(debuffsize) + pfUI.uf.pet.debuff.debuffs[i]:SetNormalTexture(nil) + pfUI.uf.pet.debuff.debuffs[i]:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetUnitDebuff("pet", id) + end) + pfUI.uf.pet.debuff.debuffs[i]:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + pfUI.uf.pet.debuff.debuffs[i]:SetScript("OnClick", function() + CancelPlayerBuff(GetPlayerBuff(id-1,"HARMFUL")) + end) +end + +pfUI.uf.pet.debuff.refreshBuffs = function () + local debuffsize = pfUI.uf.pet.hp:GetWidth()/8 - 1 + for i=1, 16 do + local row = 0; + local top = 0; + if i > 8 then row = 1 end + if pfUI.uf.pet.buff.buffs[1]:IsShown() then top = top + 1 end + if pfUI.uf.pet.buff.buffs[9]:IsShown() then top = top + 1 end + + pfUI.uf.pet.debuff.debuffs[i]:SetPoint("BOTTOMLEFT", pfUI.uf.pet.hp, "TOPLEFT", + (i-8*row)*1 + (i-8*row)*debuffsize - debuffsize -1 , + 1*row + debuffsize*row +1 + (top*(debuffsize+1)) + ) + local texture, stacks = UnitDebuff("pet",i) + pfUI.uf.pet.debuff.debuffs[i]:SetBackdrop( + { bgFile = texture, tile = false, tileSize = debuffsize, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border_col", edgeSize = 8, + insets = { left = 0, right = 0, top = 0, bottom = 0} + }) + + local _,_,dtype = UnitDebuff("pet", i) + if dtype == "Magic" then + pfUI.uf.pet.debuff.debuffs[i]:SetBackdropBorderColor(0,1,1,1) + elseif dtype == "Poison" then + pfUI.uf.pet.debuff.debuffs[i]:SetBackdropBorderColor(0,1,0,1) + elseif dtype == "Curse" then + pfUI.uf.pet.debuff.debuffs[i]:SetBackdropBorderColor(1,0,1,1) + else + pfUI.uf.pet.debuff.debuffs[i]:SetBackdropBorderColor(1,0,0,1) + end + + if texture then + pfUI.uf.pet.debuff.debuffs[i]:Show() + if stacks > 1 then + pfUI.uf.pet.debuff.debuffs[i].stacks:SetText(stacks) + else + pfUI.uf.pet.debuff.debuffs[i].stacks:SetText("") + end + else + pfUI.uf.pet.debuff.debuffs[i]:Hide() + end + end +end + diff --git a/modules/player.lua b/modules/player.lua new file mode 100644 index 00000000..c364aeca --- /dev/null +++ b/modules/player.lua @@ -0,0 +1,361 @@ +PlayerFrame:Hide() +PlayerFrame:UnregisterAllEvents() + +pfUI.uf.player = CreateFrame("Button",nil,UIParent) +pfUI.uf.player:SetWidth(pfUI.config.unitframes.width) +pfUI.uf.player:SetHeight(pfUI.config.unitframes.height+pfUI.config.unitframes.pheight) +pfUI.uf.player:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOM", -75, 125) +pfUI.uf.player:RegisterForClicks('LeftButtonUp', 'RightButtonUp') +pfUI.uf.player:SetScript("OnClick", function () + if arg1 == "RightButton" then + ToggleDropDownMenu(1, nil, pfUI.uf.player.dropdown,"cursor") + if UnitIsPartyLeader("player") then + UIDropDownMenu_AddButton({text = "Reset Instances", func = ResetInstances, notCheckable = 1}, 1) + end + else + TargetUnit("player") + end + end) + +pfUI.uf.player.dropdown = getglobal("PlayerFrameDropDown") +pfUI.uf.player.dropdowni = function() + -- add reset button when alone + if not (UnitInRaid("player") or GetNumPartyMembers() > 0) then + UIDropDownMenu_AddButton({text = "Reset Instances", func = ResetInstances, notCheckable = 1}, 1) + end + UnitPopup_ShowMenu(pfUI.uf.player.dropdown, "SELF", "player") +end +UIDropDownMenu_Initialize(pfUI.uf.player.dropdown, pfUI.uf.player.dropdowni, "MENU") + +pfUI.uf.player:RegisterEvent("PLAYER_ENTERING_WORLD") +pfUI.uf.player:RegisterEvent("UNIT_HEALTH") +pfUI.uf.player:RegisterEvent("UNIT_MAXHEALTH") +pfUI.uf.player:RegisterEvent("UNIT_DISPLAYPOWER") +pfUI.uf.player:RegisterEvent("UNIT_MANA") +pfUI.uf.player:RegisterEvent("UNIT_MAXMANA") +pfUI.uf.player:RegisterEvent("UNIT_RAGE") +pfUI.uf.player:RegisterEvent("UNIT_MAXRAGE") +pfUI.uf.player:RegisterEvent("UNIT_ENERGY") +pfUI.uf.player:RegisterEvent("UNIT_MAXENERGY") + +pfUI.uf.player:SetScript("OnEvent", function() + if event == "UNIT_DISPLAYPOWER" or event == "PLAYER_ENTERING_WORLD" then + pfUI.uf.player.power.bar:SetValue(0) + end + + local hp, hpmax = UnitHealth("player"), UnitHealthMax("player") + local power, powermax = UnitMana("player"), UnitManaMax("player") + + local cr, cg, cb = pfUI.cache.class_r, pfUI.cache.class_g, pfUI.cache.class_b + local perc = hp / hpmax + + pfUI.uf.player.hp.bar:SetMinMaxValues(0, hpmax) + pfUI.uf.player.hp.bar:SetStatusBarColor(cr, cg, cb, hp / hpmax / 4 + .75) + + local r1, g1, b1, r2, g2, b2 + if perc <= 0.5 then + perc = perc * 2; r1, g1, b1 = .9, .5, .5; r2, g2, b2 = .9, .9, .5 + else + perc = perc * 2 - 1; r1, g1, b1 = .9, .9, .5; r2, g2, b2 = .5, .9, .5 + end + local hr, hg, hb = r1 + (r2 - r1)*perc, g1 + (g2 - g1)*perc, b1 + (b2 - b1)*perc + pfUI.uf.player.hpText:SetTextColor(hr, hg, hb,1) + + if hp ~= hpmax then + pfUI.uf.player.hpText:SetText(hp .. " - " .. ceil(hp / hpmax * 100) .. "%") + else + pfUI.uf.player.hpText:SetText(hp) + end + + PowerColor = ManaBarColor[UnitPowerType("player")]; + pfUI.uf.player.power.bar:SetStatusBarColor(PowerColor.r + .5, PowerColor.g +.5, PowerColor.b +.5, 1) + pfUI.uf.player.power.bar:SetMinMaxValues(0, UnitManaMax("player")) + + pfUI.uf.player.powerText:SetTextColor(PowerColor.r + .5, PowerColor.g +.5, PowerColor.b +.5,1) + + pfUI.uf.player.powerText:SetText( UnitMana("player") ) + + pfUI.uf.player.hpReal = hp + pfUI.uf.player.powerReal = power + end) + +pfUI.uf.player:SetScript("OnUpdate", function() + local hpDisplay = pfUI.uf.player.hp.bar:GetValue() + local hpReal = pfUI.uf.player.hpReal + local hpDiff = abs(hpReal - hpDisplay) + + if hpDisplay < hpReal then + pfUI.uf.player.hp.bar:SetValue(hpDisplay + ceil(hpDiff / pfUI.config.unitframes.animation_speed)) + elseif hpDisplay > hpReal then + pfUI.uf.player.hp.bar:SetValue(hpDisplay - ceil(hpDiff / pfUI.config.unitframes.animation_speed)) + end + + local powerDisplay = pfUI.uf.player.power.bar:GetValue() + local powerReal = pfUI.uf.player.powerReal + local powerDiff = abs(powerReal - powerDisplay) + + if powerDisplay < powerReal then + pfUI.uf.player.power.bar:SetValue(powerDisplay + ceil(powerDiff / pfUI.config.unitframes.animation_speed)) + elseif powerDisplay > powerReal then + pfUI.uf.player.power.bar:SetValue(powerDisplay - ceil(powerDiff / pfUI.config.unitframes.animation_speed)) + end + end) + +pfUI.uf.player.hp = CreateFrame("Frame",nil, pfUI.uf.player) +pfUI.uf.player.hp:SetBackdrop(pfUI.backdrop) +pfUI.uf.player.hp:SetHeight(pfUI.config.unitframes.height) +pfUI.uf.player.hp:SetPoint("TOPRIGHT",pfUI.uf.player,"TOPRIGHT") +pfUI.uf.player.hp:SetPoint("TOPLEFT",pfUI.uf.player,"TOPLEFT") + +pfUI.uf.player.hp.bar = CreateFrame("StatusBar", nil, pfUI.uf.player.hp) +pfUI.uf.player.hp.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") + +pfUI.uf.player.hp.bar:ClearAllPoints() +pfUI.uf.player.hp.bar:SetPoint("TOPLEFT", pfUI.uf.player.hp, "TOPLEFT", 3, -3) +pfUI.uf.player.hp.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.player.hp, "BOTTOMRIGHT", -3, 3) + +pfUI.uf.player.hp.bar:SetMinMaxValues(0, 100) + +pfUI.uf.player.hp.bar.portrait = CreateFrame("PlayerModel",nil,pfUI.uf.player.hp.bar) +pfUI.uf.player.hp.bar.portrait:SetAllPoints(pfUI.uf.player.hp.bar) +pfUI.uf.player.hp.bar.portrait:RegisterEvent("UNIT_PORTRAIT_UPDATE") +pfUI.uf.player.hp.bar.portrait:RegisterEvent("UNIT_MODEL_CHANGED") +pfUI.uf.player.hp.bar.portrait:RegisterEvent("PLAYER_ENTERING_WORLD") +pfUI.uf.player.hp.bar.portrait:SetScript("OnEvent", function() this.update() end) +pfUI.uf.player.hp.bar.portrait:SetScript("OnShow", function() this.update() end) + +pfUI.uf.player.hp.bar.portrait.update = function () + pfUI.uf.player.hp.bar.portrait:SetUnit("player"); + pfUI.uf.player.hp.bar.portrait:SetCamera(0) + pfUI.uf.player.hp.bar.portrait:SetAlpha(0.10) +end + +pfUI.uf.player.power = CreateFrame("Frame",nil, pfUI.uf.player) +pfUI.uf.player.power:SetBackdrop(pfUI.backdrop) +pfUI.uf.player.power:SetPoint("TOPLEFT",pfUI.uf.player.hp,"BOTTOMLEFT",0,3) +pfUI.uf.player.power:SetPoint("BOTTOMRIGHT",pfUI.uf.player,"BOTTOMRIGHT",0,0) + +pfUI.uf.player.power.bar = CreateFrame("StatusBar", nil, pfUI.uf.player.power) +pfUI.uf.player.power.bar:ClearAllPoints() +pfUI.uf.player.power.bar:SetPoint("TOPLEFT", pfUI.uf.player.power, "TOPLEFT", 3, -3) +pfUI.uf.player.power.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.player.power, "BOTTOMRIGHT", -3, 3) + +pfUI.uf.player.power.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") + +pfUI.uf.player.power.bar:SetBackdropColor(0,0,0,1) +pfUI.uf.player.power.bar:SetStatusBarColor(0,1,0) +pfUI.uf.player.power.bar:SetMinMaxValues(0, 100) + +pfUI.uf.player.hpText = pfUI.uf.player:CreateFontString("Status", "HIGH", "GameFontNormal") +pfUI.uf.player.hpText:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") +pfUI.uf.player.hpText:ClearAllPoints() +pfUI.uf.player.hpText:SetJustifyH("RIGHT") +pfUI.uf.player.hpText:SetFontObject(GameFontWhite) +pfUI.uf.player.hpText:SetText("5000") + +pfUI.uf.player.powerText = pfUI.uf.player:CreateFontString("Status", "HIGH", "GameFontNormal") +pfUI.uf.player.powerText:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") +pfUI.uf.player.powerText:ClearAllPoints() +pfUI.uf.player.powerText:SetJustifyH("LEFT") +pfUI.uf.player.powerText:SetFontObject(GameFontWhite) +pfUI.uf.player.powerText:SetText("5000") + +pfUI.uf.player.hpText:SetParent(pfUI.uf.player.hp.bar) +pfUI.uf.player.hpText:SetPoint("RIGHT",pfUI.uf.player.hp.bar, "RIGHT", -10, 0) +pfUI.uf.player.powerText:SetParent(pfUI.uf.player.hp.bar) +pfUI.uf.player.powerText:SetPoint("LEFT",pfUI.uf.player.hp.bar, "LEFT", 10, 0) + +pfUI.uf.player.buff = CreateFrame("Frame", nil) +pfUI.uf.player.buff:RegisterEvent("PLAYER_AURAS_CHANGED") +pfUI.uf.player.buff:SetScript("OnEvent", function() + pfUI.uf.player.buff.refreshBuffs() + end) + +pfUI.uf.player.buff.buffs = {} +for i=1, 16 do + local id = i + local row = 0 + if i <= 8 then row = 0 else row = 1 end + + pfUI.uf.player.buff.buffs[i] = CreateFrame("Button", "pfUIPlayerBuff" .. i, pfUI.uf.player) + pfUI.uf.player.buff.buffs[i].stacks = pfUI.uf.player.buff.buffs[i]:CreateFontString(nil, "OVERLAY", pfUI.uf.player.buff.buffs[i]) + pfUI.uf.player.buff.buffs[i].stacks:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + pfUI.uf.player.buff.buffs[i].stacks:SetPoint("BOTTOMRIGHT", pfUI.uf.player.buff.buffs[i], 2, -2) + pfUI.uf.player.buff.buffs[i].stacks:SetJustifyH("LEFT") + pfUI.uf.player.buff.buffs[i].stacks:SetShadowColor(0, 0, 0) + pfUI.uf.player.buff.buffs[i].stacks:SetShadowOffset(0.8, -0.8) + pfUI.uf.player.buff.buffs[i].stacks:SetTextColor(1,1,.5) + pfUI.uf.player.buff.buffs[i].cd = pfUI.uf.player.buff.buffs[i]:CreateFontString(nil, "OVERLAY", pfUI.uf.player.buff.buffs[i]) + pfUI.uf.player.buff.buffs[i].cd:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + pfUI.uf.player.buff.buffs[i].cd:SetPoint("CENTER", pfUI.uf.player.buff.buffs[i], 0, 0) + pfUI.uf.player.buff.buffs[i].cd:SetJustifyH("LEFT") + pfUI.uf.player.buff.buffs[i].cd:SetShadowColor(0, 0, 0) + pfUI.uf.player.buff.buffs[i].cd:SetShadowOffset(0.8, -0.8) + pfUI.uf.player.buff.buffs[i].cd:SetTextColor(1,1,1) + + pfUI.uf.player.buff.buffs[i]:RegisterForClicks("RightButtonUp") + pfUI.uf.player.buff.buffs[i]:ClearAllPoints() + pfUI.uf.player.buff.buffs[i]:SetPoint("BOTTOMLEFT", pfUI.uf.player, "TOPLEFT", (i-8*row)*1 + (i-8*row)*pfUI.config.unitframes.buff_size - pfUI.config.unitframes.buff_size -1 , 1*row + pfUI.config.unitframes.buff_size*row +1) + pfUI.uf.player.buff.buffs[i]:SetWidth(pfUI.config.unitframes.buff_size) + pfUI.uf.player.buff.buffs[i]:SetHeight(pfUI.config.unitframes.buff_size) + pfUI.uf.player.buff.buffs[i]:SetNormalTexture(nil) + pfUI.uf.player.buff.buffs[i]:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetPlayerBuff(GetPlayerBuff(id-1,"HELPFUL")) + end) + + pfUI.uf.player.buff.buffs[i]:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + + pfUI.uf.player.buff.buffs[i]:SetScript("OnClick", function() + CancelPlayerBuff(GetPlayerBuff(id-1,"HELPFUL")) + end) + pfUI.uf.player.buff.buffs[i]:SetScript("OnUpdate", function() + for i=1, 16 do + local timeleft = GetPlayerBuffTimeLeft(GetPlayerBuff(i-1,"HELPFUL")) + if timeleft ~= nil and timeleft < 99 and timeleft ~= 0 then + pfUI.uf.player.buff.buffs[i].cd:SetText(ceil(timeleft)) + else + pfUI.uf.player.buff.buffs[i].cd:SetText("") + end + end + end) + +end + +pfUI.uf.player.buff.refreshBuffs = function () + for i=1, 16 do + local stacks = GetPlayerBuffApplications(GetPlayerBuff(i-1,"HELPFUL")) + pfUI.uf.player.buff.buffs[i]:SetBackdrop( + { bgFile = GetPlayerBuffTexture(GetPlayerBuff(i-1,"HELPFUL")), tile = false, tileSize = pfUI.config.unitframes.buff_size, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border", edgeSize = 8, + insets = { left = 0, right = 0, top = 0, bottom = 0} + }) + + if GetPlayerBuffTexture(GetPlayerBuff(i-1,"HELPFUL")) then + pfUI.uf.player.buff.buffs[i]:Show() + local stacks = GetPlayerBuffApplications(GetPlayerBuff(i-1,"HELPFUL")) + if stacks > 1 then + pfUI.uf.player.buff.buffs[i].stacks:SetText(stacks) + else + pfUI.uf.player.buff.buffs[i].stacks:SetText("") + end + else + pfUI.uf.player.buff.buffs[i]:Hide() + end + + end +end + +pfUI.uf.player.debuff = CreateFrame("Frame", nil) +pfUI.uf.player.debuff:RegisterEvent("PLAYER_AURAS_CHANGED") +pfUI.uf.player.debuff:SetScript("OnEvent", function() + pfUI.uf.player.debuff.refreshBuffs() + end) + +pfUI.uf.player.debuff.debuffs = {} +for i=1, 16 do + local id = i + pfUI.uf.player.debuff.debuffs[i] = CreateFrame("Button", "pfUIPlayerDebuff" .. i, pfUI.uf.player) + pfUI.uf.player.debuff.debuffs[i].stacks = pfUI.uf.player.debuff.debuffs[i]:CreateFontString(nil, "OVERLAY", pfUI.uf.player.debuff.debuffs[i]) + pfUI.uf.player.debuff.debuffs[i].stacks:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + pfUI.uf.player.debuff.debuffs[i].stacks:SetPoint("BOTTOMRIGHT", pfUI.uf.player.debuff.debuffs[i], 2, -2) + pfUI.uf.player.debuff.debuffs[i].stacks:SetJustifyH("LEFT") + pfUI.uf.player.debuff.debuffs[i].stacks:SetShadowColor(0, 0, 0) + pfUI.uf.player.debuff.debuffs[i].stacks:SetShadowOffset(0.8, -0.8) + pfUI.uf.player.debuff.debuffs[i].stacks:SetTextColor(1,1,.5) + pfUI.uf.player.debuff.debuffs[i].cd = pfUI.uf.player.debuff.debuffs[i]:CreateFontString(nil, "OVERLAY", pfUI.uf.player.debuff.debuffs[i]) + pfUI.uf.player.debuff.debuffs[i].cd:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + pfUI.uf.player.debuff.debuffs[i].cd:SetPoint("CENTER", pfUI.uf.player.debuff.debuffs[i], 0, 0) + pfUI.uf.player.debuff.debuffs[i].cd:SetJustifyH("LEFT") + pfUI.uf.player.debuff.debuffs[i].cd:SetShadowColor(0, 0, 0) + pfUI.uf.player.debuff.debuffs[i].cd:SetShadowOffset(0.8, -0.8) + pfUI.uf.player.debuff.debuffs[i].cd:SetTextColor(1,1,1) + + pfUI.uf.player.debuff.debuffs[i]:RegisterForClicks("RightButtonUp") + pfUI.uf.player.debuff.debuffs[i]:ClearAllPoints() + + local row = 0; + local top = 0; + if i > 8 then row = 1 end + if pfUI.uf.player.buff.buffs[1]:IsShown() then top = top + 1 end + if pfUI.uf.player.buff.buffs[9]:IsShown() then top = top + 1 end + + pfUI.uf.player.debuff.debuffs[i]:SetPoint("BOTTOMLEFT", pfUI.uf.player, "TOPLEFT", (i-8*row)*1 + (i-8*row)*pfUI.config.unitframes.debuff_size - pfUI.config.unitframes.debuff_size -1 , 1*row + pfUI.config.unitframes.debuff_size*row +1) + + pfUI.uf.player.debuff.debuffs[i]:SetWidth(pfUI.config.unitframes.debuff_size) + pfUI.uf.player.debuff.debuffs[i]:SetHeight(pfUI.config.unitframes.debuff_size) + pfUI.uf.player.debuff.debuffs[i]:SetNormalTexture(nil) + pfUI.uf.player.debuff.debuffs[i]:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetPlayerBuff(GetPlayerBuff(id-1,"HARMFUL")) + end) + + pfUI.uf.player.debuff.debuffs[i]:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + + pfUI.uf.player.debuff.debuffs[i]:SetScript("OnClick", function() + CancelPlayerBuff(GetPlayerBuff(id-1,"HARMFUL")) + end) + pfUI.uf.player.debuff.debuffs[i]:SetScript("OnUpdate", function() + for i=1, 16 do + local timeleft = GetPlayerBuffTimeLeft(GetPlayerBuff(i-1,"HARMFUL")) + if timeleft ~= nil and timeleft < 99 and timeleft ~= 0 then + pfUI.uf.player.debuff.debuffs[i].cd:SetText(ceil(timeleft)) + else + pfUI.uf.player.debuff.debuffs[i].cd:SetText("") + end + end + end) + +end + +pfUI.uf.player.debuff.refreshBuffs = function () + for i=1, 16 do + local row = 0; + local top = 0; + if i > 8 then row = 1 end + if pfUI.uf.player.buff.buffs[1]:IsShown() then top = top + 1 end + if pfUI.uf.player.buff.buffs[9]:IsShown() then top = top + 1 end + + pfUI.uf.player.debuff.debuffs[i]:SetPoint("BOTTOMLEFT", pfUI.uf.player, "TOPLEFT", + (i-8*row)*1 + (i-8*row)*pfUI.config.unitframes.debuff_size - pfUI.config.unitframes.debuff_size -1 , + 1*row + pfUI.config.unitframes.debuff_size*row +1 + (top*(pfUI.config.unitframes.debuff_size+1)) + ) + + local stacks = GetPlayerBuffApplications(GetPlayerBuff(i-1,"HARMFUL")) + pfUI.uf.player.debuff.debuffs[i]:SetBackdrop( + { bgFile = GetPlayerBuffTexture(GetPlayerBuff(i-1,"HARMFUL")), tile = false, tileSize = pfUI.config.unitframes.debuff_size, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border_col", edgeSize = 8, + insets = { left = 0, right = 0, top = 0, bottom = 0} + }) + + local _,_,dtype = UnitDebuff("player", i) + if dtype == "Magic" then + pfUI.uf.player.debuff.debuffs[i]:SetBackdropBorderColor(0,1,1,1) + elseif dtype == "Poison" then + pfUI.uf.player.debuff.debuffs[i]:SetBackdropBorderColor(0,1,0,1) + elseif dtype == "Curse" then + pfUI.uf.player.debuff.debuffs[i]:SetBackdropBorderColor(1,0,1,1) + elseif dtype == "Disease" then + pfUI.uf.player.debuff.debuffs[i]:SetBackdropBorderColor(1,1,0,1) + + else + pfUI.uf.player.debuff.debuffs[i]:SetBackdropBorderColor(1,0,0,1) + end + + if GetPlayerBuffTexture(GetPlayerBuff(i-1,"HARMFUL")) then + pfUI.uf.player.debuff.debuffs[i]:Show() + local stacks = GetPlayerBuffApplications(GetPlayerBuff(i-1,"HARMFUL")) + if stacks > 1 then + pfUI.uf.player.debuff.debuffs[i].stacks:SetText(stacks) + else + pfUI.uf.player.debuff.debuffs[i].stacks:SetText("") + end + else + pfUI.uf.player.debuff.debuffs[i]:Hide() + end + end +end diff --git a/modules/skin.lua b/modules/skin.lua new file mode 100644 index 00000000..531f5839 --- /dev/null +++ b/modules/skin.lua @@ -0,0 +1,63 @@ +GameMenuFrameHeader:SetTexture(nil) +GameMenuFrame:SetHeight(GameMenuFrame:GetHeight()-20) +GameMenuFrame:SetWidth(GameMenuFrame:GetWidth()-30) + +_, class = UnitClass("player") +local color = RAID_CLASS_COLORS[class] +local cr, cg, cb = color.r , color.g, color.b + +local buttons = { + "GameMenuButtonOptions", + "GameMenuButtonSoundOptions", + "GameMenuButtonUIOptions", + "GameMenuButtonKeybindings", + "GameMenuButtonMacros", + "GameMenuButtonLogout", + "GameMenuButtonQuit", + "GameMenuButtonContinue", + "StaticPopup1Button1", + "StaticPopup1Button2", + "StaticPopup2Button1", + "StaticPopup2Button2", +} +local boxes = { + "StaticPopup1", + "StaticPopup2", + "GameMenuFrame", + "DropDownList1MenuBackdrop", + "DropDownList2MenuBackdrop", + "DropDownList1Backdrop", + "DropDownList2Backdrop", +} + +for _, button in pairs(buttons) do + local b = getglobal(button) + b:SetBackdrop(pfUI.backdrop) + b:SetNormalTexture(nil) + b:SetHighlightTexture(nil) + b:SetPushedTexture(nil) + b:SetDisabledTexture(nil) + b:SetScript("OnEnter", function() + b:SetBackdrop(pfUI.backdrop_col) + b:SetBackdropBorderColor(cr,cg,cb,1) + end) + b:SetScript("OnLeave", function() + b:SetBackdrop(pfUI.backdrop) + b:SetBackdropBorderColor(1,1,1,1) + end) + b:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 10, "OUTLINE") +end + +for _, box in pairs(boxes) do + local b = getglobal(box) + b:SetBackdrop(pfUI.backdrop) + b:SetBackdropColor(0,0,0,.5) +end + +for i,v in ipairs({GameMenuFrame:GetRegions()}) do + if v.SetTextColor then + v:SetTextColor(1,1,1,.5) + v:SetPoint("TOP", GameMenuFrame, "TOP", 0, -6) + v:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", 10, "OUTLINE") + end +end diff --git a/modules/target.lua b/modules/target.lua new file mode 100644 index 00000000..fe1bb1aa --- /dev/null +++ b/modules/target.lua @@ -0,0 +1,417 @@ +TargetFrame:Hide() +TargetFrame:UnregisterAllEvents() + +pfUI.uf.target = CreateFrame("Button",nil,UIParent) +pfUI.uf.target:Hide() +pfUI.uf.target:RegisterEvent("PLAYER_TARGET_CHANGED") +pfUI.uf.target:SetScript("OnEvent", function() + if UnitExists("target") then + pfUI.uf.target:Show() + else + pfUI.uf.target:Hide() + end + end) +pfUI.uf.target:SetWidth(pfUI.config.unitframes.width) +pfUI.uf.target:SetHeight(pfUI.config.unitframes.height+pfUI.config.unitframes.pheight) +pfUI.uf.target:SetPoint("BOTTOMLEFT", UIParent, "BOTTOM", 75, 125) + +pfUI.uf.target:RegisterForClicks('LeftButtonUp', 'RightButtonUp') +pfUI.uf.target:SetScript("OnClick", function () + if arg1 == "RightButton" then + ToggleDropDownMenu(1, nil, TargetFrameDropDown, "cursor") + end + end) + +pfUI.uf.target:RegisterEvent("PLAYER_ENTERING_WORLD") +pfUI.uf.target:RegisterEvent("PLAYER_TARGET_CHANGED") +pfUI.uf.target:RegisterEvent("UNIT_HEALTH") +pfUI.uf.target:RegisterEvent("UNIT_MAXHEALTH") +pfUI.uf.target:RegisterEvent("UNIT_DISPLAYPOWER") +pfUI.uf.target:RegisterEvent("UNIT_MANA") +pfUI.uf.target:RegisterEvent("UNIT_MAXMANA") +pfUI.uf.target:RegisterEvent("UNIT_RAGE") +pfUI.uf.target:RegisterEvent("UNIT_MAXRAGE") +pfUI.uf.target:RegisterEvent("UNIT_ENERGY") +pfUI.uf.target:RegisterEvent("UNIT_MAXENERGY") + +pfUI.uf.target:SetScript("OnEvent", function() + if UnitExists("target") then pfUI.uf.target:Show() else + pfUI.uf.target:Hide() + return + end + + if event == "PLAYER_TARGET_CHANGED" or event == "PLAYER_ENTERING_WORLD" then + pfUI.uf.target.power.bar:SetValue(0) + pfUI.uf.target.hp.bar:SetValue(0) + end + + local hp, hpmax + if MobHealth3 then + hp, hpmax = MobHealth3:GetUnitHealth("target") + else + hp, hpmax = UnitHealth("target"), UnitHealthMax("target") + end + local power, powermax = UnitMana("target"), UnitManaMax("target") + + if hp ~= hpmax and hpmax ~= 100 then + pfUI.uf.target.hpText:SetText( hp .. " - " .. ceil(hp / hpmax * 100) .. "%") + else + pfUI.uf.target.hpText:SetText( hp) + end + + local color + if UnitIsPlayer("target") then + _, class = UnitClass("target") + color = RAID_CLASS_COLORS[class] + else + color = UnitReactionColor[UnitReaction("target", "player")] + end + local r, g, b = (color.r + .5) * .5, (color.g + .5) * .5, (color.b + .5) * .5 + + pfUI.uf.target.hp.bar:SetMinMaxValues(0, hpmax) + pfUI.uf.target.hp.bar:SetStatusBarColor(r, g, b, hp / hpmax / 4 + .75) + pfUI.uf.target.powerText:SetTextColor(r, g, b, 1) + + local perc = hp / hpmax + local r1, g1, b1, r2, g2, b2 + if perc <= 0.5 then + perc = perc * 2; r1, g1, b1 = .9, .5, .5; r2, g2, b2 = .9, .9, .5 + else + perc = perc * 2 - 1; r1, g1, b1 = .9, .9, .5; r2, g2, b2 = .5, .9, .5 + end + local r, g, b = r1 + (r2 - r1)*perc, g1 + (g2 - g1)*perc, b1 + (b2 - b1)*perc + pfUI.uf.target.hpText:SetTextColor(r, g, b,1) + + local leveldiff = UnitLevel("player") - UnitLevel("target") + local levelcolor + if leveldiff >= 9 then + levelcolor = "555555" + elseif leveldiff >= 3 then + levelcolor = "55ff55" + elseif leveldiff >= -2 then + levelcolor = "aaff55" + elseif leveldiff >= -4 then + levelcolor = "ffaa55" + else + levelcolor = "ff5555" + end + + local name = string.sub(UnitName("target"),1,25) + if strlen(UnitName("target")) > 25 then + name = name .. "..." + end + + local level = UnitLevel("target") + if level == -1 then level = "??" end + + if UnitClassification("target") == "worldboss" then + level = level .. "B" + elseif UnitClassification("target") == "rareelite" then + level = level .. "R+" + elseif UnitClassification("target") == "elite" then + level = level .. "+" + elseif UnitClassification("target") == "rare" then + level = level .. "R" + end + + pfUI.uf.target.powerText:SetText( "|cff" .. levelcolor .. level .. "|r " .. name) + + PowerColor = ManaBarColor[UnitPowerType("target")]; + pfUI.uf.target.power.bar:SetStatusBarColor(PowerColor.r + .5, PowerColor.g +.5, PowerColor.b +.5, 1) + pfUI.uf.target.power.bar:SetMinMaxValues(0, UnitManaMax("target")) + + pfUI.uf.target.hpReal = hp + pfUI.uf.target.powerReal = power + end) + +pfUI.uf.target:SetScript("OnUpdate", function() + if not UnitExists("target") then return end + + local hpDisplay = pfUI.uf.target.hp.bar:GetValue() + local hpReal = pfUI.uf.target.hpReal + local hpDiff = abs(hpReal - hpDisplay) + + if hpDisplay < hpReal then + pfUI.uf.target.hp.bar:SetValue(hpDisplay + ceil(hpDiff / pfUI.config.unitframes.animation_speed)) + elseif hpDisplay > hpReal then + pfUI.uf.target.hp.bar:SetValue(hpDisplay - ceil(hpDiff / pfUI.config.unitframes.animation_speed)) + end + + local powerDisplay = pfUI.uf.target.power.bar:GetValue() + local powerReal = pfUI.uf.target.powerReal + local powerDiff = abs(powerReal - powerDisplay) + + if powerDisplay < powerReal then + pfUI.uf.target.power.bar:SetValue(powerDisplay + ceil(powerDiff / pfUI.config.unitframes.animation_speed)) + elseif powerDisplay > powerReal then + pfUI.uf.target.power.bar:SetValue(powerDisplay - ceil(powerDiff / pfUI.config.unitframes.animation_speed)) + end + end) + +pfUI.uf.target.hp = CreateFrame("Frame",nil, pfUI.uf.target) +pfUI.uf.target.hp:SetBackdrop(pfUI.backdrop) +pfUI.uf.target.hp:SetHeight(pfUI.config.unitframes.height) +pfUI.uf.target.hp:SetPoint("TOPLEFT",pfUI.uf.target,"TOPLEFT") +pfUI.uf.target.hp:SetPoint("TOPRIGHT",pfUI.uf.target,"TOPRIGHT") + +pfUI.uf.target.hp.bar = CreateFrame("StatusBar", nil, pfUI.uf.target.hp) +pfUI.uf.target.hp.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") + +pfUI.uf.target.hp.bar:ClearAllPoints() +pfUI.uf.target.hp.bar:SetPoint("TOPLEFT", pfUI.uf.target.hp, "TOPLEFT", 3, -3) +pfUI.uf.target.hp.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.target.hp, "BOTTOMRIGHT", -3, 3) + +pfUI.uf.target.hp.bar:SetMinMaxValues(0, 100) +pfUI.uf.target.hp.bar:SetValue(100) + +pfUI.uf.target.hp.bar.portrait = CreateFrame("PlayerModel",nil,pfUI.uf.target.hp.bar) +pfUI.uf.target.hp.bar.portrait:SetAllPoints(pfUI.uf.target.hp.bar) +pfUI.uf.target.hp.bar.portrait:RegisterEvent("UNIT_PORTRAIT_UPDATE") +pfUI.uf.target.hp.bar.portrait:RegisterEvent("UNIT_MODEL_CHANGED") +pfUI.uf.target.hp.bar.portrait:RegisterEvent("PLAYER_ENTERING_WORLD") +pfUI.uf.target.hp.bar.portrait:RegisterEvent("PLAYER_TARGET_CHANGED") + +pfUI.uf.target.hp.bar.portrait:SetScript("OnEvent", function() this.update() end) +pfUI.uf.target.hp.bar.portrait:SetScript("OnShow", function() this.update() end) + +pfUI.uf.target.hp.bar.portrait.update = function () + pfUI.uf.target.hp.bar.portrait:SetUnit("target"); + pfUI.uf.target.hp.bar.portrait:SetCamera(0) + pfUI.uf.target.hp.bar.portrait:SetAlpha(0.10) +end + +pfUI.uf.target.power = CreateFrame("Frame",nil, pfUI.uf.target) + +pfUI.uf.target.power:SetBackdrop(pfUI.backdrop) +pfUI.uf.target.power:SetPoint("TOPLEFT",pfUI.uf.target.hp,"BOTTOMLEFT",0,3) +pfUI.uf.target.power:SetPoint("BOTTOMRIGHT",pfUI.uf.target,"BOTTOMRIGHT",0,0) + +pfUI.uf.target.power.bar = CreateFrame("StatusBar", nil, pfUI.uf.target.power) +pfUI.uf.target.power.bar:ClearAllPoints() +pfUI.uf.target.power.bar:SetPoint("TOPLEFT", pfUI.uf.target.power, "TOPLEFT", 3, -3) +pfUI.uf.target.power.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.target.power, "BOTTOMRIGHT", -3, 3) +pfUI.uf.target.power.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") + +pfUI.uf.target.power.bar:SetBackdropColor(0,0,0,1) +pfUI.uf.target.power.bar:SetStatusBarColor(0,0,0) +pfUI.uf.target.power.bar:SetMinMaxValues(0, 100) +pfUI.uf.target.power.bar:SetValue(100) + +pfUI.uf.target.hpText = pfUI.uf.target:CreateFontString("Status", "HIGH", "GameFontNormal") +pfUI.uf.target.hpText:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") +pfUI.uf.target.hpText:ClearAllPoints() +pfUI.uf.target.hpText:SetParent(pfUI.uf.target.hp.bar) +pfUI.uf.target.hpText:SetPoint("RIGHT",pfUI.uf.target.hp.bar, "RIGHT", -10, 0) +pfUI.uf.target.hpText:SetJustifyH("RIGHT") +pfUI.uf.target.hpText:SetFontObject(GameFontWhite) +pfUI.uf.target.hpText:SetText("5000") + +pfUI.uf.target.powerText = pfUI.uf.target:CreateFontString("Status", "HIGH", "GameFontNormal") +pfUI.uf.target.powerText:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") +pfUI.uf.target.powerText:ClearAllPoints() +pfUI.uf.target.powerText:SetParent(pfUI.uf.target.hp.bar) +pfUI.uf.target.powerText:SetPoint("LEFT",pfUI.uf.target.hp.bar, "LEFT", 10, 0) +pfUI.uf.target.powerText:SetJustifyH("LEFT") +pfUI.uf.target.powerText:SetFontObject(GameFontWhite) +pfUI.uf.target.powerText:SetText("5000") + +pfUI.uf.target.combopoints = CreateFrame("Frame") + +pfUI.uf.target.combopoints:RegisterEvent("UNIT_COMBO_POINTS") +pfUI.uf.target.combopoints:RegisterEvent("PLAYER_COMBO_POINTS") +pfUI.uf.target.combopoints:RegisterEvent("UNIT_DISPLAYPOWER") +pfUI.uf.target.combopoints:RegisterEvent("PLAYER_TARGET_CHANGED") +pfUI.uf.target.combopoints:RegisterEvent('UNIT_ENERGY'); +pfUI.uf.target.combopoints:RegisterEvent("PLAYER_ENTERING_WORLD") + +pfUI.uf.target.combopoint1 = CreateFrame("Frame") +pfUI.uf.target.combopoint2 = CreateFrame("Frame") +pfUI.uf.target.combopoint3 = CreateFrame("Frame") +pfUI.uf.target.combopoint4 = CreateFrame("Frame") +pfUI.uf.target.combopoint5 = CreateFrame("Frame") + +pfUI.uf.target.combopoints:SetScript("OnEvent", function() + if event == "PLAYER_ENTERING_WORLD" then + for point=1, 5 do + pfUI.uf.target["combopoint" .. point]:SetFrameStrata("HIGH") + pfUI.uf.target["combopoint" .. point]:SetWidth(12) + pfUI.uf.target["combopoint" .. point]:SetHeight(12) + pfUI.uf.target["combopoint" .. point]:SetBackdrop({ + bgFile = "Interface\\AddOns\\pfUI\\img\\bar", tile = true, tileSize = 8, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border", edgeSize = 8, + insets = {left = 0, right = 0, top = 0, bottom = 0}, + }) + pfUI.uf.target["combopoint" .. point]:SetPoint("TOPLEFT", pfUI.uf.target, "TOPRIGHT", 3, -(point - 1) * 13) + + if point < 3 then + pfUI.uf.target["combopoint" .. point]:SetBackdropColor(1, .3, .3, .75) + elseif point < 4 then + pfUI.uf.target["combopoint" .. point]:SetBackdropColor(1, 1, .3, .75) + else + pfUI.uf.target["combopoint" .. point]:SetBackdropColor(.3, 1, .3, .75) + end + pfUI.uf.target["combopoint" .. point]:Hide() + end + else + local combopoints = GetComboPoints("target") + for point=1, 5 do + pfUI.uf.target["combopoint" .. point]:Hide() + end + for point=1, combopoints do + pfUI.uf.target["combopoint" .. point]:Show() + end + end + end) + +pfUI.uf.target.buff = CreateFrame("Frame", nil) +pfUI.uf.target.buff:RegisterEvent("PLAYER_AURAS_CHANGED") +pfUI.uf.target.buff:RegisterEvent("PLAYER_AURAS_CHANGED") +pfUI.uf.target.buff:RegisterEvent("PLAYER_TARGET_CHANGED") +pfUI.uf.target.buff:RegisterEvent("UNIT_AURA") +pfUI.uf.target.buff:SetScript("OnEvent", function() + pfUI.uf.target.buff.refreshBuffs() + end) + +pfUI.uf.target.buff.buffs = {} +for i=1, 16 do + local id = i + local row = 0 + if i <= 8 then row = 0 else row = 1 end + + pfUI.uf.target.buff.buffs[i] = CreateFrame("Button", "pfUITargetBuff" .. i, pfUI.uf.target) + pfUI.uf.target.buff.buffs[i].stacks = pfUI.uf.target.buff.buffs[i]:CreateFontString(nil, "OVERLAY", pfUI.uf.target.buff.buffs[i]) + pfUI.uf.target.buff.buffs[i].stacks:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + pfUI.uf.target.buff.buffs[i].stacks:SetPoint("BOTTOMRIGHT", pfUI.uf.target.buff.buffs[i], 2, -2) + pfUI.uf.target.buff.buffs[i].stacks:SetJustifyH("LEFT") + pfUI.uf.target.buff.buffs[i].stacks:SetShadowColor(0, 0, 0) + pfUI.uf.target.buff.buffs[i].stacks:SetShadowOffset(0.8, -0.8) + pfUI.uf.target.buff.buffs[i].stacks:SetTextColor(1,1,.5) + + pfUI.uf.target.buff.buffs[i]:RegisterForClicks("RightButtonUp") + pfUI.uf.target.buff.buffs[i]:ClearAllPoints() + pfUI.uf.target.buff.buffs[i]:SetPoint("BOTTOMLEFT", pfUI.uf.target, "TOPLEFT", (i-8*row)*1 + (i-8*row)*pfUI.config.unitframes.buff_size - pfUI.config.unitframes.buff_size -1 , 1*row + pfUI.config.unitframes.buff_size*row +1) + pfUI.uf.target.buff.buffs[i]:SetWidth(pfUI.config.unitframes.buff_size) + pfUI.uf.target.buff.buffs[i]:SetHeight(pfUI.config.unitframes.buff_size) + pfUI.uf.target.buff.buffs[i]:SetNormalTexture(nil) + pfUI.uf.target.buff.buffs[i]:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetUnitBuff("target", id) + end) + + pfUI.uf.target.buff.buffs[i]:SetScript("OnLeave", function() + GameTooltip:Hide() + end) +end + +pfUI.uf.target.buff.refreshBuffs = function () + for i=1, 16 do + local texture, stacks = UnitBuff("target",i) + pfUI.uf.target.buff.buffs[i]:SetBackdrop( + { bgFile = texture, tile = false, tileSize = pfUI.config.unitframes.buff_size, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border", edgeSize = 8, + insets = { left = 0, right = 0, top = 0, bottom = 0} + }) + + if texture then + pfUI.uf.target.buff.buffs[i]:Show() + if stacks > 1 then + pfUI.uf.target.buff.buffs[i].stacks:SetText(stacks) + else + pfUI.uf.target.buff.buffs[i].stacks:SetText("") + end + else + pfUI.uf.target.buff.buffs[i]:Hide() + end + end +end + +pfUI.uf.target.debuff = CreateFrame("Frame", nil) +pfUI.uf.target.debuff:RegisterEvent("PLAYER_AURAS_CHANGED") +pfUI.uf.target.debuff:RegisterEvent("PLAYER_TARGET_CHANGED") +pfUI.uf.target.debuff:RegisterEvent("UNIT_AURA") +pfUI.uf.target.debuff:SetScript("OnEvent", function() + pfUI.uf.target.debuff.refreshBuffs() + end) + +pfUI.uf.target.debuff.debuffs = {} +for i=1, 16 do + local id = i + pfUI.uf.target.debuff.debuffs[i] = CreateFrame("Button", "pfUITargetDebuff" .. i, pfUI.uf.target) + pfUI.uf.target.debuff.debuffs[i].stacks = pfUI.uf.target.debuff.debuffs[i]:CreateFontString(nil, "OVERLAY", pfUI.uf.target.debuff.debuffs[i]) + pfUI.uf.target.debuff.debuffs[i].stacks:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + pfUI.uf.target.debuff.debuffs[i].stacks:SetPoint("BOTTOMRIGHT", pfUI.uf.target.debuff.debuffs[i], 2, -2) + pfUI.uf.target.debuff.debuffs[i].stacks:SetJustifyH("LEFT") + pfUI.uf.target.debuff.debuffs[i].stacks:SetShadowColor(0, 0, 0) + pfUI.uf.target.debuff.debuffs[i].stacks:SetShadowOffset(0.8, -0.8) + pfUI.uf.target.debuff.debuffs[i].stacks:SetTextColor(1,1,.5) + pfUI.uf.target.debuff.debuffs[i]:RegisterForClicks("RightButtonUp") + pfUI.uf.target.debuff.debuffs[i]:ClearAllPoints() + + local row = 0; + local top = 0; + if i > 8 then row = 1 end + if pfUI.uf.target.buff.buffs[1]:IsShown() then top = top + 1 end + if pfUI.uf.target.buff.buffs[9]:IsShown() then top = top + 1 end + + pfUI.uf.target.debuff.debuffs[i]:SetPoint("BOTTOMLEFT", pfUI.uf.target, "TOPLEFT", + (i-8*row)*1 + (i-8*row)*pfUI.config.unitframes.debuff_size - pfUI.config.unitframes.debuff_size -1 , + 1*row + pfUI.config.unitframes.debuff_size*row +1 + (top*(pfUI.config.unitframes.debuff_size+1)) + ) + + pfUI.uf.target.debuff.debuffs[i]:SetWidth(pfUI.config.unitframes.debuff_size) + pfUI.uf.target.debuff.debuffs[i]:SetHeight(pfUI.config.unitframes.debuff_size) + pfUI.uf.target.debuff.debuffs[i]:SetNormalTexture(nil) + pfUI.uf.target.debuff.debuffs[i]:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetUnitDebuff("target", id) + end) + pfUI.uf.target.debuff.debuffs[i]:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + pfUI.uf.target.debuff.debuffs[i]:SetScript("OnClick", function() + CancelPlayerBuff(GetPlayerBuff(id-1,"HARMFUL")) + end) +end + +pfUI.uf.target.debuff.refreshBuffs = function () + for i=1, 16 do + local row = 0; + local top = 0; + if i > 8 then row = 1 end + if pfUI.uf.target.buff.buffs[1]:IsShown() then top = top + 1 end + if pfUI.uf.target.buff.buffs[9]:IsShown() then top = top + 1 end + + pfUI.uf.target.debuff.debuffs[i]:SetPoint("BOTTOMLEFT", pfUI.uf.target, "TOPLEFT", + (i-8*row)*1 + (i-8*row)*pfUI.config.unitframes.debuff_size - pfUI.config.unitframes.debuff_size -1 , + 1*row + pfUI.config.unitframes.debuff_size*row +1 + (top*(pfUI.config.unitframes.debuff_size+1)) + ) + local texture, stacks = UnitDebuff("target",i) + pfUI.uf.target.debuff.debuffs[i]:SetBackdrop( + { bgFile = texture, tile = false, tileSize = pfUI.config.unitframes.debuff_size, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border_col", edgeSize = 8, + insets = { left = 0, right = 0, top = 0, bottom = 0} + }) + + local _,_,dtype = UnitDebuff("target", i) + if dtype == "Magic" then + pfUI.uf.target.debuff.debuffs[i]:SetBackdropBorderColor(0,1,1,1) + elseif dtype == "Poison" then + pfUI.uf.target.debuff.debuffs[i]:SetBackdropBorderColor(0,1,0,1) + elseif dtype == "Curse" then + pfUI.uf.target.debuff.debuffs[i]:SetBackdropBorderColor(1,0,1,1) + else + pfUI.uf.target.debuff.debuffs[i]:SetBackdropBorderColor(1,0,0,1) + end + + if texture then + pfUI.uf.target.debuff.debuffs[i]:Show() + if stacks > 1 then + pfUI.uf.target.debuff.debuffs[i].stacks:SetText(stacks) + else + pfUI.uf.target.debuff.debuffs[i].stacks:SetText("") + end + else + pfUI.uf.target.debuff.debuffs[i]:Hide() + end + end +end diff --git a/modules/targettarget.lua b/modules/targettarget.lua new file mode 100644 index 00000000..29862e32 --- /dev/null +++ b/modules/targettarget.lua @@ -0,0 +1,118 @@ +pfUI.uf.targettargetNotify = CreateFrame("Button",nil,UIParent) +pfUI.uf.targettargetNotify:SetScript("OnUpdate", function() + if UnitExists("targettarget") then pfUI.uf.targettarget:Show() else pfUI.uf.targettarget:Hide() end + end) + +pfUI.uf.targettarget = CreateFrame("Button",nil,UIParent) +pfUI.uf.targettarget:Hide() + +pfUI.uf.targettarget:SetWidth(100) +pfUI.uf.targettarget:SetHeight(25) +pfUI.uf.targettarget:SetPoint("BOTTOM", UIParent , "BOTTOM", 0, 125) +pfUI.uf.targettarget:SetBackdrop(pfUI.backdrop) + +pfUI.uf.targettarget:RegisterForClicks('LeftButtonUp', 'RightButtonUp') +pfUI.uf.targettarget:SetScript("OnClick", function () + TargetUnit("targettarget") + end) +pfUI.uf.targettarget.bg = CreateFrame("Frame",nil,pfUI.uf.targettarget) +pfUI.uf.targettarget.bg = pfUI.uf.targettarget:CreateTexture(nil,"BACKGROUND") +pfUI.uf.targettarget.bg:SetAllPoints(pfUI.uf.targettarget) + +pfUI.uf.targettarget:SetScript("OnUpdate", function() + if not UnitExists("targettarget") then pfUI.uf.targettarget:Hide(); return end + + local color + if UnitIsPlayer("targettarget") then + _, class = UnitClass("targettarget") + color = RAID_CLASS_COLORS[class] + else + color = UnitReactionColor[UnitReaction("targettarget", "player")] + end + + pfUI.uf.targettarget.hp.bar:SetMinMaxValues(0, UnitHealthMax("targettarget")) + + local r, g, b = (color.r + .5) * .5, (color.g + .5) * .5, (color.b + .5) * .5 + + pfUI.uf.targettarget.hp.bar:SetStatusBarColor(r, g, b, UnitHealth("targettarget") / UnitHealthMax("targettarget") / 4 + .75) + pfUI.uf.targettarget.hp.text:SetTextColor(r+.3,g+.3,b+.3, 1) + pfUI.uf.targettarget.hp.text:SetText( UnitName("targettarget")) + + local display, real + display = pfUI.uf.targettarget.hp.bar:GetValue() + real = UnitHealth("targettarget") + diff = abs(real - display) + if display < real then + pfUI.uf.targettarget.hp.bar:SetValue(display + ceil(diff / pfUI.config.unitframes.animation_speed)) + elseif display > real then + pfUI.uf.targettarget.hp.bar:SetValue(display - ceil(diff / pfUI.config.unitframes.animation_speed)) + end + + PowerColor = ManaBarColor[UnitPowerType("targettarget")]; + pfUI.uf.targettarget.power.bar:SetStatusBarColor(PowerColor.r + .5, PowerColor.g +.5, PowerColor.b +.5, 1) + pfUI.uf.targettarget.power.bar:SetMinMaxValues(0, UnitManaMax("targettarget")) + + local display, real + display = pfUI.uf.targettarget.power.bar:GetValue() + real = UnitMana("targettarget") + diff = abs(real - display) + if display < real then + pfUI.uf.targettarget.power.bar:SetValue(display + ceil(diff / pfUI.config.unitframes.animation_speed)) + elseif display > real then + pfUI.uf.targettarget.power.bar:SetValue(display - ceil(diff / pfUI.config.unitframes.animation_speed)) + end + end) + +pfUI.uf.targettarget.hp = CreateFrame("Frame",nil, pfUI.uf.targettarget) +pfUI.uf.targettarget.hp:SetBackdrop(pfUI.backdrop) +pfUI.uf.targettarget.hp:SetPoint("TOPLEFT", pfUI.uf.targettarget, "TOPLEFT", 0, 0) +pfUI.uf.targettarget.hp:SetPoint("BOTTOMRIGHT", pfUI.uf.targettarget, "BOTTOMRIGHT", 0, 0) +pfUI.uf.targettarget.hp:SetPoint("TOP",pfUI.uf.targettarget,"TOP") +pfUI.uf.targettarget.hp.bar = CreateFrame("StatusBar", nil, pfUI.uf.targettarget.hp) +pfUI.uf.targettarget.hp.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") +pfUI.uf.targettarget.hp.bar:ClearAllPoints() +pfUI.uf.targettarget.hp.bar:SetPoint("TOPLEFT", pfUI.uf.targettarget.hp, "TOPLEFT", 3, -3) +pfUI.uf.targettarget.hp.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.targettarget.hp, "BOTTOMRIGHT", -3, 3) +pfUI.uf.targettarget.hp.bar:SetMinMaxValues(0, 100) +pfUI.uf.targettarget.hp.bar:SetValue(100) + +pfUI.uf.targettarget.hp.bar.portrait = CreateFrame("PlayerModel",nil,pfUI.uf.targettarget.hp.bar) +pfUI.uf.targettarget.hp.bar.portrait:SetAllPoints(pfUI.uf.targettarget.hp.bar) +pfUI.uf.targettarget.hp.bar.portrait:RegisterEvent("UNIT_PORTRAIT_UPDATE") +pfUI.uf.targettarget.hp.bar.portrait:RegisterEvent("UNIT_MODEL_CHANGED") +pfUI.uf.targettarget.hp.bar.portrait:RegisterEvent("PLAYER_ENTERING_WORLD") +pfUI.uf.targettarget.hp.bar.portrait:RegisterEvent("PLAYER_TARGET_CHANGED") + +pfUI.uf.targettarget.hp.bar.portrait:SetScript("OnEvent", function() this.update() end) +pfUI.uf.targettarget.hp.bar.portrait:SetScript("OnShow", function() this.update() end) + +pfUI.uf.targettarget.hp.bar.portrait.update = function () + pfUI.uf.targettarget.hp.bar.portrait:SetUnit("targettarget"); + pfUI.uf.targettarget.hp.bar.portrait:SetCamera(0) + pfUI.uf.targettarget.hp.bar.portrait:SetAlpha(0.10) +end + +pfUI.uf.targettarget.power = CreateFrame("Frame",nil, pfUI.uf.targettarget) +pfUI.uf.targettarget.power:SetBackdrop(pfUI.backdrop) +pfUI.uf.targettarget.power:SetPoint("TOPLEFT", pfUI.uf.targettarget.hp, "BOTTOMLEFT", 0, -3) +pfUI.uf.targettarget.power:SetPoint("TOPRIGHT", pfUI.uf.targettarget.hp, "BOTTOMRIGHT", 0, -3) +pfUI.uf.targettarget.power:SetHeight(8) +pfUI.uf.targettarget.power:SetPoint("TOPLEFT",pfUI.uf.targettarget.hp,"BOTTOMLEFT",0,3) +pfUI.uf.targettarget.power.bar = CreateFrame("StatusBar", nil, pfUI.uf.targettarget.power) +pfUI.uf.targettarget.power.bar:ClearAllPoints() +pfUI.uf.targettarget.power.bar:SetPoint("TOPLEFT", pfUI.uf.targettarget.power, "TOPLEFT", 3, -3) +pfUI.uf.targettarget.power.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.targettarget.power, "BOTTOMRIGHT", -3, 3) +pfUI.uf.targettarget.power.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") +pfUI.uf.targettarget.power.bar:SetBackdropColor(0,0,0,1) +pfUI.uf.targettarget.power.bar:SetStatusBarColor(0,0,0) +pfUI.uf.targettarget.power.bar:SetMinMaxValues(0, 100) +pfUI.uf.targettarget.power.bar:SetValue(100) + +pfUI.uf.targettarget.hp.text = pfUI.uf.targettarget.hp.bar:CreateFontString("Status", "LOW", "GameFontNormal") +pfUI.uf.targettarget.hp.text:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 8, "OUTLINE") +pfUI.uf.targettarget.hp.text:ClearAllPoints() +pfUI.uf.targettarget.hp.text:SetAllPoints(pfUI.uf.targettarget.hp.bar) +pfUI.uf.targettarget.hp.text:SetPoint("CENTER", 0, 0) +pfUI.uf.targettarget.hp.text:SetJustifyH("CENTER") +pfUI.uf.targettarget.hp.text:SetFontObject(GameFontWhite) +pfUI.uf.targettarget.hp.text:SetText("n/a") diff --git a/modules/uf_tukui.lua b/modules/uf_tukui.lua new file mode 100644 index 00000000..9aed8201 --- /dev/null +++ b/modules/uf_tukui.lua @@ -0,0 +1,25 @@ +if pfUI.config.unitframes.layout == "tukui" then + pfUI.uf.player.caption = CreateFrame("Frame",nil, pfUI.uf.player) + pfUI.uf.player.caption:SetBackdrop(pfUI.backdrop) + pfUI.uf.player.caption:SetHeight(18) + pfUI.uf.player.caption:SetPoint("TOPRIGHT",pfUI.uf.player,"BOTTOMRIGHT",0,-1) + pfUI.uf.player.caption:SetPoint("TOPLEFT",pfUI.uf.player,"BOTTOMLEFT",0,-1) + + pfUI.uf.player.hpText:SetParent(pfUI.uf.player.caption) + pfUI.uf.player.hpText:SetPoint("RIGHT",pfUI.uf.player.caption, "RIGHT", -3, 0) + + pfUI.uf.player.powerText:SetParent(pfUI.uf.player.caption) + pfUI.uf.player.powerText:SetPoint("LEFT",pfUI.uf.player.caption, "LEFT", 5, 0) + + pfUI.uf.target.caption = CreateFrame("Frame",nil, pfUI.uf.target) + pfUI.uf.target.caption:SetBackdrop(pfUI.backdrop) + pfUI.uf.target.caption:SetHeight(18) + pfUI.uf.target.caption:SetPoint("TOPRIGHT",pfUI.uf.target,"BOTTOMRIGHT",0,-1) + pfUI.uf.target.caption:SetPoint("TOPLEFT",pfUI.uf.target,"BOTTOMLEFT",0,-1) + + pfUI.uf.target.hpText:SetParent(pfUI.uf.target.caption) + pfUI.uf.target.hpText:SetPoint("RIGHT",pfUI.uf.target.caption, "RIGHT", -3, 0) + + pfUI.uf.target.powerText:SetParent(pfUI.uf.target.caption) + pfUI.uf.target.powerText:SetPoint("LEFT",pfUI.uf.target.caption, "LEFT", 5, 0) +end diff --git a/modules/xpbar.lua b/modules/xpbar.lua new file mode 100644 index 00000000..bda00dc3 --- /dev/null +++ b/modules/xpbar.lua @@ -0,0 +1,137 @@ +pfUI.xp = CreateFrame("Frame",nil, pfUI.bars.bottom) +pfUI.xp:SetWidth(10) +pfUI.xp:SetPoint("TOPLEFT",pfUI.chat.left,"TOPRIGHT", 1, 0) +pfUI.xp:SetPoint("BOTTOMLEFT",pfUI.chat.left,"BOTTOMRIGHT",1, 0) +pfUI.xp:SetFrameStrata("BACKGROUND") +pfUI.xp:SetBackdrop(pfUI.backdrop) +pfUI.xp:RegisterEvent("PLAYER_LEVEL_UP") +pfUI.xp:RegisterEvent("PLAYER_XP_UPDATE") +pfUI.xp:RegisterEvent("PLAYER_ENTERING_WORLD") + +pfUI.xp:SetScript("OnEvent", function() + if UnitXPMax("player") ~= 0 then + pfUI.xp.bar:SetMinMaxValues(0, UnitXPMax("player")) + pfUI.xp.bar:SetValue(UnitXP("player")) + if GetXPExhaustion() then + pfUI.xp.restedbar:Show() + pfUI.xp.restedbar:SetMinMaxValues(0, UnitXPMax("player")) + pfUI.xp.restedbar:SetValue(UnitXP("player") + GetXPExhaustion()) + pfUI.xp.restedbar:SetAlpha(pfUI.xp:GetAlpha()/2) + else + pfUI.xp.restedbar:Hide() + end + pfUI.xp:SetAlpha(1) + pfUI.xp.tick = GetTime() + 3.00 + + else + pfUI.xp:Hide(0) + end + end) + +pfUI.xp:SetScript("OnUpdate",function() + if pfUI.xp:GetAlpha() == 0 or pfUI.xp.mouseover == true then return end + if not pfUI.xp.tick then + pfUI.xp.tick = GetTime() + 0.01 + end + + if GetTime() >= pfUI.xp.tick then + pfUI.xp.tick = nil + pfUI.xp:SetAlpha(pfUI.xp:GetAlpha() - .05) + pfUI.xp.restedbar:SetAlpha(pfUI.xp:GetAlpha()/2) + end + end); + +pfUI.xp:EnableMouse() +pfUI.xp:SetScript("OnEnter", function() + pfUI.xp.mouseover = true + pfUI.xp:SetAlpha(1) + pfUI.xp.restedbar:SetAlpha(pfUI.xp:GetAlpha()/2) + + end) + +pfUI.xp:SetScript("OnLeave", function() + pfUI.xp.mouseover = false + pfUI.xp.tick = GetTime() + 3.00 + end) + +pfUI.xp.bar = CreateFrame("StatusBar", nil, pfUI.xp) +pfUI.xp.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") +pfUI.xp.bar:ClearAllPoints() +pfUI.xp.bar:SetPoint("TOPLEFT", pfUI.xp, "TOPLEFT", 3, -3) +pfUI.xp.bar:SetPoint("BOTTOMRIGHT", pfUI.xp, "BOTTOMRIGHT", -3, 3) +pfUI.xp.bar:SetStatusBarColor(.25,.25,1,1) +pfUI.xp.bar:SetMinMaxValues(0, 100) +pfUI.xp.bar:SetOrientation("VERTICAL") +pfUI.xp.bar:SetValue(59) + +pfUI.xp.restedbar = CreateFrame("StatusBar", nil, pfUI.xp) +pfUI.xp.restedbar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") +pfUI.xp.restedbar:ClearAllPoints() +pfUI.xp.restedbar:SetPoint("TOPLEFT", pfUI.xp, "TOPLEFT", 3, -3) +pfUI.xp.restedbar:SetPoint("BOTTOMRIGHT", pfUI.xp, "BOTTOMRIGHT", -3, 3) +pfUI.xp.restedbar:SetFrameStrata("HIGH") +pfUI.xp.restedbar:SetStatusBarColor(1,.25,1,1) +pfUI.xp.restedbar:SetMinMaxValues(0, 100) +pfUI.xp.restedbar:SetOrientation("VERTICAL") + +pfUI.rep = CreateFrame("Frame",nil, pfUI.bars.bottom) +pfUI.rep:SetWidth(10) +pfUI.rep:SetPoint("TOPRIGHT",pfUI.chat.right,"TOPLEFT", -1, 0) +pfUI.rep:SetPoint("BOTTOMRIGHT",pfUI.chat.right,"BOTTOMLEFT",-1, 0) +pfUI.rep:SetFrameStrata("BACKGROUND") +pfUI.rep:SetBackdrop(pfUI.backdrop) + +pfUI.rep.bar = CreateFrame("StatusBar", nil, pfUI.rep) +pfUI.rep.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") +pfUI.rep.bar:ClearAllPoints() +pfUI.rep.bar:SetPoint("TOPLEFT", pfUI.rep, "TOPLEFT", 3, -3) +pfUI.rep.bar:SetPoint("BOTTOMRIGHT", pfUI.rep, "BOTTOMRIGHT", -3, 3) +pfUI.rep.bar:SetMinMaxValues(0, 100) +pfUI.rep.bar:SetOrientation("VERTICAL") +pfUI.rep.bar:SetValue(59) + +pfUI.rep:RegisterEvent("UPDATE_FACTION") +pfUI.rep:RegisterEvent("PLAYER_ENTERING_WORLD") + +pfUI.rep:SetScript("OnEvent", function() + pfUI.rep:SetAlpha(0) + for i=1, GetNumFactions() do + local name, description, standingID, barMin, barMax, barValue, atWarWith, canToggleAtWar, isHeader, isCollapsed, isWatched = GetFactionInfo(i); + if isWatched then + barMax = barMax - barMin; + barValue = barValue - barMin; + barMin = 0; + + pfUI.rep.bar:SetMinMaxValues(barMin, barMax) + pfUI.rep.bar:SetValue(barValue) + local color = FACTION_BAR_COLORS[standingID]; + pfUI.rep.bar:SetStatusBarColor((color.r + .5) * .5, (color.g + .5) * .5, (color.b + .5) * .5, 1) + pfUI.rep:SetAlpha(1) + pfUI.rep.tick = GetTime() + 3.00 + + end + end + end) + +pfUI.rep:SetScript("OnUpdate",function() + if pfUI.rep:GetAlpha() == 0 or pfUI.rep.mouseover == true then return end + if not pfUI.rep.tick then + pfUI.rep.tick = GetTime() + 0.01 + end + + if GetTime() >= pfUI.rep.tick then + pfUI.rep.tick = nil + pfUI.rep:SetAlpha(pfUI.rep:GetAlpha() - .05) + end + end) + +pfUI.rep:EnableMouse() +pfUI.rep:SetScript("OnEnter", function() + pfUI.rep.mouseover = true + pfUI.rep:SetAlpha(1) + end) + +pfUI.rep:SetScript("OnLeave", function() + pfUI.rep.mouseover = false + pfUI.rep.tick = GetTime() + 3.00 + end) diff --git a/pfUI.lua b/pfUI.lua new file mode 100644 index 00000000..2712cc76 --- /dev/null +++ b/pfUI.lua @@ -0,0 +1,97 @@ +SLASH_RELOAD1 = '/rl'; -- 3. +function SlashCmdList.RELOAD(msg, editbox) -- 4. + ReloadUI() +end + +pfUI = CreateFrame("Frame",nil,UIParent) +pfUI.backdrop = { + bgFile = "Interface\\AddOns\\pfUI\\img\\bg", tile = true, tileSize = 8, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border", edgeSize = 8, + insets = {left = 0, right = 0, top = 0, bottom = 0}, +} + +pfUI.backdrop_gitter = { + bgFile = "Interface\\AddOns\\pfUI\\img\\gitter", tile = true, tileSize = 8, +} + +pfUI.backdrop_col = { + bgFile = "Interface\\AddOns\\pfUI\\img\\bg", tile = true, tileSize = 8, + edgeFile = "Interface\\AddOns\\pfUI\\img\\border_col", edgeSize = 8, + insets = {left = 0, right = 0, top = 0, bottom = 0}, +} + +pfUI.playerDB = {} + +pfUI.config = { + ["unitframes"] = { + animation_speed = 1, + buff_size = "22", + debuff_size = "22", + layout = "default", + width = 200, + height = 50, + pheight = 10, + }, + ["bars"] = { + icon_size = "22", + border = 2, + } +} + +function moveit() + -- don't call it "grid" to avoid confusion with grid (addon) module + pfUI.gitter = CreateFrame("Frame", nil, UIParent) + pfUI.gitter:SetFrameStrata("BACKGROUND") + pfUI.gitter:SetPoint("TOPLEFT", 0, 0, "TOPLEFT") + pfUI.gitter:SetPoint("BOTTOMRIGHT", 0, 0, "BOTTOMRIGHT") + pfUI.gitter:SetBackdrop(pfUI.backdrop_gitter) + pfUI.gitter:SetBackdropColor(0,0,0,1) + + local movable = { pfUI.minimap, pfUI.chat.left, pfUI.chat.right, + pfUI.uf.player, pfUI.uf.target, pfUI.uf.targettarget, pfUI.uf.pet, + pfUI.bars.shapeshift, pfUI.bars.bottomleft, pfUI.bars.bottomright, + pfUI.bars.vertical, pfUI.bars.pet, pfUI.bars.bottom } + + for _,frame in pairs(movable) do + local frame = frame + frame:Show() + frame:SetMovable(true) + + frame.drag = CreateFrame("Frame", nil, frame) + frame.drag:SetAllPoints(frame) + frame.drag:SetFrameStrata("DIALOG") + frame.drag.bg = frame.drag:CreateTexture() + frame.drag.bg:SetAllPoints(frame.drag) + frame.drag.bg:SetTexture(.2,1,.8,1) + frame.drag:SetAlpha(.25) + frame.drag:EnableMouse(true) + + frame.drag:SetScript("OnMouseDown",function() + frame:StartMoving() + end) + + frame.drag:SetScript("OnMouseUp",function() + frame:StopMovingOrSizing() + end) + end +end + +pfUI.cache = CreateFrame("Frame",nil,UIParent) +pfUI.cache:RegisterEvent("PLAYER_ENTERING_WORLD") +pfUI.cache:SetScript("OnEvent", function() + _, class = UnitClass("player") + local color = RAID_CLASS_COLORS[class] + pfUI.cache.class_r, pfUI.cache.class_g, pfUI.cache.class_b = (color.r + .5) * .5, (color.g + .5) * .5, (color.b + .5) * .5 + + end) + +message = function (msg) + DEFAULT_CHAT_FRAME:AddMessage("|cffcccc33INFO: |cffffff55"..msg) +end + +ScriptErrors:SetScript("OnShow", function(msg) + DEFAULT_CHAT_FRAME:AddMessage("|cffcc3333ERROR: |cffff5555"..ScriptErrors_Message:GetText()) + ScriptErrors:Hide() + end) + +pfUI.uf = CreateFrame("Frame",nil,UIParent) diff --git a/pfUI.toc b/pfUI.toc new file mode 100644 index 00000000..d521f2fa --- /dev/null +++ b/pfUI.toc @@ -0,0 +1,28 @@ +## Interface: 11200 +## Title: |cff33ffccpf|cffffffffUI +## Author: Eric (Shagu) Mauser, 2016 +## Notes: An User Intface written completely from scratch +## Version: 0.1 BETA +# XXSavedVariables: pfUI.config, pfUI.playerDB + +# main +pfUI.lua + +env\colors.lua +env\locales.lua + +modules\actionbar.lua +modules\chat.lua +modules\font.lua +modules\panel.lua +modules\player.lua +modules\target.lua +modules\targettarget.lua +modules\pet.lua +modules\minimap.lua +modules\skin.lua +modules\xpbar.lua +modules\autoshift.lua +modules\bags.lua +modules\cooldown.lua +modules\uf_tukui.lua \ No newline at end of file