Skip to content

Commit 1307608

Browse files
committed
Fixing countdown text coloring crashing in combat.
Fixing crash in text with secret percent values (GF issue #1416) Removed classic code in power/mana statuses
1 parent 29dfd82 commit 1307608

File tree

8 files changed

+72
-114
lines changed

8 files changed

+72
-114
lines changed

GridStatus.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ status.GetExpirationTime = Grid2.Dummy
4949
status.GetDuration = Grid2.Dummy
5050
-- start time: text indicators
5151
status.GetStartTime = Grid2.Dummy
52+
-- icon indicators
53+
status.GetDurationObject = Grid2.Dummy
5254
-- percent value: alpha, bar indicators
5355
status.GetPercent = Grid2.Dummy
5456
-- texture: icon indicator

GridUtils.lua

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -517,10 +517,10 @@ do
517517
local timer
518518
local cooldowns = {}
519519
local function Update()
520-
for cooldown, text in pairs(cooldowns) do
520+
for cooldown, durationObject in pairs(cooldowns) do
521521
if cooldown:IsVisible() then
522-
local color = cooldown.durationObject:EvaluateRemainingDuration(cooldown.colorCurveObject)
523-
text:SetTextColor(color:GetRGBA())
522+
local color = durationObject:EvaluateRemainingDuration(cooldown.colorCurveObject)
523+
cooldown.countdownTextObject:SetTextColor(color:GetRGBA())
524524
else
525525
cooldowns[cooldown] = nil
526526
end
@@ -530,11 +530,22 @@ do
530530
timer = Grid2:CreateTimer(Update, 0.1, false)
531531

532532
-- cooldown must have the fields: cooldown.durationObject, cooldown.colorCurveObject
533-
function Grid2.UpdateCooldownColorCurve(cooldown, expiration, duration)
534-
cooldown.durationObject:SetTimeFromEnd(expiration, duration)
535-
if cooldowns[cooldown]==nil then
536-
if not next(cooldowns) then timer:Play() end
537-
cooldowns[cooldown] = cooldown:GetCountdownFontString()
533+
function Grid2.UpdateCooldownColorCurve(cooldown, durationObject)
534+
local curve = cooldown.colorCurveObject
535+
local text = cooldown.countdownTextObject
536+
if text == nil then
537+
text = cooldown:GetCountdownFontString()
538+
cooldown.countdownTextObject = text
539+
end
540+
if durationObject then
541+
if cooldowns[cooldown]==nil and not next(cooldowns) then
542+
timer:Play()
543+
end
544+
text:SetTextColor( durationObject:EvaluateRemainingDuration(curve):GetRGBA() )
545+
cooldowns[cooldown] = durationObject
546+
else
547+
local point = curve:GetPoint(curve:GetPointCount())
548+
text:SetTextColor(point.y:GetRGBA())
538549
end
539550
end
540551

modules/IndicatorIcon.lua

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ local issecretvalue = Grid2.issecretvalue
88
local canaccessvalue = Grid2.canaccessvalue
99
local UpdateCooldownColorCurve = Grid2.UpdateCooldownColorCurve
1010
local RemoveCooldownColorCurve = Grid2.RemoveCooldownColorCurve
11-
local CreateDuration = C_DurationUtil.CreateDuration
1211
local TruncateWhenZero = C_StringUtil.TruncateWhenZero
1312

1413
local function Icon_Create(self, parent)
@@ -57,7 +56,7 @@ local function Icon_OnUpdate(self, parent, unit, status)
5756
Icon:SetTexCoord(status:GetTexCoord(unit))
5857
Icon:SetVertexColor(status:GetVertexColor(unit))
5958
if status.GetIconData then
60-
local tex, cnt, exp, dur, color = status:GetIconData(unit)
59+
local tex, cnt, exp, dur, color, slot = status:GetIconData(unit)
6160
if self.disableIcon then
6261
Icon:SetColorTexture(color.r, color.g, color.b)
6362
else
@@ -74,7 +73,7 @@ local function Icon_OnUpdate(self, parent, unit, status)
7473
if not self.disableCooldown and exp and dur then
7574
Frame.Cooldown:SetCooldownFromExpirationTime(exp, dur)
7675
if self.showColors then
77-
UpdateCooldownColorCurve(Frame.Cooldown, exp, dur)
76+
UpdateCooldownColorCurve(Frame.Cooldown, status:GetDurationObject(unit, slot))
7877
end
7978
end
8079
else
@@ -121,7 +120,7 @@ local function Icon_OnUpdate(self, parent, unit, status)
121120
Cooldown:SetCooldownFromExpirationTime(expiration, duration)
122121
end
123122
if self.showColors then
124-
UpdateCooldownColorCurve(Cooldown, expiration, duration)
123+
UpdateCooldownColorCurve(Cooldown, status:GetDurationObject(unit))
125124
end
126125
Cooldown:Show()
127126
else
@@ -167,8 +166,7 @@ local function Icon_Layout(self, parent)
167166
text:SetMaxLines(1)
168167
if self.showColors then
169168
Cooldown.colorCurveObject = self.ctColorCurve
170-
Cooldown.durationObject = Cooldown.durationObject or CreateDuration()
171-
elseif Cooldown.durationObject then -- executed only if the user changed the settings to remove possible color update timer
169+
elseif Cooldown.countdownTextObject then -- executed only if the user changed the settings to remove possible color update timer
172170
RemoveCooldownColorCurve(Cooldown)
173171
end
174172
end

modules/IndicatorIcons.lua

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ local issecretvalue = Grid2.issecretvalue
1010
local canaccessvalue = Grid2.canaccessvalue
1111
local UpdateCooldownColorCurve = Grid2.UpdateCooldownColorCurve
1212
local RemoveCooldownColorCurve = Grid2.RemoveCooldownColorCurve
13-
local CreateDuration = C_DurationUtil.CreateDuration
1413
local TruncateWhenZero = C_StringUtil.TruncateWhenZero
1514

1615
local function Icon_Create(self, parent)
@@ -65,8 +64,8 @@ local function Icon_OnFrameUpdate(f)
6564
else
6665
cooldown:SetCooldownFromExpirationTime(expiration, duration)
6766
end
68-
if showColors then
69-
UpdateCooldownColorCurve(cooldown, expiration, duration)
67+
if showColors and slots[j] then
68+
UpdateCooldownColorCurve(cooldown, status:GetDurationObject(unit, slots[j]))
7069
end
7170
end
7271
aura:Show()
@@ -101,7 +100,7 @@ local function Icon_OnFrameUpdate(f)
101100
aura.cooldown:SetCooldownFromExpirationTime(expiration, duration)
102101
end
103102
if showColors then
104-
UpdateCooldownColorCurve(aura.cooldown, expiration, duration)
103+
UpdateCooldownColorCurve(aura.cooldown, status:GetDurationObject(unit))
105104
end
106105
else
107106
aura.cooldown:SetCooldown(0, 0)
@@ -232,8 +231,7 @@ local function Icon_Layout(self, parent)
232231
text:SetMaxLines(1)
233232
if self.showColors then
234233
cooldown.colorCurveObject = self.ctColorCurve
235-
cooldown.durationObject = cooldown.durationObject or CreateDuration()
236-
elseif cooldown.durationObject then -- executed only if the user changed the settings to remove possible color update timer
234+
elseif cooldown.countdownTextObject then -- executed only if the user changed the settings to remove possible color update timer
237235
RemoveCooldownColorCurve(cooldown)
238236
end
239237
end

modules/IndicatorText.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ local function Text_OnUpdateP(self, parent, unit, status)
202202
end
203203
if text then
204204
Text:SetText( text )
205-
elseif percent then
205+
elseif percent and canaccessvalue(percent) then
206206
Text:SetFormattedText( FmtPercent, percent*100 )
207207
else
208208
Text:SetText( string_cut(status:GetText(unit) or "", self.textlength) )

modules/StatusAuras.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ local Grid2 = Grid2
66
local rosterUnits = Grid2.roster_guids
77
local UnitIsFriend = UnitIsFriend
88
local GetUnitAuras = C_UnitAuras.GetUnitAuras
9+
local GetAuraDuration = C_UnitAuras.GetAuraDuration
910
local GetAuraDataByIndex = C_UnitAuras.GetAuraDataByIndex
1011
local GetAuraDispelTypeColor = C_UnitAuras.GetAuraDispelTypeColor
1112

@@ -71,6 +72,10 @@ function Shared:GetIconData(unit)
7172
return tex[1], cnt[1], exp[1], dur[1], col[1], slots[1]
7273
end
7374

75+
function Shared:GetDurationObject(unit, slotID)
76+
return GetAuraDuration(unit, slotID)
77+
end
78+
7479
function Shared:GetTooltip(unit, tip, slotID)
7580
if slotID then
7681
tip:SetUnitAuraByAuraInstanceID(unit, slotID)

modules/StatusHealth.lua

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
if not Grid2.secretsEnabled then return end
2-
31
local L = LibStub:GetLibrary("AceLocale-3.0"):GetLocale("Grid2")
42

53
local Health = Grid2.statusPrototype:new("health-current")

modules/StatusMana.lua

Lines changed: 37 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ local Mana = Grid2.statusPrototype:new("mana")
44
local ManaAlt = Grid2.statusPrototype:new("manaalt", false)
55
local Power = Grid2.statusPrototype:new("power",false)
66
local PowerAlt = Grid2.statusPrototype:new("poweralt",false)
7-
local LowMana = Grid2.statusPrototype:new("lowmana",false)
87

98
local max = math.max
109
local fmt = string.format
@@ -16,6 +15,10 @@ local UnitPowerMax = UnitPowerMax
1615
local unit_is_valid = Grid2.roster_guids
1716
local canaccessvalue = Grid2.canaccessvalue
1817

18+
local ScaleTo100 = CurveConstants.ScaleTo100
19+
local format = string.format
20+
local fmtPercent = "%.0f%%"
21+
1922
local statuses = {} -- Enabled statuses
2023

2124
-- Methods shared by all statuses
@@ -66,26 +69,16 @@ function PowerAlt:IsActive(unit)
6669
return canaccessvalue(power) and power>0
6770
end
6871

69-
if Grid2.secretsEnabled then
70-
function PowerAlt:GetPercent(unit)
71-
return UnitPowerPercent(unit,10,false)
72-
end
73-
function PowerAlt:GetText(unit)
74-
return AbbreviateLargeNumbers( UnitPower(unit,10) )
75-
end
76-
else
77-
function PowerAlt:GetPercent(unit)
78-
local m = UnitPowerMax(unit,10)
79-
return m==0 and 0 or max(UnitPower(unit,10),0) / UnitPowerMax(unit,10)
80-
end
81-
function PowerAlt:GetText(unit)
82-
local power= UnitPower(unit,10)
83-
if power>=1000 then
84-
return fmt("%.1fk", power / 1000)
85-
else
86-
return tostring( max(power,0) )
87-
end
88-
end
72+
function PowerAlt:GetPercentText(unit)
73+
return format( fmtPercent, UnitPowerPercent(unit, 10, false, ScaleTo100) )
74+
end
75+
76+
function PowerAlt:GetPercent(unit)
77+
return UnitPowerPercent(unit,10,false)
78+
end
79+
80+
function PowerAlt:GetText(unit)
81+
return AbbreviateLargeNumbers( UnitPower(unit,10) )
8982
end
9083

9184
Grid2.setupFunc["poweralt"] = function(baseKey, dbx)
@@ -125,27 +118,16 @@ function Power:GetColor(unit)
125118
return c.r, c.g, c.b, c.a
126119
end
127120

128-
if Grid2.secretsEnabled then
129-
-- local ScaleTo100 = CurveConstants.ScaleTo100
130-
function Power:GetPercent(unit)
131-
return UnitPowerPercent(unit,nil,false)
132-
end
133-
function Power:GetText(unit)
134-
return AbbreviateLargeNumbers( UnitPower(unit) )
135-
end
136-
else
137-
function Power:GetPercent(unit)
138-
local m = UnitPowerMax(unit)
139-
return m == 0 and 0 or UnitPower(unit) / m
140-
end
141-
function Power:GetText(unit)
142-
local power = UnitPower(unit)
143-
if power>=1000 then
144-
return fmt("%.1fk", power / 1000)
145-
else
146-
return tostring(power)
147-
end
148-
end
121+
function Power:GetPercentText(unit)
122+
return format( fmtPercent, UnitPowerPercent(unit, nil, false, ScaleTo100) )
123+
end
124+
125+
function Power:GetPercent(unit)
126+
return UnitPowerPercent(unit,nil,false)
127+
end
128+
129+
function Power:GetText(unit)
130+
return AbbreviateLargeNumbers( UnitPower(unit) )
149131
end
150132

151133
function Power:UpdateDB()
@@ -164,6 +146,7 @@ function Power:UpdateDB()
164146
powerColors["POWER_TYPE_RED_POWER"] = self.dbx.color2 -- garrison proving grounds for friendly NPCs
165147
self.IsActive = self.filtered and self.IsActiveFilter or self.IsActiveStandard
166148
self.UpdateUnitPower = self.filtered and self.UpdateUnitPowerFilter or self.UpdateUnitPowerStandard
149+
fmtPercent = Grid2.db.profile.formatting.percentFormat
167150
end
168151

169152
Grid2.setupFunc["power"] = function(baseKey, dbx)
@@ -221,22 +204,16 @@ local function Mana_IsActiveSecondaryF(self, unit)
221204
return not self.filtered[unit] and UnitPowerMax(unit,0)~=0 and UnitPowerType(unit)~=0
222205
end
223206

224-
local Mana_GetPercent, Mana_GetText
225-
if Grid2.secretsEnabled then
226-
function Mana_GetPercent(self, unit)
227-
return UnitPowerPercent(unit,0,false)
228-
end
229-
function Mana_GetText(self, unit)
230-
return AbbreviateLargeNumbers( UnitPower(unit,0) )
231-
end
232-
else
233-
function Mana_GetPercent(self, unit)
234-
local m = UnitPowerMax(unit,0)
235-
return m == 0 and 0 or UnitPower(unit,0) / m
236-
end
237-
function Mana_GetText(self, unit)
238-
return fmt("%.1fk", UnitPower(unit,0) / 1000)
239-
end
207+
local function Mana_GetPercentText(self, unit)
208+
return format( fmtPercent, UnitPowerPercent(unit, 0, false, ScaleTo100) )
209+
end
210+
211+
local function Mana_GetPercent(self, unit)
212+
return UnitPowerPercent(unit,0,false)
213+
end
214+
215+
local function Mana_GetText(self, unit)
216+
return AbbreviateLargeNumbers( UnitPower(unit,0) )
240217
end
241218

242219
local function Mana_UpdateDB(self)
@@ -254,6 +231,7 @@ end
254231
Mana.GetColor = Grid2.statusLibrary.GetColor
255232
Mana.OnEnable = status_OnEnable
256233
Mana.OnDisable = status_OnDisable
234+
Mana.GetPercentText = Mana_GetPercentText
257235
Mana.GetPercent = Mana_GetPercent
258236
Mana.GetText = Mana_GetText
259237
Mana.UpdateDB = Mana_UpdateDB
@@ -269,6 +247,7 @@ Grid2:DbSetStatusDefaultValue( "mana", {type = "mana", color1= {r=0,g=0,b=1,a=1}
269247
ManaAlt.GetColor = Grid2.statusLibrary.GetColor
270248
ManaAlt.OnEnable = status_OnEnable
271249
ManaAlt.OnDisable = status_OnDisable
250+
ManaAlt.GetPercentText = Mana_GetPercentText
272251
ManaAlt.GetPercent = Mana_GetPercent
273252
ManaAlt.GetText = Mana_GetText
274253
ManaAlt.UpdateDB = Mana_UpdateDB
@@ -279,36 +258,3 @@ Grid2.setupFunc["manaalt"] = function(baseKey, dbx)
279258
end
280259

281260
Grid2:DbSetStatusDefaultValue( "manaalt", {type = "manaalt", displayType = 2, color1={r=0,g=0,b=1,a=1}} )
282-
283-
-- Low Mana status, not available in Midnight
284-
if Grid2.secretsEnabled then return end
285-
286-
local lowManaThreshold
287-
288-
LowMana.GetColor = Grid2.statusLibrary.GetColor
289-
LowMana.OnEnable = status_OnEnable
290-
LowMana.OnDisable = status_OnDisable
291-
292-
function LowMana:UpdateUnitPower(unit, powerType)
293-
if powerType=="MANA" then
294-
self:UpdateIndicators(unit)
295-
end
296-
end
297-
298-
function LowMana:IsActive(unit)
299-
if UnitPowerType(unit)==0 then
300-
local m = UnitPowerMax(unit)
301-
return ( m==0 and 0 or UnitPower(unit)/m ) < lowManaThreshold
302-
end
303-
end
304-
305-
function LowMana:UpdateDB()
306-
lowManaThreshold = self.dbx.threshold
307-
end
308-
309-
Grid2.setupFunc["lowmana"] = function(baseKey, dbx)
310-
Grid2:RegisterStatus(LowMana, {"color"}, baseKey, dbx)
311-
return LowMana
312-
end
313-
314-
Grid2:DbSetStatusDefaultValue( "lowmana", {type = "lowmana", threshold = 0.75, color1 = {r=0.5,g=0,b=1,a=1}})

0 commit comments

Comments
 (0)