From 2cbc42b0300c4ae7be2fea84783d472f7db39a24 Mon Sep 17 00:00:00 2001 From: Eric Mauser Date: Sun, 10 Jul 2016 19:56:44 +0200 Subject: [PATCH] add initial group frames --- modules/group.lua | 209 ++++++++++++++++++++++++++++++++++++++++++++++ modules/gui.lua | 3 +- pfUI.toc | 1 + 3 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 modules/group.lua diff --git a/modules/group.lua b/modules/group.lua new file mode 100644 index 00000000..14293b2d --- /dev/null +++ b/modules/group.lua @@ -0,0 +1,209 @@ +pfUI:RegisterModule("group", function () + pfUI.uf.group = CreateFrame("Button","pfGroup",UIParent) + pfUI.uf.group:Hide() + pfUI.uf.group:RegisterEvent("PARTY_MEMBERS_CHANGED"); + pfUI.uf.group:RegisterEvent("PARTY_LEADER_CHANGED"); + pfUI.uf.group:RegisterEvent("PARTY_MEMBER_ENABLE"); + pfUI.uf.group:RegisterEvent("PARTY_MEMBER_DISABLE"); + pfUI.uf.group:RegisterEvent("PARTY_LOOT_METHOD_CHANGED"); + pfUI.uf.group:RegisterEvent("UNIT_FACTION"); + pfUI.uf.group:RegisterEvent("UNIT_AURA"); + pfUI.uf.group:RegisterEvent("UNIT_PET"); + pfUI.uf.group:RegisterEvent("VARIABLES_LOADED"); + pfUI.uf.group:RegisterEvent("RAID_ROSTER_UPDATE"); + pfUI.uf.group:RegisterEvent("GROUP_ROSTER_UPDATE"); + + pfUI.uf.group:SetScript("OnEvent", function() + PartyMemberBackground:Hide() + + for i=1, 5 do + if getglobal("PartyMemberFrame" .. i) then + getglobal("PartyMemberFrame" .. i):Hide() + end + + if GetNumPartyMembers() >= i then + pfUI.uf.group[i]:Show() + if UnitIsConnected("party"..i) then + pfUI.uf.group[i]:SetAlpha(1) + else + pfUI.uf.group[i]:SetAlpha(.25) + end + + if UnitIsPartyLeader("party"..i) then + pfUI.uf.group[i].hp.leaderIcon:Show() + else + pfUI.uf.group[i].hp.leaderIcon:Hide() + end + + local _, lootmaster = GetLootMethod() + if lootmaster and pfUI.uf.group[i].id == lootmaster then + pfUI.uf.group[i].hp.lootIcon:Show() + else + pfUI.uf.group[i].hp.lootIcon:Hide() + end + else + if pfUI.uf.group[i] then + pfUI.uf.group[i]:Hide() + end + end + end + end) + + for i=1, 5 do + pfUI.uf.group[i] = CreateFrame("Button","pfGroup" .. i,UIParent) + + pfUI.uf.group[i]:SetWidth(175) + pfUI.uf.group[i]:SetHeight(40) + pfUI.uf.group[i]:SetPoint("TOPLEFT", 5, -5 - ((i-1)*55)) + pfUI.utils:loadPosition(pfUI.uf.group[i]) + pfUI.uf.group[i]:Hide() + pfUI.uf.group[i].id = i + + pfUI.uf.group[i].hp = CreateFrame("Frame",nil, pfUI.uf.group[i]) + pfUI.uf.group[i].hp:SetBackdrop(pfUI.backdrop) + pfUI.uf.group[i].hp:SetHeight(30) + pfUI.uf.group[i].hp:SetPoint("TOPLEFT",pfUI.uf.group[i],"TOPLEFT") + pfUI.uf.group[i].hp:SetPoint("TOPRIGHT",pfUI.uf.group[i],"TOPRIGHT") + + pfUI.uf.group[i].hp.bar = CreateFrame("StatusBar", nil, pfUI.uf.group[i].hp) + pfUI.uf.group[i].hp.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") + + pfUI.uf.group[i].hp.bar:ClearAllPoints() + pfUI.uf.group[i].hp.bar:SetPoint("TOPLEFT", pfUI.uf.group[i].hp, "TOPLEFT", 3, -3) + pfUI.uf.group[i].hp.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.group[i].hp, "BOTTOMRIGHT", -3, 3) + + pfUI.uf.group[i].hp.bar:SetStatusBarColor(0,1,0) + pfUI.uf.group[i].hp.bar:SetMinMaxValues(0, 100) + pfUI.uf.group[i].hp.bar:SetValue(i*10) + + pfUI.uf.group[i].power = CreateFrame("Frame",nil, pfUI.uf.group[i]) + pfUI.uf.group[i].power:SetBackdrop(pfUI.backdrop) + pfUI.uf.group[i].power:SetPoint("TOPLEFT",pfUI.uf.group[i].hp,"BOTTOMLEFT",0,3) + pfUI.uf.group[i].power:SetPoint("BOTTOMRIGHT",pfUI.uf.group[i],"BOTTOMRIGHT",0,0) + + pfUI.uf.group[i].power.bar = CreateFrame("StatusBar", nil, pfUI.uf.group[i].power) + pfUI.uf.group[i].power.bar:ClearAllPoints() + pfUI.uf.group[i].power.bar:SetPoint("TOPLEFT", pfUI.uf.group[i].power, "TOPLEFT", 3, -3) + pfUI.uf.group[i].power.bar:SetPoint("BOTTOMRIGHT", pfUI.uf.group[i].power, "BOTTOMRIGHT", -3, 3) + pfUI.uf.group[i].power.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") + + pfUI.uf.group[i].power.bar:SetStatusBarColor(1,0,0) + pfUI.uf.group[i].power.bar:SetMinMaxValues(0, 100) + pfUI.uf.group[i].power.bar:SetValue(i*20) + + pfUI.uf.group[i].caption = pfUI.uf.group[i]:CreateFontString("Status", "HIGH", "GameFontNormal") + pfUI.uf.group[i].caption:SetFont("Interface\\AddOns\\pfUI\\fonts\\homespun.ttf", 10, "OUTLINE") + pfUI.uf.group[i].caption:ClearAllPoints() + pfUI.uf.group[i].caption:SetParent(pfUI.uf.group[i].hp.bar) + pfUI.uf.group[i].caption:SetPoint("LEFT",pfUI.uf.group[i].hp.bar, "LEFT", 10, 0) + pfUI.uf.group[i].caption:SetJustifyH("LEFT") + pfUI.uf.group[i].caption:SetFontObject(GameFontWhite) + pfUI.uf.group[i].caption:SetText("NAME") + + pfUI.uf.group[i].hp.leaderIcon = CreateFrame("Frame",nil,pfUI.uf.group[i].hp) + pfUI.uf.group[i].hp.leaderIcon:SetFrameStrata("HIGH") + pfUI.uf.group[i].hp.leaderIcon:SetWidth(10) -- Set these to whatever height/width is needed + pfUI.uf.group[i].hp.leaderIcon:SetHeight(10) -- for your Texture + pfUI.uf.group[i].hp.leaderIcon.texture = pfUI.uf.group[i].hp.leaderIcon:CreateTexture(nil,"BACKGROUND") + pfUI.uf.group[i].hp.leaderIcon.texture:SetTexture("Interface\\GROUPFRAME\\UI-Group-LeaderIcon") + pfUI.uf.group[i].hp.leaderIcon.texture:SetAllPoints(pfUI.uf.group[i].hp.leaderIcon) + pfUI.uf.group[i].hp.leaderIcon:SetPoint("TOPLEFT", pfUI.uf.group[i].hp, "TOPLEFT", -4, 4) + pfUI.uf.group[i].hp.leaderIcon:Hide() + + pfUI.uf.group[i].hp.lootIcon = CreateFrame("Frame",nil,pfUI.uf.group[i].hp) + pfUI.uf.group[i].hp.lootIcon:SetFrameStrata("HIGH") + pfUI.uf.group[i].hp.lootIcon:SetWidth(10) -- Set these to whatever height/width is needed + pfUI.uf.group[i].hp.lootIcon:SetHeight(10) -- for your Texture + pfUI.uf.group[i].hp.lootIcon.texture = pfUI.uf.group[i].hp.lootIcon:CreateTexture(nil,"BACKGROUND") + pfUI.uf.group[i].hp.lootIcon.texture:SetTexture("Interface\\GROUPFRAME\\UI-Group-MasterLooter") + pfUI.uf.group[i].hp.lootIcon.texture:SetAllPoints(pfUI.uf.group[i].hp.lootIcon) + pfUI.uf.group[i].hp.lootIcon:SetPoint("TOPLEFT", pfUI.uf.group[i].hp, "LEFT", -4, 4) + pfUI.uf.group[i].hp.lootIcon:Hide() + + pfUI.uf.group[i]:RegisterEvent("RAID_ROSTER_UPDATE") + pfUI.uf.group[i]:RegisterForClicks('LeftButtonUp', 'RightButtonUp') + + pfUI.uf.group[i]:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_NONE"); + GameTooltip:SetUnit("party" .. this.id); + GameTooltip:Show() + + end) + + pfUI.uf.group[i]:SetScript("OnClick", function () + if ( SpellIsTargeting() and arg1 == "RightButton" ) then + SpellStopTargeting(); + return; + end + + if ( arg1 == "LeftButton" ) then + if ( SpellIsTargeting() ) then + SpellTargetUnit("party" .. this.id); + elseif ( CursorHasItem() ) then + DropItemOnUnit("party" .. this.id); + else + TargetUnit("party" .. this.id); + end + else + local x, y = GetCursorPosition(); + ToggleDropDownMenu(1, nil, getglobal("PartyMemberFrame" .. this.id .. "DropDown"), "cursor") + end + end) + + pfUI.uf.group[i]:SetScript("OnUpdate", function () + if CheckInteractDistance("party" .. this.id, 4) then + this:SetAlpha(1) + else + this:SetAlpha(.5) + end + + if UnitIsConnected("party" .. this.id) then + this.hp.bar:SetMinMaxValues(0, UnitHealthMax("party"..this.id)) + this.power.bar:SetMinMaxValues(0, UnitManaMax("party"..this.id)) + + local hpDisplay = this.hp.bar:GetValue() + local hpReal = UnitHealth("party"..this.id) + local hpDiff = abs(hpReal - hpDisplay) + + if hpDisplay < hpReal then + this.hp.bar:SetValue(hpDisplay + ceil(hpDiff / pfUI_config.unitframes.animation_speed)) + elseif hpDisplay > hpReal then + this.hp.bar:SetValue(hpDisplay - ceil(hpDiff / pfUI_config.unitframes.animation_speed)) + end + + local powerDisplay = this.power.bar:GetValue() + local powerReal = UnitMana("party"..this.id) + local powerDiff = abs(powerReal - powerDisplay) + + if powerDisplay < powerReal then + this.power.bar:SetValue(powerDisplay + ceil(powerDiff / pfUI_config.unitframes.animation_speed)) + elseif powerDisplay > powerReal then + this.power.bar:SetValue(powerDisplay - ceil(powerDiff / pfUI_config.unitframes.animation_speed)) + end + + _, class = UnitClass("party"..this.id) + local c = RAID_CLASS_COLORS[class] + local cr, cg, cb = 0, 0, 0 + if c then cr, cg, cb =(c.r + .5) * .5, (c.g + .5) * .5, (c.b + .5) * .5 end + + this.hp.bar:SetStatusBarColor(cr, cg, cb) + + local pcolor = ManaBarColor[UnitPowerType("party"..this.id)]; + this.power.bar:SetStatusBarColor(pcolor.r + .5, pcolor.g +.5, pcolor.b +.5, 1) + + this.caption:SetText(UnitName("party"..this.id)) + + else + this.hp.bar:SetMinMaxValues(0, 100) + this.power.bar:SetMinMaxValues(0, 100) + this.hp.bar:SetValue(0) + this.power.bar:SetValue(0) + local name = UnitName("party"..this.id) + if name then + this.caption:SetText("[OFF]" .. name) + end + end + end) + end + +end) diff --git a/modules/gui.lua b/modules/gui.lua index 13860efb..cad08a6f 100644 --- a/modules/gui.lua +++ b/modules/gui.lua @@ -83,7 +83,8 @@ pfUI:RegisterModule("gui", function () 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, pfUI.panel.minimap } + pfUI.bars.vertical, pfUI.bars.pet, pfUI.bars.bottom, pfUI.panel.minimap, + pfUI.uf.group[1], pfUI.uf.group[2], pfUI.uf.group[3], pfUI.uf.group[4] } if not pfUI.gitter then pfUI.gitter = CreateFrame("Frame", nil, UIParent) diff --git a/pfUI.toc b/pfUI.toc index 962d83f1..0e86c490 100644 --- a/pfUI.toc +++ b/pfUI.toc @@ -23,6 +23,7 @@ modules\player.lua modules\target.lua modules\targettarget.lua modules\pet.lua +modules\group.lua modules\minimap.lua modules\skin.lua modules\xpbar.lua