Applied a round of polishing to the Breakdown Window

This commit is contained in:
Tercio Jose
2024-03-03 15:18:10 -03:00
parent ca192bb646
commit b1a7c5e278
14 changed files with 246 additions and 34 deletions
+3 -1
View File
@@ -257,7 +257,7 @@
---@field GetMSTime fun(combat: combat) : number, number
---@field GetSegmentSlotId fun(combat: combat) : segmentid
---@field GetCombatName fun(combat: combat, bOnlyName: boolean?, bTryFind: boolean?) : string, number?, number?, number?, number? get the name of the combat
---@field GetCombatIcon fun(combat: combat) : df_atlasinfo
---@field GetCombatIcon fun(combat: combat) : df_atlasinfo, df_atlasinfo?
---@field GetTrinketProcsForPlayer fun(self: combat, playerName: string) : table<spellid, trinketprocdata> return a key|value table containing the spellId as key and a table with information about the trinket as value
---@field IsMythicDungeon fun(combat: combat) : boolean, number return a boolean indicating if the combat is from a mythic+ dungeon, if true, also return the runId
---@field GetMythicDungeonInfo fun(combat: combat) : mythicdungeoninfo
@@ -546,6 +546,7 @@
---@class breakdownsegmentline : button
---@field segmentText df_label
---@field segmentIcon df_image
---@field segmentSubIcon df_image
---@field UpdateLine function
---@field combatUniqueID uniquecombatid
---@field isSelected boolean
@@ -554,6 +555,7 @@
---@field UID uniquecombatid
---@field combatName string
---@field combatIcon df_atlasinfo
---@field combatIcon2 df_atlasinfo? used for the second icon in the segment line, this shows the trash or boss icon where the primary icon shows the mythic+ icon for example
---@field r number
---@field g number
---@field b number
+2
View File
@@ -192,8 +192,10 @@
---@field ParseTexture fun(self:table, texture:texturepath|textureid|atlasname|atlasinfo, width: number?, height: number?, leftTexCoord: number?, rightTexCoord: number?, topTexCoord: number?, bottomTexCoord: number?, vertexRed:number|string?, vertexGreenvertexRed:number?, vertexBluevertexRed:number?, vertexAlphavertexRed:number?) : any, number?, number?, number?, number?, number?, number?, number?, number?, number?, number?, number?, number?
---@field IsTexture fun(self:table, texture:any, bCheckTextureObject: boolean?) : boolean
---@field CreateAtlasString fun(self:table, atlas:atlasinfo|atlasname, textureHeight:number?, textureWidth:number?) : string
---@field SetMask fun(self:table, texture:texture, maskTexture:atlasname|texturepath|textureid) : nil
---@field
--[=[
Wrapped objects: when using the following functions, the object will be wrapped in a table, e.g. detailsFramework:CreateButton() will return a table with the button, the button will be accessible through the "button" key.
The wrapper table will have the same metatable as the wrapped object, so you can call methods on the wrapper table as if it was the wrapped object.
+14 -1
View File
@@ -1,6 +1,6 @@
local dversion = 517
local dversion = 518
local major, minor = "DetailsFramework-1.0", dversion
local DF, oldminor = LibStub:NewLibrary(major, minor)
@@ -2694,6 +2694,19 @@ DF.slider_templates["OPTIONS_SLIDER_TEMPLATE"] = {
thumbcolor = {0, 0, 0, 0.5},
}
DF.slider_templates["MODERN_SLIDER_TEMPLATE"] = {
thumbtexture = "Minimal_SliderBar_Button", --atlas name
thumbwidth = 20,
thumbheight = 19,
thumbcolor = {1, 1, 1, 0.924},
slider_left = "Minimal_SliderBar_Left",
slider_right = "Minimal_SliderBar_Right",
slider_middle = "_Minimal_SliderBar_Middle",
amount_color = "white",
amount_size = 12,
amount_outline = "outline",
}
---install a template
---@param widgetType string
---@param templateName string
+12 -2
View File
@@ -4229,9 +4229,18 @@ detailsFramework.RadioGroupCoreFunctions = {
end
if (optionTable.mask) then
checkbox.Icon:SetMask(optionTable.mask)
if (not checkbox.Icon.Mask) then
checkbox.Icon.Mask = checkbox:CreateMaskTexture(nil, "overlay")
checkbox.Icon.Mask:SetAllPoints(checkbox.Icon.widget)
checkbox.Icon.Mask:SetTexture(optionTable.mask)
checkbox.Icon:AddMaskTexture(checkbox.Icon.Mask)
end
checkbox.Icon.Mask:SetTexture(optionTable.mask)
else
checkbox.Icon:SetMask("")
--checkbox.Icon:SetMask("")
if (checkbox.Icon.Mask) then
checkbox.Icon.Mask:SetTexture("")
end
end
else
checkbox.Icon:SetTexture("")
@@ -4324,6 +4333,7 @@ detailsFramework.RadioGroupCoreFunctions = {
---@field param any?
---@field texture string?
---@field texcoord table?
---@field mask any?
---@field width number?
---@field height number?
---@field text_size number?
+21
View File
@@ -493,6 +493,10 @@ function detailsFramework:SetAtlas(textureObject, atlas, useAtlasSize, filterMod
textureObject:SetVertexColor(atlasInfo.vertexRed or 1, atlasInfo.vertexGreen or 1, atlasInfo.vertexBlue or 1, atlasInfo.vertexAlpha or 1)
end
end
elseif (type(atlas) == "string" or type(atlas) == "number") then
---@cast atlas string
textureObject:SetTexture(atlas)
end
end
@@ -680,3 +684,20 @@ function detailsFramework:IsTexture(texture, bCheckTextureObject)
return false
end
---Receives a texture object and a texture to use as mask
---If the mask texture is not created, it will be created and added to a key named MaskTexture
---@param self table
---@param texture texture
---@param maskTexture string|number
function detailsFramework:SetMask(texture, maskTexture)
if (not texture.MaskTexture) then
local parent = texture:GetParent()
local maskTextureObject = parent:CreateMaskTexture(nil, "artwork")
maskTextureObject:SetAllPoints(texture)
texture:AddMaskTexture(maskTextureObject)
texture.MaskTexture = maskTextureObject
end
texture.MaskTexture:SetTexture(maskTexture)
end
+55 -2
View File
@@ -918,6 +918,7 @@ local set_as_checkbok = function(self)
self.SetCheckedTexture = setCheckedTexture
self.SetChecked = switch_set_value
self.GetChecked = switch_get_value
self._thumb:Hide()
self._text:Hide()
@@ -1059,7 +1060,10 @@ function DFSliderMetaFunctions:SetTemplate(template)
local templateName = template
template = DF:GetTemplate("switch", templateName)
if (not template) then
print("no template found", templateName)
template = DF:GetTemplate("slider", templateName)
if (not template) then
print("no template found", templateName)
end
end
end
@@ -1096,9 +1100,30 @@ function DFSliderMetaFunctions:SetTemplate(template)
if (template.thumbtexture) then
if (self.thumb) then
self.thumb:SetTexture(template.thumbtexture)
DF:SetAtlas(self.thumb, template.thumbtexture)
end
end
if (template.slider_left) then
if (self.slider_left) then
DF:SetAtlas(self.slider_left, template.slider_left)
end
end
if (template.slider_right) then
if (self.slider_right) then
DF:SetAtlas(self.slider_right, template.slider_right)
end
end
if (template.slider_middle) then
if (self.slider_middle) then
self:SetBackdrop(nil)
DF:SetAtlas(self.slider_middle, template.slider_middle)
end
end
if (template.thumbwidth) then
if (self.thumb) then
self.thumb:SetWidth(template.thumbwidth)
@@ -1116,6 +1141,18 @@ function DFSliderMetaFunctions:SetTemplate(template)
end
end
if (template.amount_color) then
DF:SetFontColor(self.amt, template.amount_color)
end
if (template.amount_outline) then
DF:SetFontOutline(self.amt, template.amount_outline)
end
if (template.amount_size) then
DF:SetFontSize(self.amt, template.amount_size)
end
--switch only
if (template.enabled_backdropcolor) then
local r, g, b, a = DF:ParseColors(template.enabled_backdropcolor)
@@ -1261,6 +1298,22 @@ function DF:NewSlider (parent, container, name, member, width, height, minValue,
SliderObject.slider:SetThumbTexture (SliderObject.thumb)
SliderObject.slider.thumb = SliderObject.thumb
SliderObject.slider_left = SliderObject.slider:CreateTexture("$parentLeft", "artwork")
SliderObject.slider_left:SetPoint("topright", SliderObject.slider, "topleft", 0, 0)
SliderObject.slider_left:SetPoint("bottomright", SliderObject.slider, "bottomleft", 0, 0)
SliderObject.slider_left:SetWidth(11)
SliderObject.slider_right = SliderObject.slider:CreateTexture("$parentRight", "artwork")
SliderObject.slider_right:SetPoint("topleft", SliderObject.slider, "topright", 0, 0)
SliderObject.slider_right:SetPoint("bottomleft", SliderObject.slider, "bottomright", 0, 0)
SliderObject.slider_right:SetWidth(11)
SliderObject.slider_middle = SliderObject.slider:CreateTexture("$parentMiddle", "artwork")
SliderObject.slider_middle:SetPoint("topleft", SliderObject.slider_left, "topright", 0, 0)
SliderObject.slider_middle:SetPoint("bottomleft", SliderObject.slider_left, "bottomright", 0, 0)
SliderObject.slider_middle:SetPoint("topright", SliderObject.slider_right, "topleft", 0, 0)
SliderObject.slider_middle:SetPoint("bottomright", SliderObject.slider_right, "bottomleft", 0, 0)
if (not isSwitch) then
SliderObject.have_tooltip = "Right Click to Type the Value"
end
+1
View File
@@ -651,6 +651,7 @@ function LibStub:IterateLibraries()end
---@field GetTextTruncateLines fun(self: fontstring) : number
---@class texture : region
---@field AddMaskTexture fun(self: texture, maskTexture: texture)
---@field SetDrawLayer fun(self: texture, layer: drawlayer, subLayer: number?)
---@field GetTexture fun(self: texture) : any
---@field SetTexture fun(self: texture, path: textureid|texturepath, horizontalWrap: texturewrap?, verticalWrap: texturewrap?, filter: texturefilter?)
+9 -5
View File
@@ -369,6 +369,7 @@ local segmentTypeToString = {
---return the atlasinfo for the combat icon
---@param self combat
---@return df_atlasinfo
---@return df_atlasinfo?
function classCombat:GetCombatIcon()
local textureAtlas = Details:GetTextureAtlasTable()
@@ -381,20 +382,23 @@ local segmentTypeToString = {
if (combatType == DETAILS_SEGMENTTYPE_OVERALL) then
return textureAtlas["segment-icon-overall"]
elseif (combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_OVERALL or combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON) then
elseif (combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON) then
return textureAtlas["segment-icon-mythicplus"]
elseif (combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_OVERALL) then
return textureAtlas["segment-icon-mythicplus"], textureAtlas["segment-icon-mythicplus-overall"]
elseif (combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_BOSSTRASH) then
return textureAtlas["segment-icon-mythicplus"]
return textureAtlas["segment-icon-mythicplus"], textureAtlas["segment-icon-broom"]
elseif (combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_BOSSWIPE) then
return textureAtlas["segment-icon-mythicplus"]
return textureAtlas["segment-icon-mythicplus"], textureAtlas["segment-icon-skull"]
elseif (combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_BOSS) then
return textureAtlas["segment-icon-mythicplus"]
return textureAtlas["segment-icon-mythicplus"], textureAtlas["segment-icon-skull"]
elseif (combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_TRASH) then
return textureAtlas["segment-icon-mythicplus"]
return textureAtlas["segment-icon-mythicplus"], textureAtlas["segment-icon-broom"]
elseif (combatType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_GENERIC) then
return textureAtlas["segment-icon-mythicplus"]
@@ -1538,6 +1538,7 @@ function spellsTab.CreateSpellBar(self, index) --~spellbar ~spellline ~spell ~cr
local spellIcon = spellIconFrame:CreateTexture("$parentTexture", "overlay")
spellIcon:SetAllPoints()
spellIcon:SetTexCoord(.1, .9, .1, .9)
detailsFramework:SetMask(spellIcon, [[Interface\COMMON\common-iconmask]])
spellBar.spellIcon = spellIcon
--create a square frame which is placed at the right side of the line to show which targets for damaged by the spell
@@ -1,10 +1,14 @@
---@type details
local Details = Details
local GameTooltip = GameTooltip
---@type detailsframework
local detailsFramework = DetailsFramework
local GameTooltip = GameTooltip
local unpack = unpack
local CreateFrame = CreateFrame
local GetSpellInfo = GetSpellInfo
local _
Details.BuffUptimeSpellsToIgnore = {
[186401] = true, --Sign of the Skirmisher
@@ -70,7 +74,9 @@ local createAuraTabOnBreakdownWindow = function(tab, frame)
local iconTexture = line:CreateTexture("$parentIcon", "overlay")
iconTexture:SetSize(scroll_line_height -2 , scroll_line_height - 2)
iconTexture:SetAlpha(0.834)
iconTexture:SetAlpha(0.924)
detailsFramework:SetMask(iconTexture, [[Interface\COMMON\common-iconmask]])
local nameLabel = line:CreateFontString("$parentName", "overlay", "GameFontNormal")
local uptimeLabel = line:CreateFontString("$parentUptime", "overlay", "GameFontNormal")
local uptimePercentLabel = line:CreateFontString("$parentPercent", "overlay", "GameFontNormal")
@@ -331,6 +331,7 @@ local createPlayerScrollBox = function(breakdownWindowFrame, breakdownSideMenu,
local specIcon = upFrame:CreateTexture("$parentSpecIcon", "artwork")
specIcon:SetSize(headerTable[1].width - 1, headerTable[1].width - 1)
specIcon:SetAlpha(0.71)
detailsFramework:SetMask(specIcon, [[Interface\COMMON\common-iconmask]])
local roleIcon = upFrame:CreateTexture("$parentRoleIcon", "overlay")
roleIcon:SetSize((player_line_height-2) / 2, (player_line_height-2) / 2)
@@ -505,13 +506,19 @@ local createSegmentsScrollBox = function(breakdownWindowFrame, breakdownSideMenu
local updateSegmentLine = function(self, index, segmentData) --~update
local combatName = segmentData.combatName
local r, g, b = segmentData.r, segmentData.g, segmentData.b
local atlasInfo = segmentData.combatIcon
local combatIcon1 = segmentData.combatIcon
local combatIcon2 = segmentData.combatIcon2
self.segmentText:SetText(combatName)
self.segmentText:SetTextColor(r, g, b)
detailsFramework:TruncateText(self.segmentText, player_scroll_size[1] - 20)
detailsFramework:SetAtlas(self.segmentIcon, combatIcon1)
detailsFramework:SetAtlas(self.segmentIcon, atlasInfo)
if (combatIcon2) then
detailsFramework:SetAtlas(self.segmentSubIcon, combatIcon2)
else
self.segmentSubIcon:SetTexture("")
end
self.combatUniqueID = segmentData.UID
@@ -569,6 +576,10 @@ local createSegmentsScrollBox = function(breakdownWindowFrame, breakdownSideMenu
segmentIcon:SetSize(player_line_height - 4, player_line_height - 4)
segmentIcon:SetAlpha(0.834)
local segmentSubIcon = detailsFramework:CreateTexture(line, "", player_line_height, player_line_height - 1, "artwork")
segmentSubIcon:SetSize(player_line_height - 4, player_line_height - 4)
segmentSubIcon:SetAlpha(0.834)
local segmentText = detailsFramework:CreateLabel(line, "", fontSize or 11, "white", "GameFontNormal")
segmentText.outline = fontOutline or "none"
segmentText.textcolor = {1, 1, 1, .9}
@@ -578,9 +589,11 @@ local createSegmentsScrollBox = function(breakdownWindowFrame, breakdownSideMenu
line.segmentText = segmentText
line.segmentIcon = segmentIcon
line.segmentSubIcon = segmentSubIcon
segmentIcon:SetPoint("left", line, "left", 2, 0)
segmentText:SetPoint("left", segmentIcon, "right", 3, 1)
segmentSubIcon:SetPoint("left", segmentIcon, "right", 2, 0)
segmentText:SetPoint("left", segmentSubIcon, "right", 3, 1)
line.UpdateLine = updateSegmentLine
@@ -773,12 +786,13 @@ function breakdownWindowPlayerList.CreatePlayerListFrame()
local UID = combatObject:GetCombatUID()
local combatName, r, g, b = combatObject:GetCombatName(true)
local combatIcon = combatObject:GetCombatIcon()
local combatIcon, combatSubIcon = combatObject:GetCombatIcon()
segmentsData[i] = {
UID = UID,
combatName = combatName,
combatIcon = combatIcon,
combatIcon2 = combatSubIcon,
r = r or 1,
g = g or 1,
b = b or 1,
+5 -3
View File
@@ -6368,7 +6368,7 @@ local buildSegmentTooltip = function(self, deltaTime)
local mythicDungeonRunId
local statusBarTexture = "Skyline"
local combatTimeColor = "silver"
local combatTimeColor = "gray"
local combatTimeColorGeneric = "gray"
for i = Details.segments_amount, 1, -1 do
@@ -6424,7 +6424,8 @@ local buildSegmentTooltip = function(self, deltaTime)
--dumpt(mythicDungeonInfo)
gameCooltip:AddLine(broomStick .. " " .. combatName, detailsFramework:IntegerToTimer(thisCombat:GetCombatTime()), 1, dungeonColor, combatTimeColor)
gameCooltip:AddIcon(thisCombat:GetCombatIcon(), "main", "left", nil, nil, nil, nil, nil, nil, nil, nil, true)
local bDesaturated = false
gameCooltip:AddIcon(thisCombat:GetCombatIcon(), "main", "left", nil, nil, nil, nil, nil, nil, nil, nil, bDesaturated)
--submenu
gameCooltip:AddLine(Loc["STRING_SEGMENT_TRASH"], nil, 2, "white", "white")
@@ -6651,7 +6652,7 @@ local buildSegmentTooltip = function(self, deltaTime)
else
mythicDungeonRunId = false
local bFindEnemyName = true
gameCooltip:AddLine(thisCombat:GetCombatName(false, bFindEnemyName), formattedElapsedTime, 1, "yellow", combatTimeColorGeneric)
gameCooltip:AddLine(thisCombat:GetCombatName(false, bFindEnemyName), _, 1, "yellow", combatTimeColorGeneric) --formattedElapsedTime
gameCooltip:AddIcon(thisCombat:GetCombatIcon(), "main", "left")
--print("passing here...")
@@ -6696,6 +6697,7 @@ local buildSegmentTooltip = function(self, deltaTime)
GameCooltip:AddLine("$div", nil, nil, -5, -13)
---------------------------------------------------------------------------------------------------------------------------------------------------
--> current combat
local thisCombat = Details:GetCurrentCombat()
local dateStart, dateEnd = thisCombat:GetDate()
+18 -7
View File
@@ -1723,20 +1723,32 @@ function Details:SaveProfileSpecial()
end
--save things for the mythic dungeon run
function Details:SaveState_CurrentMythicDungeonRun (runID, zoneName, zoneID, startAt, segmentID, level, ejID, latestBossAt)
function Details:SaveState_CurrentMythicDungeonRun(runID, zoneName, zoneID, startAt, segmentID, level, ejID, latestBossAt)
local zoneName, _, _, _, _, _, _, currentZoneID = GetInstanceInfo()
local savedTable = Details.mythic_dungeon_currentsaved
savedTable.started = true
savedTable.run_id = runID
savedTable.dungeon_name = zoneName
savedTable.dungeon_zone_id = zoneID
savedTable.dungeon_zone_id = currentZoneID
savedTable.started_at = startAt
savedTable.segment_id = segmentID
savedTable.level = level
savedTable.ej_id = ejID
savedTable.previous_boss_killed_at = latestBossAt
local playersOnTheRun = {}
for i = 1, GetNumGroupMembers() do
local unitGUID = UnitGUID("party" .. i)
if (unitGUID) then
playersOnTheRun[#playersOnTheRun+1] = unitGUID
end
end
savedTable.players = playersOnTheRun
end
function Details:UpdateState_CurrentMythicDungeonRun (stillOngoing, segmentID, latestBossAt)
function Details:UpdateState_CurrentMythicDungeonRun(stillOngoing, segmentID, latestBossAt)
local savedTable = Details.mythic_dungeon_currentsaved
if (not stillOngoing) then
@@ -1753,7 +1765,6 @@ function Details:UpdateState_CurrentMythicDungeonRun (stillOngoing, segmentID, l
end
function Details:RestoreState_CurrentMythicDungeonRun()
--no need to check for mythic+ if the user is playing on classic wow
if (DetailsFramework.IsTimewalkWoW()) then
return
@@ -1762,7 +1773,7 @@ function Details:RestoreState_CurrentMythicDungeonRun()
local savedTable = Details.mythic_dungeon_currentsaved
local mythicLevel = C_ChallengeMode.GetActiveKeystoneInfo()
local zoneName, _, _, _, _, _, _, currentZoneID = GetInstanceInfo()
local mapID = C_Map.GetBestMapForUnit ("player")
local mapID = C_Map.GetBestMapForUnit("player")
if (not mapID) then
--print("D! no mapID to restored mythic dungeon state.")
@@ -1772,7 +1783,7 @@ function Details:RestoreState_CurrentMythicDungeonRun()
local ejID = 0
if (mapID) then
ejID = DetailsFramework.EncounterJournal.EJ_GetInstanceForMap (mapID) or 0
ejID = DetailsFramework.EncounterJournal.EJ_GetInstanceForMap(mapID) or 0
end
--is there a saved state for the dungeon?
@@ -1793,7 +1804,7 @@ function Details:RestoreState_CurrentMythicDungeonRun()
Details.MythicPlus.IsRestoredState = true
DetailsMythicPlusFrame.IsDoingMythicDungeon = true
print("D! (debug) mythic dungeon state restored.")
Details:Msg("D! (debug) mythic dungeon state restored.")
C_Timer.After(2, function()
Details:SendEvent("COMBAT_MYTHICDUNGEON_START")
+78 -6
View File
@@ -44,6 +44,7 @@ do
---@class compareplayerframe : frame object containing two scrollboxes, one for spells and another for targets, is used to show comparison data of another player
---@field spellsScroll comparescrollbox
---@field targetsScroll comparescrollbox
---@field titleIcon df_image shows the combat icon
---@field titleLabel df_label text to show the player name or segment name above the frame scroll, indicates the name or segment being compared
---@field playerObject actor
---@field mainPlayer actor
@@ -169,10 +170,14 @@ do
targetMaxLines = 16,
targetTooltipLineHeight = 16,
compareTitleIconSize = 15,
--font settings
fontSize = 10,
playerNameSize = 12,
playerNameYOffset = 12,
playerNameSize = 11,
playerNameYOffset = 15,
spellIconAlpha = 0.923,
--line colors
lineOnEnterColor = {.85, .85, .85, .5},
@@ -1100,7 +1105,6 @@ do
compareTwo.combatObject = combat
--update player name
comparePlugin.mainPlayerName.text = playerActorObject:GetDisplayName()
comparePlugin.mainPlayerObject = playerActorObject
comparePlugin.mainSpellFrameScroll.mainPlayerObject = playerActorObject
@@ -1132,6 +1136,8 @@ do
local actorObjectsToCompare = {}
setmetatable(actorObjectsToCompare, weakTable)
local maxCompares = compareTwo.db.max_compares
if (compareTwo.db.compare_type == CONST_COMPARETYPE_SEGMENT) then
--get the segmentId from the combat
local segmentId = combat:GetSegmentSlotId()
@@ -1155,9 +1161,16 @@ do
combat = combatObject
}
actorObjectsToCompare[#actorObjectsToCompare + 1] = setmetatable(actorCompareTable, weakTable)
--stop the loop the the max amount of compares is reached
if (#actorObjectsToCompare >= maxCompares) then
break
end
end
end
comparePlugin.mainPlayerName.text = combat:GetCombatName()
elseif (compareTwo.db.compare_type == CONST_COMPARETYPE_SPEC) then
local actorContainer = combat:GetContainer(displayId)
for _, actorObject in actorContainer:ListActors() do
@@ -1165,8 +1178,14 @@ do
---@type compareactortable
local actorCompareTable = {actor = actorObject, total = actorObject.total, combat = combat}
actorObjectsToCompare[#actorObjectsToCompare + 1] = setmetatable(actorCompareTable, weakTable)
--stop the loop the the max amount of compares is reached
if (#actorObjectsToCompare >= maxCompares) then
break
end
end
end
comparePlugin.mainPlayerName.text = playerActorObject:GetDisplayName()
end
table.sort(actorObjectsToCompare, sortByTotalKey)
@@ -1184,6 +1203,10 @@ do
--other player with the same spec
local actorCompareTable = actorObjectsToCompare[idx]
if (not actorCompareTable) then
print("index", idx, "is nil, actorObjectsToCompare", #actorObjectsToCompare, "maxCompares", maxCompares)
end
local playerObject = actorCompareTable.actor
local combatObject = actorCompareTable.combat
@@ -1207,9 +1230,17 @@ do
--depending on the compare mode, the "player name" will be the segment name or the player name
if (compareTwo.db.compare_type == CONST_COMPARETYPE_SPEC) then
comparisonFrame.titleLabel.text = detailsFramework:RemoveRealmName(playerObject:Name())
elseif (compareTwo.db.compare_type == CONST_COMPARETYPE_SEGMENT) then
local combatIcon, subIcon = combatObject:GetCombatIcon()
detailsFramework:SetAtlas(comparisonFrame.titleIcon, subIcon or combatIcon)
comparisonFrame.titleIcon:SetSize(comparisonFrameSettings.compareTitleIconSize, comparisonFrameSettings.compareTitleIconSize)
local bOnlyName = true
comparisonFrame.titleLabel.text = combatObject:GetCombatName(bOnlyName)
--the combat name can sometimes have pharentesis, remove them
comparisonFrame.titleLabel.text = comparisonFrame.titleLabel.text:gsub("%(.*%)", "")
detailsFramework:TruncateText(comparisonFrame.titleLabel, 124)
end
--iterate among spells of the main player and check if the spell exists on this player
@@ -1289,8 +1320,6 @@ do
comparisonFrame.targetsScroll:SetData(otherPlayerResultTargetsTable)
comparisonFrame.targetsScroll:Refresh()
end
--comparePlugin.radioGroup:Select(compareTwo.db.compare_type)
end
--called when the tab is created
@@ -1354,6 +1383,7 @@ do
text_size = 20,
texcoord = {0, 64/512, 211/512, 275/512},
callback = selectCompareMode,
mask = [[Interface\COMMON\common-iconmask]],
},
{
name = "Compare Segments", --localize-me
@@ -1366,6 +1396,7 @@ do
height = 32,
text_size = 20,
callback = selectCompareMode,
mask = [[Interface\COMMON\common-iconmask]],
}
}
@@ -1417,6 +1448,15 @@ do
radioGroup:SetPoint("bottomleft", comparePlugin, "bottomleft", 5, 5)
comparePlugin.radioGroup = radioGroup
--get all checkboxes from the radio group
local radioCheckboxes = radioGroup:GetAllCheckboxes()
for i = 1, #radioCheckboxes do
local thisCheckBox = radioCheckboxes[i]
if (thisCheckBox:GetChecked()) then
thisCheckBox.SelectedTexture:Show()
end
end
local radioGroupBackgroundTexture = comparePlugin:CreateTexture(nil, "artwork")
radioGroupBackgroundTexture:SetColorTexture(.2, .2, .2, 0.834)
radioGroupBackgroundTexture:SetPoint("bottomleft", comparePlugin, "bottomleft", 5, 8)
@@ -1424,6 +1464,26 @@ do
radioGroupBackgroundTexture:SetHeight(35)
comparePlugin.radioGroupBackgroundTexture = radioGroupBackgroundTexture
--create a slider to select how many comparison frames will be shown
local minValue, maxValue = 4, 16
local currentValue = compareTwo.db.max_compares
local scrollStep = 1
local bIsDecimals = false
local amountOfComparisonsSlider = detailsFramework:CreateSlider(comparePlugin, 160, 20, minValue, maxValue, scrollStep, currentValue, bIsDecimals)
amountOfComparisonsSlider:SetPoint("bottomright", comparePlugin, "bottomright", -30, 14)
amountOfComparisonsSlider:SetTemplate("MODERN_SLIDER_TEMPLATE")
local bObeyStep = true
amountOfComparisonsSlider:SetObeyStepOnDrag(bObeyStep)
amountOfComparisonsSlider:SetHook("OnValueChanged", function(self, fixedValue, value)
if (value == compareTwo.db.max_compares) then
return
end
value = math.floor(value)
compareTwo.db.max_compares = value
compareTwo.Refresh()
end)
comparePlugin.comparisonFramesSlider = amountOfComparisonsSlider
---create a line for the main player spells(scroll box with the spells the player used)
---@param self comparescrollbox
---@param index number
@@ -1446,6 +1506,8 @@ do
local spellIcon = line:CreateTexture("$parentIcon", "overlay")
spellIcon:SetSize(lineHeight -2 , lineHeight - 2)
detailsFramework:SetMask(spellIcon, [[Interface\COMMON\common-iconmask]])
spellIcon:SetAlpha(comparisonFrameSettings.spellIconAlpha)
local spellName = line:CreateFontString("$parentName", "overlay", "GameFontNormal")
local spellAmount = line:CreateFontString("$parentAmount", "overlay", "GameFontNormal")
@@ -1804,12 +1866,21 @@ do
newComparisonFrame:SetPoint("topleft", comparePlugin.comparisonFrames [comparePlugin.comparisonScrollFrameIndex - 1], "topright", 10, 0)
end
--texture to show the combat icon at the left side of the titleLabel
newComparisonFrame.titleIcon = detailsFramework:CreateTexture(newComparisonFrame)
newComparisonFrame.titleIcon:SetPoint("topleft", newComparisonFrame, "topleft", 0, comparisonFrameSettings.playerNameYOffset)
--player name shown above the scrolls
---@type df_label
newComparisonFrame.titleLabel = detailsFramework:CreateLabel(newComparisonFrame, "")
newComparisonFrame.titleLabel:SetPoint("topleft", newComparisonFrame, "topleft", 2, comparisonFrameSettings.playerNameYOffset)
newComparisonFrame.titleLabel:SetPoint("left", newComparisonFrame.titleIcon, "right", 2, 0)
newComparisonFrame.titleLabel.fontsize = comparisonFrameSettings.playerNameSize
--grandient texture above the comparison frame
local gradientTitle = detailsFramework:CreateTexture(newComparisonFrame, {gradient = "vertical", fromColor = {0, 0, 0, 0.25}, toColor = "transparent"}, 1, 16, "artwork", {0, 1, 0, 1})
gradientTitle:SetPoint("bottomleft", newComparisonFrame, "topleft", 0, 0)
gradientTitle:SetPoint("bottomright", newComparisonFrame, "topright", 0, 0)
--spells scroll
---@type comparescrollbox
local spellsScroll = detailsFramework:CreateScrollBox(newComparisonFrame, "$parentComparisonPlayerSpellsScroll", comparisonPlayerRefreshSpellScroll, {}, comparisonFrameSettings.comparisonScrollWidth, comparisonFrameSettings.spellScrollHeight, comparisonFrameSettings.spellLineAmount, comparisonFrameSettings.spellLineHeight)
@@ -1925,6 +1996,7 @@ do
local defaultSettings = {
compare_type = CONST_COMPARETYPE_SPEC, --1 == player, 2 == segment
max_compares = 4,
}
--> Install: install -> if successful installed; saveddata -> a table saved inside details db, used to save small amount of data like configs