init
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
setfenv(1, VoiceOver)
|
||||
QuestOverlayUI = {}
|
||||
QuestOverlayUI.__index = QuestOverlayUI
|
||||
|
||||
function QuestOverlayUI:new(soundQueue)
|
||||
local questOverlayUI = {}
|
||||
setmetatable(questOverlayUI, QuestOverlayUI)
|
||||
|
||||
questOverlayUI.soundQueue = soundQueue
|
||||
questOverlayUI.questPlayButtons = {}
|
||||
questOverlayUI.playingStates = {}
|
||||
questOverlayUI.displayedButtons = {}
|
||||
return questOverlayUI
|
||||
end
|
||||
|
||||
function QuestOverlayUI:CreatePlayButton(questID)
|
||||
local playButton = CreateFrame("Button", nil, QuestLogFrame)
|
||||
playButton:SetWidth(20)
|
||||
playButton:SetHeight(20)
|
||||
playButton:SetHitRectInsets(2, 2, 2, 2)
|
||||
playButton:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up")
|
||||
playButton:SetDisabledTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up")
|
||||
playButton:GetDisabledTexture():SetDesaturated(true)
|
||||
playButton:GetDisabledTexture():SetAlpha(0.33)
|
||||
playButton:SetHighlightTexture("Interface\\BUTTONS\\UI-Panel-MinimizeButton-Highlight")
|
||||
self.questPlayButtons[questID] = playButton
|
||||
end
|
||||
|
||||
function QuestOverlayUI:UpdateQuestTitle(questLogTitleFrame, playButton, normalText, questCheck)
|
||||
playButton:SetPoint("LEFT", normalText, "LEFT", 4, 0)
|
||||
|
||||
local formatedText = [[|TInterface\AddOns\AI_VoiceOver\Textures\spacer:1:24|t]] .. (normalText:GetText() or ""):trim()
|
||||
|
||||
normalText:SetText(formatedText)
|
||||
QuestLogDummyText:SetText(formatedText)
|
||||
|
||||
questCheck:SetPoint("LEFT", normalText, "LEFT", normalText:GetStringWidth(), 0)
|
||||
end
|
||||
|
||||
function QuestOverlayUI:UpdatePlayButtonTexture(questID, isPlaying)
|
||||
local texturePath = isPlaying and "Interface\\TIMEMANAGER\\ResetButton" or
|
||||
"Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up"
|
||||
|
||||
if self.questPlayButtons[questID] then
|
||||
self.questPlayButtons[questID]:SetNormalTexture(texturePath)
|
||||
end
|
||||
end
|
||||
|
||||
function QuestOverlayUI:UpdatePlayButton(soundTitle, questID, questLogTitleFrame, normalText, questCheck)
|
||||
self.questPlayButtons[questID]:SetParent(questLogTitleFrame:GetParent())
|
||||
self.questPlayButtons[questID]:SetFrameLevel(questLogTitleFrame:GetFrameLevel() + 2)
|
||||
|
||||
QuestOverlayUI:UpdateQuestTitle(questLogTitleFrame, self.questPlayButtons[questID], normalText, questCheck)
|
||||
|
||||
local questOverlayUI = self
|
||||
self.questPlayButtons[questID]:SetScript("OnClick", function(self)
|
||||
if questOverlayUI.questPlayButtons[questID].soundData == nil then
|
||||
local npcID = DataModules:GetQuestLogNPCID(questID) -- TODO: Add fallbacks to item and object questgivers once VO for them is made
|
||||
questOverlayUI.questPlayButtons[questID].soundData = {
|
||||
event = Enums.SoundEvent.QuestAccept,
|
||||
questID = questID,
|
||||
name = npcID and DataModules:GetNPCName(npcID) or "Unknown Name",
|
||||
title = soundTitle,
|
||||
unitGUID = npcID and Utils:MakeGUID(Enums.GUID.Creature, npcID)
|
||||
}
|
||||
end
|
||||
|
||||
local button = self
|
||||
local soundData = button.soundData
|
||||
local questID = soundData.questID
|
||||
local isPlaying = questOverlayUI.playingStates[questID] or false
|
||||
|
||||
if not isPlaying then
|
||||
questOverlayUI.soundQueue:AddSoundToQueue(soundData)
|
||||
questOverlayUI.playingStates[questID] = true
|
||||
questOverlayUI:UpdatePlayButtonTexture(questID, true)
|
||||
|
||||
soundData.stopCallback = function()
|
||||
questOverlayUI.playingStates[questID] = false
|
||||
questOverlayUI:UpdatePlayButtonTexture(questID, false)
|
||||
button.soundData = nil
|
||||
end
|
||||
else
|
||||
questOverlayUI.soundQueue:RemoveSoundFromQueue(soundData)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
function QuestOverlayUI:UpdateQuestOverlayUI()
|
||||
local numEntries, numQuests = GetNumQuestLogEntries()
|
||||
|
||||
-- Hide all buttons in displayedButtons
|
||||
for _, button in pairs(self.displayedButtons) do
|
||||
button:Hide()
|
||||
end
|
||||
|
||||
if numEntries == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
-- Clear displayedButtons
|
||||
table.wipe(self.displayedButtons)
|
||||
|
||||
-- Traverse through the quests displayed in the UI
|
||||
for i = 1, QUESTS_DISPLAYED do
|
||||
local questIndex = i + Utils:GetQuestLogScrollOffset();
|
||||
if questIndex > numEntries then
|
||||
break
|
||||
end
|
||||
|
||||
-- Get quest title
|
||||
local questLogTitleFrame = Utils:GetQuestLogTitleFrame(i)
|
||||
local normalText = Utils:GetQuestLogTitleNormalText(i)
|
||||
local questCheck = Utils:GetQuestLogTitleCheck(i)
|
||||
local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID = GetQuestLogTitle(
|
||||
questIndex)
|
||||
|
||||
if not self.questPlayButtons[questID] then
|
||||
self:CreatePlayButton(questID)
|
||||
end
|
||||
|
||||
if not isHeader then
|
||||
if DataModules:PrepareSound({ event = Enums.SoundEvent.QuestAccept, questID = questID }) then
|
||||
self:UpdatePlayButton(title, questID, questLogTitleFrame, normalText, questCheck)
|
||||
self.questPlayButtons[questID]:Enable()
|
||||
else
|
||||
self:UpdateQuestTitle(questLogTitleFrame, self.questPlayButtons[questID], normalText, questCheck)
|
||||
self.questPlayButtons[questID]:Disable()
|
||||
end
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user