diff --git a/oUF_P3lim/oUF_P3lim.lua b/oUF_P3lim/oUF_P3lim.lua index b47a815..13a1a0b 100644 --- a/oUF_P3lim/oUF_P3lim.lua +++ b/oUF_P3lim/oUF_P3lim.lua @@ -1,11 +1,14 @@ -local string_format = string.format -local _, class = UnitClass('player') +local format = string.format +local floor = math.floor +local localized, class = UnitClass('player') local texture = [=[Interface\AddOns\oUF_P3lim\minimalist]=] local backdrop = { bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=], insets = {top = -1, left = -1, bottom = -1, right = -1}, } +local ptr = select(4, GetBuildInfo()) > 3e4 + local runeloadcolors = { [1] = {0.77, 0.12, 0.23}, [2] = {0.77, 0.12, 0.23}, @@ -24,9 +27,11 @@ local colors = setmetatable({ [4] = {1, 1, 0}, [5] = {0, 1, 0} }, {__index = oUF.colors.reaction}), + red = {1, 0, 0}, white = {1, 1, 1}, }, {__index = oUF.colors}) +-- find a possible fix for 'Set Focus' (if ever) local function menu(self) local unit = string.gsub(self.unit, '(.)', string.upper, 1) if(_G[unit..'FrameDropDown']) then @@ -36,31 +41,55 @@ end local function truncate(value) if(value >= 1e6) then - return string_format('%dm', value / 1e6) + return format('%dm', value / 1e6) elseif(value >= 1e4) then - return string_format('%dk', value / 1e3) + return format('%dk', value / 1e3) else return value end end -oUF.Tags['[colorpp]'] = function(unit) +oUF.TagEvents['[customstatus]'] = 'UNIT_HEALTH' +oUF.Tags['[customstatus]'] = function(unit) + return not UnitIsConnected(unit) and 'Offline' or UnitIsGhost(unit) and 'Ghost' or UnitIsDead(unit) and 'Dead' +end + +oUF.TagEvents['[customhp]'] = 'UNIT_HEALTH UNIT_MAXHEALTH' +oUF.Tags['[customhp]'] = function(unit) + local status = oUF.Tags['[customstatus]'](unit) + local min, max = UnitHealth(unit), UnitHealthMax(unit) + + return status and status or + (unit == 'target' and UnitCanAttack('player', unit)) and format('%s (%d|cff0090ff%%|r)', truncate(min), floor(min/max*100)) or + (unit == 'player' and min~=max) and format('|cffff8080%d|r %d|cff0090ff%%|r', min-max, floor(min/max*100)) or + (unit == 'pet' and min~=max) and format('%s |cff0090ff/|r %s', truncate(min), truncate(max)) or + (min~=max) and format('%s |cff0090ff/|r %s', min, max) or max +end + +oUF.TagEvents['[custompp]'] = oUF.TagEvents['[curpp]'] +oUF.Tags['[custompp]'] = function(unit) local num, str = UnitPowerType(unit) local c = colors.power[str] - return c and string_format('|cff%02x%02x%02x', c[1] * 255, c[2] * 255, c[3] * 255) + return format('|cff%02x%02x%02x%s|r', c[1] * 255, c[2] * 255, c[3] * 255, oUF.Tags['[curpp]'](unit)) end -oUF.Tags['[colorinfo]'] = function(unit) +oUF.TagEvents['[customname]'] = 'UNIT_NAME_UPDATE UNIT_REACTION UNIT_FACTION' +oUF.Tags['[customname]'] = function(unit) local c = (UnitIsTapped(unit) and not UnitIsTappedByPlayer(unit)) and colors.tapped or (not UnitIsConnected(unit)) and colors.disconnected or - (not UnitIsPlayer(unit)) and colors.reaction[UnitReaction(unit, 'player')] or colors.white + (not UnitIsPlayer(unit)) and colors.reaction[UnitReaction(unit, 'player')] or + (UnitFactionGroup(unit) and UnitIsPVP(unit)) and colors.red or colors.white - return c and string_format('|cff%02x%02x%02x', c[1] * 255, c[2] * 255, c[3] * 255) + return format('|cff%02x%02x%02x%s|r', c[1] * 255, c[2] * 255, c[3] * 255, UnitName(unit)) end -oUF.TagEvents['[colorinfo]'] = 'UNIT_REACTION' +oUF.TagEvents['[druidpower]'] = 'UNIT_MANA UPDATE_SHAPESHIFT_FORM' +oUF.Tags['[druidpower]'] = function(unit) + local min, max = UnitPower(unit, 0), UnitPowerMax(unit, 0) + return UnitPowerType(unit) ~= 0 and format('|cff0090ff%d - %d%%|r', min, math.floor(min / max * 100)) +end -local function UpdateMasterLooter(self) +local function updateMasterLooter(self) self.MasterLooter:ClearAllPoints() if((UnitInParty(self.unit) or UnitInRaid(self.unit)) and UnitIsPartyLeader(self.unit)) then self.MasterLooter:SetPoint('LEFT', self.Leader, 'RIGHT') @@ -69,39 +98,26 @@ local function UpdateMasterLooter(self) end end -local function UpdateDruidPower(self, event, unit) +local function updateDruidPower(self, event, unit) if(unit and unit ~= self.unit) then return end - local bar = self.DruidPower - local num, str = UnitPowerType('player') - local min = UnitPower('player', (num ~= 0) and 0 or 3) - local max = UnitPowerMax('player', (num ~= 0) and 0 or 3) - bar:SetMinMaxValues(0, max) + local mana = UnitPowerType('player') == 0 + local min, max = UnitPower('player', mana and 3 or 0), UnitPowerMax('player', mana and 3 or 0) - if(min ~= max) then - bar:SetValue(min) - bar:SetAlpha(1) - - if(num ~= 0) then - bar:SetStatusBarColor(unpack(colors.power['MANA'])) - bar.Text:SetFormattedText('%d - %d%%', min, math.floor(min / max * 100)) - else - bar:SetStatusBarColor(unpack(colors.power['ENERGY'])) - bar.Text:SetText() - end - else - bar:SetAlpha(0) - bar.Text:SetText() - end + bar:SetStatusBarColor(unpack(colors.power[mana and 'ENERGY' or 'MANA'])) + bar:SetMinMaxValues(0, max) + bar:SetValue(min) + bar:SetAlpha(min ~= max and 1 or 0) end -local function PostUpdateReputation(self, event, unit, bar) +local function updateReputationColor(self, event, unit, bar) local name, id = GetWatchedFactionInfo() bar:SetStatusBarColor(FACTION_BAR_COLORS[id].r, FACTION_BAR_COLORS[id].g, FACTION_BAR_COLORS[id].b) end -local function SetSecureWidth(self, value) +-- find a better way to do this, preferably cutting the portrait model +local function setPortraitWidth(self, value) if(value > 230) then self.Portrait:SetAlpha(0) else @@ -110,46 +126,20 @@ local function SetSecureWidth(self, value) end end -local function PostUpdateHealth(self, event, unit, bar, min, max) - bar:SetStatusBarColor(0.25, 0.25, 0.35) - if(not UnitIsConnected(unit)) then - bar.Text:SetText('Offline') - elseif(UnitIsDead(unit)) then - bar:SetValue(0) - bar.Text:SetText('Dead') - elseif(UnitIsGhost(unit)) then - bar:SetValue(0) - bar.Text:SetText('Ghost') - else - if(unit == 'target' and UnitCanAttack('player', 'target')) then - bar.Text:SetFormattedText('%s (%d|cff0090ff%%|r)', truncate(min), floor(min/max*100)) +-- need to do something else than this +local function updatePortrait(self, event, unit, bar, min, max) + if(self.Portrait) then + if(UnitIsDeadOrGhost(unit)) then + setPortraitWidth(self, 231) + elseif(min <= max) then + setPortraitWidth(self, 230 * min / max) else - if(min ~= max) then - if(unit == 'player') then - bar.Text:SetFormattedText('|cffff8080%d|r %d|cff0090ff%%|r', min-max, floor(min/max*100)) - elseif(unit == 'pet') then - bar.Text:SetFormattedText('%s |cff0090ff/|r %s', truncate(min), truncate(max)) - else - bar.Text:SetFormattedText('%s |cff0090ff/|r %s', min, max) - end - else - bar.Text:SetText(max) - end - end - - if(self.Portrait) then - if(UnitIsDeadOrGhost(unit)) then - SetSecureWidth(self, 231) - elseif(min <= max) then - SetSecureWidth(self, 230 * min / max) - else - SetSecureWidth(self, 230) - end + setPortraitWidth(self, 230) end end end -local function OverrideCastbarTime(self, duration) +local function castbarTime(self, duration) if(self.channeling) then self.Time:SetFormattedText('%.1f ', duration) elseif(self.casting) then @@ -157,7 +147,7 @@ local function OverrideCastbarTime(self, duration) end end -local function PostCreateAuraIcon(self, button, icons) +local function createAura(icons, button) icons.showDebuffType = true button.cd:SetReverse() button.overlay:SetTexture([=[Interface\AddOns\oUF_P3lim\border]=]) @@ -165,20 +155,32 @@ local function PostCreateAuraIcon(self, button, icons) button.overlay.Hide = function(self) self:SetVertexColor(0.25, 0.25, 0.25) end end -local function PostUpdateAuraIcon(self, icons, unit, icon, index, offset, filter, debuff) - if(debuff and UnitIsEnemy('player', unit)) then - local _, _, _, _, _, duration, _, isPlayer = UnitAura(unit, index, filter) - if(duration and duration > 0 and not isPlayer) then - icon.cd:Hide() +-- clean up in 3.1 +local function updateAura(icons, unit, icon, index) + if(icon.debuff and UnitIsEnemy('player', unit)) then + local _, _, _, _, _, duration, _, caster = UnitAura(unit, index, icon.filter) + if(ptr) then + if(caster ~= 'player' and caster ~= 'vehicle') then + icon.icon:SetDesaturated(true) + icon.overlay:SetVertexColor(0.25, 0.25, 0.25) + else + icon.icon:SetDesaturated(false) + end + else + if(duration and duration > 0 and not caster) then + icon.cd:Hide() + end end end end -local function CreateStyle(self, unit) +local function styleFunction(self, unit) self.colors = colors + self.menu = menu self:RegisterForClicks('AnyUp') self:SetAttribute('type2', 'menu') + self:SetScript('OnEnter', UnitFrame_OnEnter) self:SetScript('OnLeave', UnitFrame_OnLeave) @@ -189,180 +191,111 @@ local function CreateStyle(self, unit) self.Health:SetPoint('TOPRIGHT', self) self.Health:SetPoint('TOPLEFT', self) self.Health:SetStatusBarTexture(texture) - self.Health:SetHeight(22) + self.Health:SetStatusBarColor(0.25, 0.25, 0.35) + self.Health:SetHeight((unit == 'focus' or unit == 'targettarget') and 20 or 22) self.Health.frequentUpdates = true - self.Health.Text = self.Health:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallRight') - self.Health.Text:SetPoint('RIGHT', self.Health, -2, -1) - self.Health.bg = self.Health:CreateTexture(nil, 'BORDER') self.Health.bg:SetAllPoints(self.Health) self.Health.bg:SetTexture(0.3, 0.3, 0.3) - self.Power = CreateFrame('StatusBar', self:GetName()..'_power', self) - self.Power:SetPoint('TOPRIGHT', self.Health, 'BOTTOMRIGHT', 0, -1) - self.Power:SetPoint('TOPLEFT', self.Health, 'BOTTOMLEFT', 0, -1) - self.Power:SetStatusBarTexture(texture) - self.Power:SetHeight(4) - self.Power.frequentUpdates = true - - self.Power.colorTapping = true - self.Power.colorDisconnected = true - self.Power.colorClass = true - self.Power.colorReaction = true - - self.Power.bg = self.Power:CreateTexture(nil, 'BORDER') - self.Power.bg:SetAllPoints(self.Power) - self.Power.bg:SetTexture([=[Interface\ChatFrame\ChatFrameBackground]=]) - self.Power.bg.multiplier = 0.3 - - self.Leader = self.Health:CreateTexture(nil, 'OVERLAY') - self.Leader:SetPoint('TOPLEFT', self, 0, 8) - self.Leader:SetHeight(16) - self.Leader:SetWidth(16) + local hpvalue = self.Health:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallRight') + hpvalue:SetPoint('RIGHT', self.Health, -2, -1) + hpvalue.frequentUpdates = 0.1 + self:Tag(hpvalue, '[customhp]') self.RaidIcon = self.Health:CreateTexture(nil, 'OVERLAY') self.RaidIcon:SetPoint('TOP', self, 0, 8) self.RaidIcon:SetHeight(16) self.RaidIcon:SetWidth(16) - self.MasterLooter = self.Health:CreateTexture(nil, 'OVERLAY') - self.MasterLooter:SetPoint('LEFT', self.Leader, 'RIGHT') - self.MasterLooter:SetHeight(16) - self.MasterLooter:SetWidth(16) + if(unit ~= 'targettarget' and unit ~= 'focus') then + self.Power = CreateFrame('StatusBar', self:GetName()..'_power', self) + self.Power:SetPoint('TOPRIGHT', self.Health, 'BOTTOMRIGHT', 0, -1) + self.Power:SetPoint('TOPLEFT', self.Health, 'BOTTOMLEFT', 0, -1) + self.Power:SetStatusBarTexture(texture) + self.Power:SetHeight(4) + self.Power.frequentUpdates = true + + self.Power.bg = self.Power:CreateTexture(nil, 'BORDER') + self.Power.bg:SetAllPoints(self.Power) + self.Power.bg:SetTexture([=[Interface\ChatFrame\ChatFrameBackground]=]) + self.Power.bg.multiplier = 0.3 + + self.Power.colorTapping = true + self.Power.colorDisconnected = true + self.Power.colorClass = true + self.Power.colorPower = unit == 'pet' and true + self.Power.colorHappiness = unit == 'pet' and true + self.Power.colorReaction = unit ~= 'pet' and true - table.insert(self.__elements, UpdateMasterLooter) - self:RegisterEvent('PARTY_LOOT_METHOD_CHANGED', UpdateMasterLooter) - self:RegisterEvent('PARTY_MEMBERS_CHANGED', UpdateMasterLooter) - self:RegisterEvent('PARTY_LEADER_CHANGED', UpdateMasterLooter) + self.Castbar = CreateFrame('StatusBar', self:GetName()..'_castbar', self) + self.Castbar:SetPoint('TOPRIGHT', self, 'BOTTOMRIGHT', 0, -100) + self.Castbar:SetPoint('TOPLEFT', self, 'BOTTOMLEFT', 0, -100) + self.Castbar:SetStatusBarTexture(texture) + self.Castbar:SetStatusBarColor(0.25, 0.25, 0.35) + self.Castbar:SetBackdrop(backdrop) + self.Castbar:SetBackdropColor(0, 0, 0) + self.Castbar:SetHeight(22) - if(unit == 'player' or unit == 'pet') then - if(IsAddOnLoaded('oUF_Experience')) then - self.Experience = CreateFrame('StatusBar', self:GetName()..'_experience', self) - self.Experience:SetPoint('TOP', self, 'BOTTOM', 0, -10) - self.Experience:SetStatusBarTexture(texture) - self.Experience:SetStatusBarColor(unpack(colors.health)) - self.Experience:SetHeight(11) - self.Experience:SetWidth((unit == 'pet') and 130 or 230) - self.Experience:SetBackdrop(backdrop) - self.Experience:SetBackdropColor(0, 0, 0) - self.Experience.Tooltip = true - - self.Experience.Text = self.Experience:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall') - self.Experience.Text:SetPoint('CENTER', self.Experience) - - self.Experience.bg = self.Experience:CreateTexture(nil, 'BORDER') - self.Experience.bg:SetAllPoints(self.Experience) - self.Experience.bg:SetTexture(0.3, 0.3, 0.3) - end + self.Castbar.Text = self.Castbar:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallLeft') + self.Castbar.Text:SetPoint('LEFT', self.Castbar, 2, -1) - local power = self.Power:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallLeft') - power:SetPoint('LEFT', self.Health, 2, -1) - power.frequentUpdates = 0.1 + self.Castbar.Time = self.Castbar:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallRight') + self.Castbar.Time:SetPoint('RIGHT', self.Castbar, -2, -1) + self.Castbar.CustomTimeText = castbarTime - if(unit == 'player') then - self:Tag(power, '[colorpp][curpp]|r') - else - self:Tag(power, '[colorpp][curpp]|r [(- )cpoints( CP)]') - end - else - local info = self.Health:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallLeft') - info:SetPoint('LEFT', self.Health, 2, -1) - info:SetPoint('RIGHT', self.Health.Text, 'LEFT') + self.Castbar.bg = self.Castbar:CreateTexture(nil, 'BORDER') + self.Castbar.bg:SetAllPoints(self.Castbar) + self.Castbar.bg:SetTexture(0.3, 0.3, 0.3) - if(unit == 'target') then - self:Tag(info, '[colorinfo][name]|r |cff0090ff[smartlevel] [rare]|r') - else - self:Tag(info, '[colorinfo][name]|r') - end - end + self.Leader = self.Health:CreateTexture(nil, 'OVERLAY') + self.Leader:SetPoint('TOPLEFT', self, 0, 8) + self.Leader:SetHeight(16) + self.Leader:SetWidth(16) - if(unit == 'player') then - if(IsAddOnLoaded'oUF_Reputation' and UnitLevel('player') == MAX_PLAYER_LEVEL) then - self.Reputation = CreateFrame('StatusBar', self:GetName()..'_reputation', self) - self.Reputation:SetPoint('TOP', self, 'BOTTOM', 0, -10) - self.Reputation:SetStatusBarTexture(texture) - self.Reputation:SetHeight(11) - self.Reputation:SetWidth(230) - self.Reputation:SetBackdrop(backdrop) - self.Reputation:SetBackdropColor(0, 0, 0) - self.Reputation.Tooltip = true - self.Reputation.PostUpdate = PostUpdateReputation - - self.Reputation.Text = self.Reputation:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall') - self.Reputation.Text:SetPoint('CENTER', self.Reputation) - - self.Reputation.bg = self.Reputation:CreateTexture(nil, 'BORDER') - self.Reputation.bg:SetAllPoints(self.Reputation) - self.Reputation.bg:SetTexture(0.3, 0.3, 0.3) - end + self.MasterLooter = self.Health:CreateTexture(nil, 'OVERLAY') + self.MasterLooter:SetPoint('LEFT', self.Leader, 'RIGHT') + self.MasterLooter:SetHeight(16) + self.MasterLooter:SetWidth(16) - if(IsAddOnLoaded('oUF_Swing')) then - self.Swing = CreateFrame('StatusBar', self:GetName()..'_swing', self) - self.Swing:SetPoint('TOP', self, 'BOTTOM', 0, -80) - self.Swing:SetStatusBarTexture(texture) - self.Swing:SetStatusBarColor(1, 0.7, 0) - self.Swing:SetHeight(6) - self.Swing:SetWidth(230) - self.Swing:SetBackdrop(backdrop) - self.Swing:SetBackdropColor(0, 0, 0) - self.Swing.disableMelee = true - - self.Swing.Text = self.Swing:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall') - self.Swing.Text:SetPoint('CENTER', self.Swing) - - self.Swing.bg = self.Swing:CreateTexture(nil, 'BORDER') - self.Swing.bg:SetAllPoints(self.Swing) - self.Swing.bg:SetTexture(0.3, 0.3, 0.3) - end + table.insert(self.__elements, updateMasterLooter) + self:RegisterEvent('PARTY_LOOT_METHOD_CHANGED', updateMasterLooter) + self:RegisterEvent('PARTY_MEMBERS_CHANGED', updateMasterLooter) + self:RegisterEvent('PARTY_LEADER_CHANGED', updateMasterLooter) + else + local f = unit == 'focus' + self.Debuffs = CreateFrame('Frame', nil, self) + self.Debuffs:SetPoint(f and 'TOPLEFT' or 'TOPRIGHT', self, f and 'TOPRIGHT' or 'TOPLEFT', f and 2 or -2, 1) + self.Debuffs:SetHeight(23) + self.Debuffs:SetWidth(180) + self.Debuffs.num = 2 + self.Debuffs.size = 23 + self.Debuffs.spacing = 2 + self.Debuffs.onlyShowPlayer = f and true + self.Debuffs.initialAnchor = f and 'TOPLEFT' or 'TOPRIGHT' + self.Debuffs['growth-x'] = f and 'RIGHT' or 'LEFT' + self.Debuffs.PostCreateIcon = createAura - if(IsAddOnLoaded('oUF_RuneBar') and class == 'DEATHKNIGHT') then - self.RuneBar = {} - for i = 1, 6 do - self.RuneBar[i] = CreateFrame('StatusBar', self:GetName()..'_runebar'..i, self) - if(i == 1) then - self.RuneBar[i]:SetPoint('TOPLEFT', self, 'BOTTOMLEFT', 0, -1) - else - self.RuneBar[i]:SetPoint('TOPLEFT', self.RuneBar[i-1], 'TOPRIGHT', 1, 0) - end - self.RuneBar[i]:SetStatusBarTexture(texture) - self.RuneBar[i]:SetStatusBarColor(unpack(runeloadcolors[i])) - self.RuneBar[i]:SetHeight(4) - self.RuneBar[i]:SetWidth(230/6 - 0.85) - self.RuneBar[i]:SetBackdrop(backdrop) - self.RuneBar[i]:SetBackdropColor(0, 0, 0) - self.RuneBar[i]:SetMinMaxValues(0, 1) - - self.RuneBar[i].bg = self.RuneBar[i]:CreateTexture(nil, 'BORDER') - self.RuneBar[i].bg:SetAllPoints(self.RuneBar[i]) - self.RuneBar[i].bg:SetTexture(0.3, 0.3, 0.3) - end - end + self:SetAttribute('initial-height', 21) + self:SetAttribute('initial-width', 181) + end - if(class == 'DRUID') then - self.DruidPower = CreateFrame('StatusBar', self:GetName()..'_druidpower', self) - self.DruidPower:SetPoint('BOTTOM', self.Power, 'TOP') - self.DruidPower:SetStatusBarTexture(texture) - self.DruidPower:SetHeight(1) - self.DruidPower:SetWidth(230) - self.DruidPower:SetAlpha(0) - - self.DruidPower.Text = self.DruidPower:CreateFontString(nil, 'OVERLAY', 'GameFontNormalSmall') - self.DruidPower.Text:SetPoint('CENTER', self.DruidPower) - self.DruidPower.Text:SetTextColor(unpack(colors.power['MANA'])) - - table.insert(self.__elements, UpdateDruidPower) - self:RegisterEvent('UNIT_MANA', UpdateDruidPower) - self:RegisterEvent('UNIT_ENERGY', UpdateDruidPower) - self:RegisterEvent('UPDATE_SHAPESHIFT_FORM', UpdateDruidPower) - end + if(unit == 'player' or unit == 'pet') then + local power = self.Health:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallLeft') + power:SetPoint('LEFT', self.Health, 2, -1) + power.frequentUpdates = 0.1 + self:Tag(power, unit == 'pet' and '[custompp] [(- )cpoints( CP)]' or '[custompp]') + + self.BarFade = true + else + local info = self.Health:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallLeft') + info:SetPoint('LEFT', self.Health, 2, -1) + info:SetPoint('RIGHT', hpvalue, 'LEFT') + self:Tag(info, unit == 'target' and '[customname] |cff0090ff[smartlevel] [rare]|r' or '[customname]') end if(unit == 'pet') then - self.Power.colorPower = true - self.Power.colorHappiness = true - self.Power.colorReaction = false - self.Auras = CreateFrame('Frame', nil, self) self.Auras:SetPoint('TOPRIGHT', self, 'TOPLEFT', -2, 1) self.Auras:SetHeight(24 * 2) @@ -371,68 +304,20 @@ local function CreateStyle(self, unit) self.Auras.spacing = 2 self.Auras.initialAnchor = 'TOPRIGHT' self.Auras['growth-x'] = 'LEFT' + self.Auras.PostCreateIcon = createAura self:SetAttribute('initial-height', 27) self:SetAttribute('initial-width', 130) end - if(unit == 'focus' or unit == 'targettarget') then - self.Power:Hide() - self.Health:SetHeight(20) - - self.Debuffs = CreateFrame('Frame', nil, self) - self.Debuffs:SetPoint('TOPLEFT', self, 'TOPRIGHT', 2, 1) - self.Debuffs:SetHeight(23) - self.Debuffs:SetWidth(180) - self.Debuffs.num = 2 - self.Debuffs.size = 23 - self.Debuffs.spacing = 2 - self.Debuffs.initialAnchor = 'TOPLEFT' - - if(unit == 'targettarget') then - self.Debuffs:SetPoint('TOPRIGHT', self, 'TOPLEFT', -2, 1) - self.Debuffs.initialAnchor = 'TOPRIGHT' - self.Debuffs['growth-x'] = 'LEFT' - else - self.Debuffs.onlyShowPlayer = true - end - - self:SetAttribute('initial-height', 21) - self:SetAttribute('initial-width', 181) - end - - if(unit == 'player' or unit == 'target' or unit == 'pet') then - self.CombatFeedbackText = self.Health:CreateFontString(nil, 'OVERLAY', 'GameFontNormal') - self.CombatFeedbackText:SetPoint('CENTER', self) - - self.Castbar = CreateFrame('StatusBar', self:GetName()..'_castbar', self) - self.Castbar:SetPoint('TOPRIGHT', self, 'BOTTOMRIGHT', 0, -100) - self.Castbar:SetPoint('TOPLEFT', self, 'BOTTOMLEFT', 0, -100) - self.Castbar:SetStatusBarTexture(texture) - self.Castbar:SetStatusBarColor(0.25, 0.25, 0.35) - self.Castbar:SetBackdrop(backdrop) - self.Castbar:SetBackdropColor(0, 0, 0) - self.Castbar:SetHeight(22) - - self.Castbar.Text = self.Castbar:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallLeft') - self.Castbar.Text:SetPoint('LEFT', self.Castbar, 2, -1) - - self.Castbar.Time = self.Castbar:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallRight') - self.Castbar.Time:SetPoint('RIGHT', self.Castbar, -2, -1) - self.Castbar.CustomTimeText = OverrideCastbarTime - - self.Castbar.bg = self.Castbar:CreateTexture(nil, 'BORDER') - self.Castbar.bg:SetAllPoints(self.Castbar) - self.Castbar.bg:SetTexture(0.3, 0.3, 0.3) - end - if(unit == 'target' or unit == 'player') then self.Portrait = CreateFrame('PlayerModel', nil, self) self.Portrait:SetPoint('TOPLEFT', self.Health) self.Portrait:SetPoint('BOTTOMLEFT', self.Health) self.Portrait:SetAlpha(0.1) self.Portrait:SetWidth(230) - self:RegisterEvent('PLAYER_DEAD', function() SetSecureWidth(self, 231) end) + self:RegisterEvent('PLAYER_DEAD', function() setPortraitWidth(self, 231) end) + self.OverrideUpdateHealth = updatePortrait self:SetAttribute('initial-height', 27) self:SetAttribute('initial-width', 230) @@ -454,6 +339,7 @@ local function CreateStyle(self, unit) self.Buffs.spacing = 2 self.Buffs.initialAnchor = 'TOPLEFT' self.Buffs['growth-y'] = 'DOWN' + self.Buffs.PostCreateIcon = createAura self.Debuffs = CreateFrame('Frame', nil, self) self.Debuffs:SetPoint('TOPLEFT', self, 'BOTTOMLEFT', -1, -2) @@ -463,21 +349,96 @@ local function CreateStyle(self, unit) self.Debuffs.spacing = 2 self.Debuffs.initialAnchor = 'TOPLEFT' self.Debuffs['growth-y'] = 'DOWN' - else - self.BarFade = true + self.Debuffs.PostCreateIcon = createAura + self.Debuffs.PostUpdateIcon = updateAura + end + + if(unit == 'player' and class == 'DRUID') then + self.DruidPower = CreateFrame('StatusBar', self:GetName()..'_druidpower', self) + self.DruidPower:SetPoint('TOP', self.Health, 'BOTTOM') + self.DruidPower:SetStatusBarTexture(texture) + self.DruidPower:SetHeight(1) + self.DruidPower:SetWidth(230) + self.DruidPower:SetAlpha(0) + + local value = self.DruidPower:CreateFontString(nil, 'OVERLAY', 'GameFontNormalSmall') + value:SetPoint('CENTER', self.DruidPower) + self:Tag(value, '[druidpower]') + + table.insert(self.__elements, updateDruidPower) + self:RegisterEvent('UNIT_MANA', updateDruidPower) + self:RegisterEvent('UNIT_ENERGY', updateDruidPower) + self:RegisterEvent('UPDATE_SHAPESHIFT_FORM', updateDruidPower) + end + + if(IsAddOnLoaded'oUF_Reputation' and unit == 'player' and UnitLevel('player') == MAX_PLAYER_LEVEL) then + self.Reputation = CreateFrame('StatusBar', self:GetName()..'_reputation', self) + self.Reputation:SetPoint('TOP', self, 'BOTTOM', 0, -10) + self.Reputation:SetStatusBarTexture(texture) + self.Reputation:SetHeight(11) + self.Reputation:SetWidth(230) + self.Reputation:SetBackdrop(backdrop) + self.Reputation:SetBackdropColor(0, 0, 0) + self.Reputation.Tooltip = true + self.Reputation.PostUpdate = updateReputationColor + + self.Reputation.Text = self.Reputation:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall') + self.Reputation.Text:SetPoint('CENTER', self.Reputation) + + self.Reputation.bg = self.Reputation:CreateTexture(nil, 'BORDER') + self.Reputation.bg:SetAllPoints(self.Reputation) + self.Reputation.bg:SetTexture(0.3, 0.3, 0.3) + end + + if(IsAddOnLoaded('oUF_RuneBar') and unit == 'player' and class == 'DEATHKNIGHT') then + self.RuneBar = {} + for i = 1, 6 do + self.RuneBar[i] = CreateFrame('StatusBar', self:GetName()..'_runebar'..i, self) + if(i == 1) then + self.RuneBar[i]:SetPoint('TOPLEFT', self, 'BOTTOMLEFT', 0, -1) + else + self.RuneBar[i]:SetPoint('TOPLEFT', self.RuneBar[i-1], 'TOPRIGHT', 1, 0) + end + self.RuneBar[i]:SetStatusBarTexture(texture) + self.RuneBar[i]:SetStatusBarColor(unpack(runeloadcolors[i])) + self.RuneBar[i]:SetHeight(4) + self.RuneBar[i]:SetWidth(230/6 - 0.85) + self.RuneBar[i]:SetBackdrop(backdrop) + self.RuneBar[i]:SetBackdropColor(0, 0, 0) + self.RuneBar[i]:SetMinMaxValues(0, 1) + + self.RuneBar[i].bg = self.RuneBar[i]:CreateTexture(nil, 'BORDER') + self.RuneBar[i].bg:SetAllPoints(self.RuneBar[i]) + self.RuneBar[i].bg:SetTexture(0.3, 0.3, 0.3) + end + end + + if(IsAddOnLoaded('oUF_Experience') and (unit == 'pet' or unit == 'player')) then + self.Experience = CreateFrame('StatusBar', self:GetName()..'_experience', self) + self.Experience:SetPoint('TOP', self, 'BOTTOM', 0, -10) + self.Experience:SetStatusBarTexture(texture) + self.Experience:SetStatusBarColor(unpack(colors.health)) + self.Experience:SetHeight(11) + self.Experience:SetWidth((unit == 'pet') and 130 or 230) + self.Experience:SetBackdrop(backdrop) + self.Experience:SetBackdropColor(0, 0, 0) + self.Experience.Tooltip = true + + self.Experience.Text = self.Experience:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall') + self.Experience.Text:SetPoint('CENTER', self.Experience) + + self.Experience.bg = self.Experience:CreateTexture(nil, 'BORDER') + self.Experience.bg:SetAllPoints(self.Experience) + self.Experience.bg:SetTexture(0.3, 0.3, 0.3) end self.disallowVehicleSwap = true self.DebuffHighlightBackdrop = true self.DebuffHighlightFilter = true - - self.PostUpdateAuraIcon = PostUpdateAuraIcon - self.PostCreateAuraIcon = PostCreateAuraIcon - self.PostUpdateHealth = PostUpdateHealth end -oUF:RegisterStyle('P3lim', CreateStyle) +oUF:RegisterStyle('P3lim', styleFunction) oUF:SetActiveStyle('P3lim') oUF:Spawn('player', 'oUF_P3lim_player'):SetPoint('CENTER', UIParent, -220, -250) diff --git a/oUF_P3lim/oUF_P3lim.toc b/oUF_P3lim/oUF_P3lim.toc index b7535cf..32a50b9 100644 --- a/oUF_P3lim/oUF_P3lim.toc +++ b/oUF_P3lim/oUF_P3lim.toc @@ -4,6 +4,6 @@ ## Title: oUF P3lim ## Notes: Just another oUF layout ## RequiredDeps: oUF -## OptionalDeps: oUF_BarFader, oUF_DebuffHighlight, oUF_Experience, oUF_Reputation, oUF_RuneBar, oUF_Swing +## OptionalDeps: oUF_BarFader, oUF_DebuffHighlight, oUF_Experience, oUF_Reputation, oUF_RuneBar oUF_P3lim.lua \ No newline at end of file