From 21ec2b82f52cd53a22ef9bd3438b3e8c4f83dd11 Mon Sep 17 00:00:00 2001 From: "F. Dekker" Date: Sun, 21 Apr 2013 13:53:12 +0200 Subject: [PATCH] Dungeons roles --- Localization.enUS.lua | 4 ++ PerfectRaid.lua | 4 +- PerfectRaid.toc | 1 + PerfectRaid_Config.lua | 39 +++++++++++++++-- PerfectRaid_Roles.lua | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 154 insertions(+), 4 deletions(-) create mode 100644 PerfectRaid_Roles.lua diff --git a/Localization.enUS.lua b/Localization.enUS.lua index df35232..6781956 100644 --- a/Localization.enUS.lua +++ b/Localization.enUS.lua @@ -159,6 +159,8 @@ PerfectRaidLocals = { ["Save"] = "Save", ["Shadow Protection"] = "Shadow Protection", ["Shaman"] = "Shaman", + ["Show damagers"] = "Show damagers", + ["Show healers"] = "Show healers", ["Show HP deficit"] = "Show HP deficit", ["Show frame in raid"] = "Show frame in raid", ["Show frame when solo"] = "Show frame when solo", @@ -167,6 +169,8 @@ PerfectRaidLocals = { ["Show options GUI"] = "Show options GUI", ["Show player in frame"] = "Show player in frame", ["Show raid icons"] = "Show raid icons", + ["Show raid roles"] = "Show raid roles", + ["Show tanks"] = "Show tanks", ["Show unit tooltip on mouseover"] = "Show unit tooltip on mouseover", ["Sort Frames By:"] = "Sort Frames By:", ["Soulstone Resurrection"] = "Soulstone Resurrection", diff --git a/PerfectRaid.lua b/PerfectRaid.lua index 8cc4dcf..e24dafa 100644 --- a/PerfectRaid.lua +++ b/PerfectRaid.lua @@ -63,7 +63,9 @@ function PerfectRaid:Initialize() clickcast = true, locked = false, showraidicons = true, - raidiconposition = "LNAME", + raidiconposition = "MHBAR", + showroles = true, + showroletank = true, highlight = { mouseover = true, tooltip = false, diff --git a/PerfectRaid.toc b/PerfectRaid.toc index 33a2238..c1b6db7 100644 --- a/PerfectRaid.toc +++ b/PerfectRaid.toc @@ -28,3 +28,4 @@ PerfectRaid_Range.lua PerfectRaid_Highlight.lua PerfectRaid_Config.lua PerfectRaid_RaidIcons.lua +PerfectRaid_Roles.lua diff --git a/PerfectRaid_Config.lua b/PerfectRaid_Config.lua index 5abaf80..5dc5cab 100644 --- a/PerfectRaid_Config.lua +++ b/PerfectRaid_Config.lua @@ -67,10 +67,30 @@ function Config:CreateOptions(opt) check.Label:SetText(L["Lock frames"]) table.insert(options.widgets, check) + local roles = CreateFrame("CheckButton", "PRConfig_RaidRole", options, "PRCheckTemplate") + roles.Label:SetText(L["Show raid roles"]) + roles:Show(); + roles:SetPoint( "TOPRIGHT", -160, 0 ) + + local role1 = CreateFrame("CheckButton", "PRConfig_RaidRoleTank", options, "PRCheckTemplate") + role1.Label:SetText(L["Show tanks"]) + role1:Show(); + role1:SetPoint( "TOPLEFT", roles, "BOTTOMLEFT", 25, 0) + + local role2 = CreateFrame("CheckButton", "PRConfig_RaidRoleDamager", options, "PRCheckTemplate") + role2.Label:SetText(L["Show damagers"]) + role2:Show(); + role2:SetPoint( "TOPLEFT", role1, "BOTTOMLEFT", 0, 0) + + local role3 = CreateFrame("CheckButton", "PRConfig_RaidRoleHealer", options, "PRCheckTemplate") + role3.Label:SetText(L["Show healers"]) + role3:Show(); + role3:SetPoint( "TOPLEFT", role2, "BOTTOMLEFT", 0, 0) + local check = CreateFrame("CheckButton", "PRConfig_RaidIcons", options, "PRCheckTemplate") check.Label:SetText(L["Show raid icons"]) - table.insert(options.widgets, check) - + table.insert(options.widgets, check) + local iconPositionDropDown = CreateFrame("Frame", "PRConfig_IconPositionDropDown", options, "UIDropDownMenuTemplate") local clickFunc = function(self) UIDropDownMenu_SetSelectedValue(iconPositionDropDown, self.value) end iconPositionDropDown.Initialize = function() @@ -105,6 +125,10 @@ function Config:CreateOptions(opt) local clickCast = PRConfig_ClickCast:GetChecked() and true or false local locked = PRConfig_Lock:GetChecked() and true or false local showRaidIcons = PRConfig_RaidIcons:GetChecked() and true or false + local showRoles = PRConfig_RaidRole:GetChecked() and true or false + local showRoleTank = PRConfig_RaidRoleTank:GetChecked() and true or false + local showRoleDamager = PRConfig_RaidRoleDamager:GetChecked() and true or false + local showRoleHealer = PRConfig_RaidRoleHealer:GetChecked() and true or false local raidIconPosition = UIDropDownMenu_GetSelectedValue(PRConfig_IconPositionDropDown) PerfectRaid.db.profile.hideparty = hideParty @@ -112,6 +136,10 @@ function Config:CreateOptions(opt) PerfectRaid.db.profile.clickcast = clickCast PerfectRaid.db.profile.locked = locked PerfectRaid.db.profile.showraidicons = showRaidIcons + PerfectRaid.db.profile.showroles = showRoles + PerfectRaid.db.profile.showroletank = showRoleTank + PerfectRaid.db.profile.showroledamager = showRoleDamager + PerfectRaid.db.profile.showrolehealer = showRoleHealer PerfectRaid.db.profile.raidiconposition = raidIconPosition PerfectRaid:TriggerMessage("PERFECTRAID_CONFIG_CHANGED") @@ -124,6 +152,10 @@ function Config:CreateOptions(opt) PRConfig_ClickCast:SetChecked(PerfectRaid.db.profile.clickcast) PRConfig_Lock:SetChecked(PerfectRaid.db.profile.locked) PRConfig_RaidIcons:SetChecked(PerfectRaid.db.profile.showraidicons) + PRConfig_RaidRole:SetChecked(PerfectRaid.db.profile.showroles) + PRConfig_RaidRoleTank:SetChecked(PerfectRaid.db.profile.showroletank) + PRConfig_RaidRoleDamager:SetChecked(PerfectRaid.db.profile.showroledamager) + PRConfig_RaidRoleHealer:SetChecked(PerfectRaid.db.profile.showrolehealer) UIDropDownMenu_SetSelectedValue(PRConfig_IconPositionDropDown,PerfectRaid.db.profile.raidiconposition) end @@ -138,7 +170,8 @@ function Config:CreateOptions(opt) widget:SetPoint("TOPLEFT", options.widgets[idx - 1], "BOTTOMLEFT", 0, -15) end end - options.iconposition:Show(); + options.iconposition:Show(); + end local old_ShowPartyFrame = ShowPartyFrame diff --git a/PerfectRaid_Roles.lua b/PerfectRaid_Roles.lua new file mode 100644 index 0000000..f604eea --- /dev/null +++ b/PerfectRaid_Roles.lua @@ -0,0 +1,110 @@ +--[[------------------------------------------------------------------------- + * + * RaidRoles module for PerfectRaid addon. + * + * Written by: Panoramix + * Version: 1.0 + * +---------------------------------------------------------------------------]] + +local RaidRoles = PerfectRaid:NewModule("PerfectRaid-Roles") +local L = PerfectRaidLocals +local utils, frames + +function RaidRoles:Initialize() + + frames = PerfectRaid.frames + utils = PerfectRaid.utils + + self:RegisterMessage("DONGLE_PROFILE_CHANGED") + self:RegisterMessage("PERFECTRAID_CONFIG_CHANGED") +end + +-- Update Raid Roles when profiles changes +function RaidRoles:DONGLE_PROFILE_CHANGED(event, addon, svname, name) + if svname == "PerfectRaidDB" then + RaidRoles:ShowRaidRoles(PerfectRaid.db.profile.showroles) + end +end + +-- Update Raid Roles when config is changed +function RaidRoles:PERFECTRAID_CONFIG_CHANGED(event, addon, svname, name) + self:ShowRaidRoles(PerfectRaid.db.profile.showroles) +end + +-- Update Raid Roles when addon is enabled +function RaidRoles:Enable() + self:ShowRaidRoles(PerfectRaid.db.profile.showroles) +end + +-- Show/Hide raid icons depending on value +function RaidRoles:ShowRaidRoles(value) + if value then + self:RegisterEvent( "PLAYER_ROLES_ASSIGNED", "UpdateAllUnits" ) + else + self:UnregisterEvent("PLAYER_ROLES_ASSIGNED" ) + end + self:UpdateAllUnits() +end + +-- Request full update for all units +function RaidRoles:FullUpdate() + self:UpdateAllUnits() +end + +function RaidRoles:UpdateAllUnits() + + local showRoles = PerfectRaid.db.profile.showroles + local showTank = PerfectRaid.db.profile.showroletank + local showDamager = PerfectRaid.db.profile.showroledamager + local showHealer = PerfectRaid.db.profile.showrolehealer + + + for unit, tbl in pairs(frames) do + local role = UnitGroupRolesAssigned( unit ) + + if role == "NONE" then + if GetPartyAssignment("MAINTANK", unit) or GetPartyAssignment("MAINASSIST", unit) then + role = "TANK" + end + end + + if ( role and frames and frames[unit] ) then + + for frame in pairs( frames[unit] ) do + + -- create indicator and texture + if (not frame.raidrole) then + frame.raidrole = CreateFrame("Frame", nil, frame.leftbox) + frame.raidrole:SetHeight(frame:GetHeight() * 0.75) + frame.raidrole:SetWidth(frame:GetHeight() * 0.75) + frame.raidrole:SetFrameLevel(frame.leftbox:GetFrameLevel()+1) + frame.raidrole:SetParent(frame.leftbox) + frame.raidrole:SetPoint("RIGHT", -3-frame.name:GetWidth(), 0) + + frame.raidroletex = frame.raidrole:CreateTexture(nil, "OVERLAY") + frame.raidroletex:SetAllPoints() + frame.raidroletex:SetTexture("Interface\\LFGFrame\\UI-LFG-ICON-PORTRAITROLES") + end + + if ( showRoles and showTank and role == "TANK" ) then + frame.raidroletex:SetTexCoord(0, 19/64, 22/64, 41/64) + frame.raidroletex:Show() + + elseif ( showRoles and showHealer and role == "HEALER" ) then + frame.raidroletex:SetTexCoord(20/64, 39/64, 1/64, 20/64) + frame.raidroletex:Show() + + elseif ( showRoles and showDamager and role == "DAMAGER" ) then + frame.raidroletex:SetTexCoord(20/64, 39/64, 22/64, 41/64) + frame.raidroletex:Show() + + else + frame.raidroletex:Hide() + end + + end + end + + end +end -- 1.7.9.5