Refactor message removal logic and introduce unique queue IDs.
All checks were successful
forgejo/Czech Quests/addon/pipeline/head This commit looks good
All checks were successful
forgejo/Czech Quests/addon/pipeline/head This commit looks good
This commit is contained in:
parent
9a0fa4fd09
commit
4087c853a1
1 changed files with 38 additions and 16 deletions
|
@ -2,6 +2,7 @@ local _, addon = ...
|
|||
local messages = {}
|
||||
|
||||
local GAP = 2
|
||||
local queueCounter = 0
|
||||
|
||||
local function ShowSpeech(Frame, offsetY)
|
||||
Frame:ClearAllPoints()
|
||||
|
@ -33,21 +34,37 @@ local function ReflowMessages(requery)
|
|||
end
|
||||
end
|
||||
|
||||
local function RemoveMessage(frame)
|
||||
for i, fs in ipairs(messages) do
|
||||
if fs == frame then
|
||||
local function RemoveMessage(queueId)
|
||||
for _, fs in ipairs(messages) do
|
||||
if fs.queueId == queueId and not fs._removing then
|
||||
fs._removing = true
|
||||
if fs:IsShown() and (fs:GetAlpha() or 1) > 0.01 then
|
||||
local animation = fs:CreateAnimationGroup()
|
||||
local fadeOut = animation:CreateAnimation("Alpha")
|
||||
fadeOut:SetFromAlpha(1)
|
||||
fadeOut:SetFromAlpha(fs:GetAlpha() or 1)
|
||||
fadeOut:SetToAlpha(0)
|
||||
fadeOut:SetDuration(1)
|
||||
fadeOut:SetStartDelay(0)
|
||||
animation:SetScript("OnFinished", function()
|
||||
fs:Hide()
|
||||
table.remove(messages, i)
|
||||
ReflowMessages()
|
||||
for idx, msg in ipairs(messages) do
|
||||
if msg.queueId == fs.queueId then
|
||||
table.remove(messages, idx)
|
||||
break
|
||||
end
|
||||
end
|
||||
C_Timer.After(0, function() ReflowMessages() end)
|
||||
end)
|
||||
animation:Play()
|
||||
else
|
||||
fs:Hide()
|
||||
for idx, msg in ipairs(messages) do
|
||||
if msg.queueId == fs.queueId then
|
||||
table.remove(messages, idx)
|
||||
break
|
||||
end
|
||||
end
|
||||
C_Timer.After(0, function() ReflowMessages() end)
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
|
@ -60,11 +77,16 @@ local function AddMessage(sender, message)
|
|||
local MessageFrame = addon.SpeechFrame:CreateMessage()
|
||||
MessageFrame.Message:SetText(text)
|
||||
|
||||
queueCounter = queueCounter + 1
|
||||
MessageFrame.queueId = queueCounter
|
||||
table.insert(messages, MessageFrame)
|
||||
|
||||
C_Timer.After(0.1, function()
|
||||
ReflowMessages()
|
||||
end)
|
||||
|
||||
C_Timer.After(15, function()
|
||||
RemoveMessage(MessageFrame)
|
||||
RemoveMessage(MessageFrame.queueId)
|
||||
end)
|
||||
end
|
||||
addon.API.AddSpeechMessage = AddMessage
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue