Refactor Encounters, use new translations format for save space
This commit is contained in:
parent
7d9f58650a
commit
908f45eb9b
59 changed files with 103852 additions and 58396 deletions
252
Addon/Code/EncounterFrame.lua
Executable file
252
Addon/Code/EncounterFrame.lua
Executable file
|
@ -0,0 +1,252 @@
|
|||
local _, addon = ...
|
||||
|
||||
local EncounterFrame = CreateFrame("Frame", nil)
|
||||
EncounterFrame:Hide()
|
||||
|
||||
addon.EncounterFrame = EncounterFrame
|
||||
EncounterFrame.headers = {}
|
||||
|
||||
local NEXT_HEADER_ID = 0
|
||||
|
||||
function EncounterFrame:Init()
|
||||
local frame = self
|
||||
|
||||
if not EncounterJournal or not EncounterJournal.encounter or not EncounterJournal.encounter.info then
|
||||
return
|
||||
end
|
||||
|
||||
local scrollFrame = CreateFrame("ScrollFrame", "$parentOverviewScrollFrame", EncounterJournal.encounter.info, "ScrollFrameTemplate")
|
||||
|
||||
scrollFrame:SetSize(330, 370)
|
||||
scrollFrame:SetPoint("TOPLEFT", EncounterJournal.encounter.info.overviewScroll, "TOPLEFT", 0, -7)
|
||||
|
||||
scrollFrame.scrollBarX = -25
|
||||
scrollFrame.scrollBarTopY = -6
|
||||
scrollFrame.scrollBarBottomY = 6
|
||||
|
||||
frame:SetParent(scrollFrame)
|
||||
frame:SetSize(scrollFrame:GetWidth() - 10, 1)
|
||||
frame:Show()
|
||||
|
||||
scrollFrame:SetScrollChild(frame)
|
||||
|
||||
frame.summary = addon.API.CreateCzechFont(
|
||||
frame,
|
||||
CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_NAME,
|
||||
CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_SIZE
|
||||
)
|
||||
frame.summary:SetTextColor(0.251, 0.145, 0.012)
|
||||
frame.summary:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, 0)
|
||||
frame.summary:SetWidth(scrollFrame:GetWidth() - 10)
|
||||
|
||||
frame:UpdateSettings()
|
||||
|
||||
frame:InitTab()
|
||||
end
|
||||
|
||||
function EncounterFrame:UpdateSettings()
|
||||
local frame = self
|
||||
|
||||
addon.API.UpdateCzechFont(
|
||||
frame.summary,
|
||||
CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_NAME,
|
||||
CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_SIZE
|
||||
)
|
||||
|
||||
for _, header in ipairs(self.headers) do
|
||||
addon.API.UpdateCzechFont(
|
||||
header.description,
|
||||
CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_NAME,
|
||||
CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_SIZE
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
function EncounterFrame:InitTab()
|
||||
local frame = self
|
||||
|
||||
local tab = CreateFrame("Button", "EncounterJournalCustomTab", EncounterJournal.encounter.info, "EncounterTabTemplate")
|
||||
tab:SetPoint("TOP", EncounterJournal.encounter.info.modelTab, "BOTTOM", -3, -12)
|
||||
tab:SetSize(50, 40)
|
||||
tab.tooltip = "Taktika"
|
||||
|
||||
local selected = tab:CreateTexture(nil, "BACKGROUND")
|
||||
selected:SetTexture("Interface\\EncounterJournal\\UI-EncounterJournalTextures")
|
||||
selected:SetAllPoints(tab)
|
||||
selected:SetBlendMode("ADD")
|
||||
selected:SetDrawLayer("OVERLAY")
|
||||
selected:SetTexCoord(0, 0.126953125, 0.90234375, 0.9599609375)
|
||||
selected:Hide()
|
||||
tab.selected = selected
|
||||
|
||||
function tab:SetActive(enable)
|
||||
self:SetEnabled(enable);
|
||||
self:GetDisabledTexture():SetDesaturated(not enable);
|
||||
end
|
||||
|
||||
function tab:SetHighlight(enable)
|
||||
if not enable then
|
||||
self.selected:Hide();
|
||||
else
|
||||
self.selected:Show();
|
||||
end
|
||||
end
|
||||
|
||||
frame.tab = tab
|
||||
end
|
||||
|
||||
function EncounterFrame:CreateHeader()
|
||||
local frame = self
|
||||
local id = NEXT_HEADER_ID + 1
|
||||
NEXT_HEADER_ID = id
|
||||
|
||||
local HeaderFrame = CreateFrame("FRAME", "CzechQuestsEncounterHeader" .. id, frame, "EncounterInfoTemplate")
|
||||
HeaderFrame:SetSize(self:GetParent():GetWidth() - 10, 30)
|
||||
|
||||
addon.API.UpdateCzechFont(
|
||||
HeaderFrame.description,
|
||||
CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_NAME,
|
||||
CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_SIZE
|
||||
)
|
||||
|
||||
HeaderFrame.button.abilityIcon:Hide()
|
||||
HeaderFrame.button.portrait:Hide()
|
||||
HeaderFrame.button.icon2:Hide()
|
||||
HeaderFrame.button.icon3:Hide()
|
||||
HeaderFrame.button.icon4:Hide()
|
||||
|
||||
HeaderFrame.button.expandedIcon:SetPoint("TOPLEFT", HeaderFrame.button, "TOPLEFT", 10, -6);
|
||||
HeaderFrame.button.expandedIcon:SetText("+")
|
||||
HeaderFrame.expanded = false
|
||||
HeaderFrame.empty = false
|
||||
|
||||
HeaderFrame.button.title:SetPoint("TOPLEFT", HeaderFrame, "TOPLEFT", 40, -7);
|
||||
HeaderFrame.button.title:SetWidth(self:GetParent():GetWidth() - 110)
|
||||
|
||||
for i = 1, #HeaderFrame.Bullets do
|
||||
HeaderFrame.Bullets[i]:Hide()
|
||||
end
|
||||
wipe(HeaderFrame.Bullets)
|
||||
|
||||
for _, icon in ipairs(HeaderFrame.button.icons) do
|
||||
icon:Hide()
|
||||
end
|
||||
|
||||
HeaderFrame.description:SetWidth(HeaderFrame:GetWidth() - 20)
|
||||
HeaderFrame.description:Hide()
|
||||
HeaderFrame.overviewDescription:Hide()
|
||||
HeaderFrame.descriptionBG:Hide()
|
||||
HeaderFrame.descriptionBGBottom:Hide()
|
||||
|
||||
function HeaderFrame:Open()
|
||||
local header = self
|
||||
header.button.expandedIcon:SetText("-")
|
||||
header.button.expandedIcon:SetPoint("TOPLEFT", HeaderFrame.button, "TOPLEFT", 10, -5);
|
||||
if (header.empty == false) then
|
||||
header.description:Show()
|
||||
header.descriptionBG:Show()
|
||||
header.descriptionBGBottom:Show()
|
||||
end
|
||||
end
|
||||
|
||||
function HeaderFrame:Close()
|
||||
local header = self
|
||||
header.button.expandedIcon:SetText("+")
|
||||
header.button.expandedIcon:SetPoint("TOPLEFT", HeaderFrame.button, "TOPLEFT", 10, -6);
|
||||
header.description:Hide()
|
||||
header.descriptionBG:Hide()
|
||||
header.descriptionBGBottom:Hide()
|
||||
end
|
||||
|
||||
HeaderFrame.button:SetScript("OnClick", function(self)
|
||||
local header = self:GetParent()
|
||||
header.expanded = not header.expanded
|
||||
EncounterJournal_UpdateButtonState(header.button)
|
||||
if header.expanded then
|
||||
header:Open()
|
||||
else
|
||||
header:Close()
|
||||
end
|
||||
frame:ToggleHeader(header)
|
||||
end)
|
||||
|
||||
return HeaderFrame
|
||||
end
|
||||
|
||||
function EncounterFrame:UpdateHeaderPositions()
|
||||
local yOffset = -40
|
||||
|
||||
local function updatePosition(headers)
|
||||
for _, header in ipairs(headers) do
|
||||
header:SetPoint("BOTTOMRIGHT", self.summary, "BOTTOMRIGHT", 0, yOffset)
|
||||
|
||||
if header.expanded then
|
||||
yOffset = yOffset - header.description:GetHeight()
|
||||
if header.empty == false then
|
||||
yOffset = yOffset - 50
|
||||
else
|
||||
yOffset = yOffset - 30
|
||||
end
|
||||
|
||||
if header.children and #header.children > 0 then
|
||||
yOffset = updatePosition(header.children)
|
||||
end
|
||||
else
|
||||
yOffset = yOffset - 30
|
||||
end
|
||||
end
|
||||
|
||||
return yOffset
|
||||
end
|
||||
|
||||
updatePosition(self.headers)
|
||||
end
|
||||
|
||||
function EncounterFrame:ToggleHeader(header)
|
||||
if header.expanded and header.children then
|
||||
for _, child in ipairs(header.children) do
|
||||
child:Show()
|
||||
end
|
||||
end
|
||||
|
||||
if not header.expanded and header.children then
|
||||
local function hideChildren(children)
|
||||
for _, child in ipairs(children) do
|
||||
child.expanded = false
|
||||
child:Close()
|
||||
child:Hide()
|
||||
if child.children then
|
||||
hideChildren(child.children)
|
||||
end
|
||||
end
|
||||
end
|
||||
hideChildren(header.children)
|
||||
end
|
||||
|
||||
self:UpdateHeaderPositions()
|
||||
end
|
||||
|
||||
function EncounterFrame:ClearHeaders()
|
||||
local function clear(headers)
|
||||
for _, header in ipairs(headers) do
|
||||
-- Skrytí aktuálního záhlaví
|
||||
header:Hide()
|
||||
header:SetParent(nil)
|
||||
|
||||
-- Rekurzivně skrýváme podřízená záhlaví
|
||||
if header.children and #header.children > 0 then
|
||||
clear(header.children)
|
||||
end
|
||||
|
||||
-- Vymazání záhlaví
|
||||
header = nil
|
||||
end
|
||||
|
||||
-- Vyprázdnění seznamu
|
||||
wipe(headers)
|
||||
end
|
||||
|
||||
-- Vymazání všech hlavních záhlaví
|
||||
clear(self.headers)
|
||||
end
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue