Minor refactor + add new zones

This commit is contained in:
Roman Jaroš 2024-07-15 13:37:24 +02:00
parent 05eb54cbbb
commit ebf2e11502
13 changed files with 2485 additions and 716 deletions

View file

@ -1,14 +1,18 @@
local lastQuestFrameEvent = nil
local addonName, addonDataTable = ...
local function GetQuestInfo(maleVersion, femaleVersion)
local function ResolveFemaleVersion(maleVersion, femaleVersion)
local gender = UnitSex("player")
if gender == 2 then
return maleVersion
end
end
if gender == 3 then
return femaleVersion
if (femaleVersion == "") then
return maleVersion
else
return femaleVersion
end
end
end
@ -18,11 +22,11 @@ local function GetDataByKey(dataType, dataId)
if addonDataTable[dataType][dataId] then
local quest = addonDataTable[dataType][dataId];
local standardQuest = {
title = GetQuestInfo(quest.titleMale, quest.titleFemale),
objective = GetQuestInfo(quest.objectiveMale, quest.objectiveFemale),
description = GetQuestInfo(quest.descriptionMale, quest.descriptionFemale),
progress = GetQuestInfo(quest.progressMale, quest.progressFemale),
completion = GetQuestInfo(quest.completionMale, quest.completionFemale),
title = ResolveFemaleVersion(quest.titleMale, quest.titleFemale),
objective = ResolveFemaleVersion(quest.objectiveMale, quest.objectiveFemale),
description = ResolveFemaleVersion(quest.descriptionMale, quest.descriptionFemale),
progress = ResolveFemaleVersion(quest.progressMale, quest.progressFemale),
completion = ResolveFemaleVersion(quest.completionMale, quest.completionFemale),
}
return standardQuest
end
@ -36,7 +40,9 @@ local function GetDataByKey(dataType, dataId)
end
local function replacePlaceholders(text)
if text == nil then return text end
if text == nil then
return text
end
local playerName = UnitName("player")
local _, playerClass = UnitClass("player")
@ -77,22 +83,22 @@ local function replacePlaceholders(text)
return formatted
end
local function SetQuestDetails(questId, headerText, objectiveText, descriptionHeader, descriptionText, parentFrame, yOffset)
local function ShowTranslatedQuestFrame(questId, headerText, objectiveText, descriptionHeader, descriptionText, parentFrame, yOffset)
objectiveText = replacePlaceholders(objectiveText);
descriptionText = replacePlaceholders(descriptionText);
if CzechQuestsOptions["DEBUG_MODE"] then
headerText = headerText .. " (" .. questId ..")"
headerText = headerText .. " (" .. questId .. ")"
end
QuestTranslationFramePrimaryHeader:SetText(headerText:upper())
QuestTranslationFramePrimaryText:SetText(objectiveText)
QuestTranslationFrameSecondaryHeader:SetText(descriptionHeader:upper())
QuestTranslationFrameSecondaryText:SetText(descriptionText)
TranslationInfoFramePrimaryHeader:SetText(headerText:upper())
TranslationInfoFramePrimaryText:SetText(objectiveText)
TranslationInfoFrameSecondaryHeader:SetText(descriptionHeader:upper())
TranslationInfoFrameSecondaryText:SetText(descriptionText)
textTopMargin = -QuestTranslationFramePrimaryHeader:GetHeight() - 15
descriptionHeaderTopMargin = textTopMargin - QuestTranslationFramePrimaryText:GetHeight() - 10
descriptionTextTopMargin = descriptionHeaderTopMargin - QuestTranslationFrameSecondaryHeader:GetHeight() - 5
textTopMargin = -TranslationInfoFramePrimaryHeader:GetHeight() - 15
descriptionHeaderTopMargin = textTopMargin - TranslationInfoFramePrimaryText:GetHeight() - 20
descriptionTextTopMargin = descriptionHeaderTopMargin - TranslationInfoFrameSecondaryHeader:GetHeight() - 5
local heightPadding = 10
@ -104,27 +110,41 @@ local function SetQuestDetails(questId, headerText, objectiveText, descriptionHe
addPadding(headerText, 10)
addPadding(objectiveText, 5)
addPadding(descriptionHeader, 20)
addPadding(descriptionHeader, 25)
addPadding(descriptionText, 5)
QuestTranslationFramePrimaryHeader:SetPoint("TOPLEFT", 10, -10)
QuestTranslationFramePrimaryText:SetPoint("TOPLEFT", 10, textTopMargin)
QuestTranslationFrameSecondaryHeader:SetPoint("TOPLEFT", 10, descriptionHeaderTopMargin)
QuestTranslationFrameSecondaryText:SetPoint("TOPLEFT", 10, descriptionTextTopMargin)
QuestTranslationFrame:SetPoint("TOPLEFT", parentFrame, "TOPRIGHT", -15, yOffset)
TranslationInfoFramePrimaryHeader:SetPoint("TOPLEFT", 10, -10)
TranslationInfoFramePrimaryText:SetPoint("TOPLEFT", 10, textTopMargin)
TranslationInfoFrameSecondaryHeader:SetPoint("TOPLEFT", 10, descriptionHeaderTopMargin)
TranslationInfoFrameSecondaryText:SetPoint("TOPLEFT", 10, descriptionTextTopMargin)
TranslationInfoFrame:SetPoint("TOPLEFT", parentFrame, "TOPRIGHT", -15, yOffset)
QuestTranslationFrame:SetParent(parentFrame)
QuestTranslationFrame:SetHeight(
QuestTranslationFramePrimaryHeader:GetHeight() +
QuestTranslationFramePrimaryText:GetHeight() +
QuestTranslationFrameSecondaryHeader:GetHeight() +
QuestTranslationFrameSecondaryText:GetHeight() +
TranslationInfoFrame:SetParent(parentFrame)
TranslationInfoFrame:SetHeight(
TranslationInfoFramePrimaryHeader:GetHeight() +
TranslationInfoFramePrimaryText:GetHeight() +
TranslationInfoFrameSecondaryHeader:GetHeight() +
TranslationInfoFrameSecondaryText:GetHeight() +
heightPadding
)
end
local function UpdateQuestTranslationFrame()
local selectedQuestIndex, questId, questData
local function ShowTranslatedQuestItemFrame(itemText, parentFrame, yOffset)
itemText = replacePlaceholders(itemText);
TranslationInfoFramePrimaryText:SetText(itemText)
TranslationInfoFramePrimaryText:SetPoint("TOPLEFT", 10, 5)
TranslationInfoFrame:SetPoint("TOPLEFT", parentFrame, "TOPRIGHT", -15, yOffset)
TranslationInfoFrame:SetParent(parentFrame)
TranslationInfoFrame:SetHeight(TranslationInfoFramePrimaryText:GetHeight() + 30)
TranslationInfoFramePrimaryText:SetPoint("TOPLEFT", 10, -10)
TranslationInfoFrame:SetPoint("TOPLEFT", parentFrame, "TOPRIGHT", -15, yOffset)
end
local function UpdateTranslationInfoFrame(frameEvent)
local selectedQuestIndex, questId, questData, itemName
if QuestLogFrame:IsShown() then
selectedQuestIndex = GetQuestLogSelection()
@ -134,18 +154,18 @@ local function UpdateQuestTranslationFrame()
questData = GetDataByKey("questData", questId)
if questData then
QuestTranslationFrame:Show()
SetQuestDetails(
questId,
questData.title,
questData.objective,
addonDataTable.translations["description"],
questData.description,
QuestLogFrame,
-80
TranslationInfoFrame:Show()
ShowTranslatedQuestFrame(
questId,
questData.title,
questData.objective,
addonDataTable.translations["description"],
questData.description,
QuestLogFrame,
-80
)
else
QuestTranslationFrame:Hide()
TranslationInfoFrame:Hide()
end
end
end
@ -156,10 +176,10 @@ local function UpdateQuestTranslationFrame()
if questId then
questData = GetDataByKey("questData", questId)
if questData then
QuestTranslationFrame:Show()
TranslationInfoFrame:Show()
if lastQuestFrameEvent == "QUEST_PROGRESS" then
SetQuestDetails(
if frameEvent == "QUEST_PROGRESS" then
ShowTranslatedQuestFrame(
questId,
questData.title,
questData.progress,
@ -168,8 +188,12 @@ local function UpdateQuestTranslationFrame()
QuestFrame,
-80
)
elseif lastQuestFrameEvent == "QUEST_COMPLETE" then
SetQuestDetails(
elseif frameEvent == "QUEST_COMPLETE" then
if CzechQuestsOptions["DEBUG_MODE"] then
QuestDoneFrame:Show()
QuestDoneFrame.text:SetText("Quest #" .. questId .. " is DONE!")
end
ShowTranslatedQuestFrame(
questId,
questData.title,
questData.completion,
@ -178,8 +202,8 @@ local function UpdateQuestTranslationFrame()
QuestFrame,
-80
)
elseif lastQuestFrameEvent == "QUEST_DETAIL" then
SetQuestDetails(
elseif frameEvent == "QUEST_DETAIL" then
ShowTranslatedQuestFrame(
questId,
questData.title,
questData.description,
@ -188,52 +212,54 @@ local function UpdateQuestTranslationFrame()
QuestFrame,
-80
)
elseif lastQuestFrameEvent == "QUEST_FINISHED" then
QuestTranslationFrame:Hide()
elseif frameEvent == "QUEST_FINISHED" then
TranslationInfoFrame:Hide()
end
else
QuestTranslationFrame:Hide()
TranslationInfoFrame:Hide()
end
end
end
if ItemTextFrame:IsShown() then
itemName = ItemTextGetItem();
local itemText = GetDataByKey("questItems", itemName)
TranslationInfoFrame:Show()
ShowTranslatedQuestItemFrame(itemText, ItemTextFrame, -80)
end
end
TranslationInfoFrame:SetScript("OnEvent", function(self, event, ...)
if event == "QUEST_PROGRESS" or event == "QUEST_COMPLETE" or event == "QUEST_FINISHED" or event == "QUEST_DETAIL" then
UpdateTranslationInfoFrame(event)
end
if (event == "ITEM_TEXT_READY") then
UpdateTranslationInfoFrame(event)
end
end)
-- Hover is enabled only for QuestLogFrame because i do know event for change quest from list
local function SetHoverScripts(frame, children)
local frameName = frame:GetName()
if not string.find(frameName, "QuestLogItem") and not string.find(frameName, "QuestProgressItem") then
frame:SetScript("OnEnter", function()
UpdateTranslationInfoFrame()
end)
frame:SetScript("OnLeave", function()
TranslationInfoFrame:Hide()
end)
if children then
for i = 1, frame:GetNumChildren() do
local child = select(i, frame:GetChildren())
SetHoverScripts(child, true)
end
end
end
end
local function SetQuestHoverScripts(frame, children)
--local frameName = frame:GetName()
--if frameName ~= "QuestLogListScrollFrame" and not string.find(frameName, "QuestLogItem") and not string.find(frameName, "QuestProgressItem") then
-- frame:SetScript("OnEnter", function()
UpdateQuestTranslationFrame()
--end)
--frame:SetScript("OnLeave", function()
-- QuestTranslationFrame:Hide()
--end)
--if children then
-- for i = 1, frame:GetNumChildren() do
-- local child = select(i, frame:GetChildren())
-- SetQuestHoverScripts(child, true)
-- end
--end
--end
end
QuestTranslationFrame:SetScript("OnEvent", function(self, event, ...)
if event == "QUEST_PROGRESS" or event == "QUEST_COMPLETE" or event == "QUEST_FINISHED" or event == "QUEST_DETAIL" then
lastQuestFrameEvent = event
UpdateQuestTranslationFrame()
end
end)
SetQuestHoverScripts(QuestLogFrame, true)
SetQuestHoverScripts(QuestFrame, false)
SetQuestHoverScripts(QuestProgressScrollFrame, true)
SetQuestHoverScripts(QuestDetailScrollFrame, true)
SetQuestHoverScripts(QuestRewardScrollFrame, true)
SetQuestHoverScripts(QuestFrameCompleteButton, true)
SetQuestHoverScripts(QuestFrameCompleteQuestButton, true)
SetQuestHoverScripts(QuestFrameGoodbyeButton, true)
SetQuestHoverScripts(QuestFrameCancelButton, true)
SetHoverScripts(QuestLogFrame, false)