Skip to content

Commit

Permalink
fix questlog scrolling
Browse files Browse the repository at this point in the history
  • Loading branch information
mrthinger committed Mar 26, 2023
1 parent 22818c7 commit 62a7e7f
Showing 1 changed file with 81 additions and 42 deletions.
123 changes: 81 additions & 42 deletions VoiceOver/QuestOverlayUI.lua
Original file line number Diff line number Diff line change
Expand Up @@ -10,69 +10,108 @@ function QuestOverlayUI:new(soundQueue)
questOverlayUI.soundQueue = soundQueue
questOverlayUI.questPlayButtons = {}
questOverlayUI.playingStates = {}

questOverlayUI.displayedButtons = {}
return questOverlayUI
end

function QuestOverlayUI:createPlayButton(questIndex, questLogTitleFrame)
local playButton = CreateFrame("Button", nil, questLogTitleFrame, "UIPanelButtonTemplate")
function QuestOverlayUI:createPlayButton(questID)
local playButton = CreateFrame("Button", nil, QuestLogFrame, "UIPanelButtonTemplate")
playButton:SetWidth(15)
playButton:SetHeight(15)
playButton:SetPoint("LEFT", questLogTitleFrame, "LEFT", 215, 0)
playButton:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up")
self.questPlayButtons[questIndex] = playButton
playButton:SetFrameLevel(QuestLogFrame:GetFrameLevel() + 5)
self.questPlayButtons[questID] = playButton
end

function QuestOverlayUI:updatePlayButtonTexture(questID, isPlaying)
local texturePath = isPlaying and "Interface\\TIMEMANAGER\\ResetButton" or "Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up"
local numEntries, numQuests = GetNumQuestLogEntries()
local questIndex
local texturePath = isPlaying and "Interface\\TIMEMANAGER\\ResetButton" or
"Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up"

for i = 1, numEntries do
local _, _, _, _, _, _, _, currentQuestID = GetQuestLogTitle(i)
if currentQuestID == questID then
questIndex = i
break
end
end

if questIndex then
self.questPlayButtons[questIndex]:SetNormalTexture(texturePath)
if self.questPlayButtons[questID] then
self.questPlayButtons[questID]:SetNormalTexture(texturePath)
end
end

function QuestOverlayUI:updatePlayButton(soundTitle, questID, questIndex)
local soundData = {
["fileName"] = questID .. "-accept",
["questId"] = questID,
["title"] = soundTitle,
["unitGuid"] = QuestlogNpcGuidTable[questID]
}
-- function QuestOverlayUI:updatePlayButton(soundTitle, questID, questLogTitleFrame)
-- local soundData = {
-- ["fileName"] = questID .. "-accept",
-- ["questId"] = questID,
-- ["title"] = soundTitle,
-- ["unitGuid"] = QuestlogNpcGuidTable[questID]
-- }
-- self.questPlayButtons[questID]:SetPoint("LEFT", questLogTitleFrame, "LEFT", 215, 0)

-- self.questPlayButtons[questID]:SetScript("OnClick", function()
-- local isPlaying = self.playingStates[questID] or false
-- print('clicked', questID, soundTitle, isPlaying, soundData.id)

-- if not isPlaying then
-- self.soundQueue:addSoundToQueue(soundData)
-- self.playingStates[questID] = true
-- self:updatePlayButtonTexture(questID, true)

-- soundData.stopCallback = function()
-- self.playingStates[questID] = false
-- self:updatePlayButtonTexture(questID, false)
-- end
-- else
-- self.soundQueue:removeSoundFromQueue(soundData)
-- end
-- end)
-- end

function QuestOverlayUI:updatePlayButton(soundTitle, questID, questLogTitleFrame)
self.questPlayButtons[questID]:SetPoint("LEFT", questLogTitleFrame, "LEFT", 215, 0)

local questOverlayUI = self
self.questPlayButtons[questID]:SetScript("OnClick", function(self)
if questOverlayUI.questPlayButtons[questID].soundData == nil then
questOverlayUI.questPlayButtons[questID].soundData = {
["fileName"] = questID .. "-accept",
["questId"] = questID,
["title"] = soundTitle,
["unitGuid"] = QuestlogNpcGuidTable[questID]
}
end

self.questPlayButtons[questIndex]:SetScript("OnClick", function()
local isPlaying = self.playingStates[questID] or false
local button = self
local soundData = button.soundData
local questID = soundData.questId
local isPlaying = questOverlayUI.playingStates[questID] or false
print('clicked', questID, soundTitle, isPlaying, soundData.id)

if not isPlaying then
self.soundQueue:addSoundToQueue(soundData)
self.playingStates[questID] = true
self:updatePlayButtonTexture(questID, true)
questOverlayUI.soundQueue:addSoundToQueue(soundData)
questOverlayUI.playingStates[questID] = true
questOverlayUI:updatePlayButtonTexture(questID, true)

soundData.stopCallback = function()
self.playingStates[questID] = false
self:updatePlayButtonTexture(questID, false)
questOverlayUI.playingStates[questID] = false
questOverlayUI:updatePlayButtonTexture(questID, false)
button.soundData = nil
end
else
self.soundQueue:removeSoundFromQueue(soundData)
questOverlayUI.soundQueue:removeSoundFromQueue(soundData)
end
end)
end


function QuestOverlayUI:updateQuestOverlayUI()
local numEntries, numQuests = GetNumQuestLogEntries()
if numEntries == 0 then
return
end

-- Hide all buttons in displayedButtons
for _, button in pairs(self.displayedButtons) do
button:Hide()
end

-- Clear displayedButtons
self.displayedButtons = {}
-- print("---")

-- Traverse through the quests displayed in the UI
for i = 1, QUESTS_DISPLAYED do
local questIndex = i + FauxScrollFrame_GetOffset(QuestLogListScrollFrame)
Expand All @@ -85,19 +124,19 @@ function QuestOverlayUI:updateQuestOverlayUI()
local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID = GetQuestLogTitle(
questIndex)

if isHeader then
if self.questPlayButtons[questIndex] then
self.questPlayButtons[questIndex]:Hide()
end
else
if not self.questPlayButtons[questIndex] then
self:createPlayButton(questIndex, questLogTitleFrame)
if not isHeader then
if not self.questPlayButtons[questID] then
self:createPlayButton(questID)
end

self:updatePlayButton(title, questID, questIndex)
self.questPlayButtons[questIndex]:Show()
-- print(questIndex, title)
self:updatePlayButton(title, questID, questLogTitleFrame)
self.questPlayButtons[questID]:Show()
local isPlaying = self.playingStates[questID] or false
self:updatePlayButtonTexture(questID, isPlaying)

-- Add the button to displayedButtons
table.insert(self.displayedButtons, self.questPlayButtons[questID])
end
end
end

0 comments on commit 62a7e7f

Please sign in to comment.