General development and bug fixes (see commit description).
- Fixed the deaths display, where the windows wasn't usig custom text scripts. - Fixed an issue with custom displays, where it was unable to use class colors in their texts. - More development and bug fixes on the new Mythic+ Run Completion panel. - Framework Update.
This commit is contained in:
+49
-12
@@ -481,12 +481,16 @@ detailsFramework:Mixin(ButtonMetaFunctions, detailsFramework.ScriptHookMixin)
|
||||
---enable the button making it clickable and not grayed out
|
||||
---@return unknown
|
||||
function ButtonMetaFunctions:Enable()
|
||||
|
||||
return self.button:Enable()
|
||||
end
|
||||
|
||||
---disable the button making it unclickable and grayed out
|
||||
---@return unknown
|
||||
function ButtonMetaFunctions:Disable()
|
||||
if (self.color_texture) then
|
||||
self.color_texture:SetVertexColor(0.14, 0.14, 0.14)
|
||||
end
|
||||
return self.button:Disable()
|
||||
end
|
||||
|
||||
@@ -733,7 +737,7 @@ detailsFramework:Mixin(ButtonMetaFunctions, detailsFramework.ScriptHookMixin)
|
||||
---receives a table where the keys are settings and the values are the values to set
|
||||
---this is the list of keys the table support:
|
||||
---width, height, icon|table, textcolor, textsize, textfont, textalign, backdrop, backdropcolor, backdropbordercolor, onentercolor, onleavecolor, onenterbordercolor, onleavebordercolor
|
||||
---@param template table
|
||||
---@param template table|string
|
||||
function ButtonMetaFunctions:SetTemplate(template)
|
||||
if (type(template) == "string") then
|
||||
template = detailsFramework:GetTemplate("button", template)
|
||||
@@ -808,6 +812,25 @@ function ButtonMetaFunctions:SetTemplate(template)
|
||||
if (template.textalign) then
|
||||
self.textalign = template.textalign
|
||||
end
|
||||
|
||||
if (template.rounded_corner) then
|
||||
self:SetBackdrop(nil)
|
||||
detailsFramework:AddRoundedCornersToFrame(self.widget or self, template.rounded_corner)
|
||||
|
||||
--check if this is a color picker button
|
||||
if (self.__iscolorpicker) then
|
||||
self.color_texture:SetTexture([[Interface\CHARACTERFRAME\TempPortraitAlphaMaskSmall]], "CLAMP", "CLAMP", "TRILINEAR")
|
||||
self.color_texture:SetDrawLayer("overlay", 7)
|
||||
self.color_texture:SetPoint("topleft", self.widget, "topleft", 2, -2)
|
||||
self.color_texture:SetPoint("bottomright", self.widget, "bottomright", -2, 2)
|
||||
|
||||
self.background_texture:SetDrawLayer("overlay", 6)
|
||||
self.background_texture:SetPoint("topleft", self.color_texture, "topleft", 2, -2)
|
||||
self.background_texture:SetPoint("bottomright", self.color_texture, "bottomright", -2, 2)
|
||||
|
||||
self.widget.texture_disabled:SetTexture([[Interface\CHARACTERFRAME\TempPortraitAlphaMaskSmall]], "CLAMP", "CLAMP", "TRILINEAR")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------------------------------------------
|
||||
@@ -857,7 +880,7 @@ end
|
||||
---@field textfont string
|
||||
---@field textsize number
|
||||
---@field icon texture created after calling SetIcon()
|
||||
---@field SetTemplate fun(self: df_button, template: table) set the button visual by a template
|
||||
---@field SetTemplate fun(self: df_button, template: table|string) set the button visual by a template
|
||||
---@field RightClick fun(self: df_button) right click the button executing its right click function
|
||||
---@field Exec fun(self: df_button) execute the button function for the left button
|
||||
---@field Disable fun(self: df_button) disable the button
|
||||
@@ -1064,6 +1087,15 @@ end
|
||||
return self.color_texture:GetVertexColor()
|
||||
end
|
||||
|
||||
---@class df_colorpickbutton : df_button
|
||||
---@field color_callback function
|
||||
---@field Cancel function
|
||||
---@field SetColor function
|
||||
---@field GetColor function
|
||||
---@field __iscolorpicker boolean
|
||||
---@field color_texture texture
|
||||
---@field background_texture texture
|
||||
|
||||
---create a button which opens a color picker when clicked
|
||||
---@param parent table
|
||||
---@param name string|nil
|
||||
@@ -1077,33 +1109,38 @@ end
|
||||
end
|
||||
|
||||
function detailsFramework:NewColorPickButton(parent, name, member, callback, alpha, buttonTemplate)
|
||||
--button
|
||||
local colorPickButton = detailsFramework:NewButton(parent, _, name, member, 16, 16, pickcolor, alpha, "param2", nil, nil, nil, buttonTemplate)
|
||||
local colorPickButton = detailsFramework:NewButton(parent, _, name, member, 16, 16, pickcolor, alpha, "param2")
|
||||
---@cast colorPickButton df_colorpickbutton
|
||||
|
||||
colorPickButton.color_callback = callback
|
||||
colorPickButton.Cancel = colorpickCancel
|
||||
colorPickButton.SetColor = setColorPickColor
|
||||
colorPickButton.GetColor = getColorPickColor
|
||||
colorPickButton.__iscolorpicker = true
|
||||
|
||||
colorPickButton.HookList.OnColorChanged = {}
|
||||
|
||||
if (not buttonTemplate) then
|
||||
colorPickButton:SetTemplate(detailsFramework:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE"))
|
||||
end
|
||||
|
||||
--background showing a grid to indicate the transparency
|
||||
local background = colorPickButton:CreateTexture(nil, "background", nil, 2)
|
||||
local background = colorPickButton:CreateTexture("$parentBackgroupTransparency", "background", nil, 2)
|
||||
background:SetPoint("topleft", colorPickButton.widget, "topleft", 0, 0)
|
||||
background:SetPoint("bottomright", colorPickButton.widget, "bottomright", 0, 0)
|
||||
background:SetTexture([[Interface\ITEMSOCKETINGFRAME\UI-EMPTYSOCKET]])
|
||||
background:SetTexCoord(3/16, 13/16, 3/16, 13/16)
|
||||
background:SetAtlas("AnimCreate_Icon_Texture")
|
||||
background:SetAlpha(0.3)
|
||||
colorPickButton.background_texture = background
|
||||
|
||||
--texture which shows the texture color
|
||||
local colorTexture = detailsFramework:NewImage(colorPickButton, nil, 16, 16, nil, nil, "color_texture", "$parentTex")
|
||||
local colorTexture = colorPickButton:CreateTexture("$parentTex", "overlay")
|
||||
colorTexture:SetColorTexture(1, 1, 1)
|
||||
colorTexture:SetPoint("topleft", colorPickButton.widget, "topleft", 0, 0)
|
||||
colorTexture:SetPoint("bottomright", colorPickButton.widget, "bottomright", 0, 0)
|
||||
colorTexture:SetDrawLayer("background", 3)
|
||||
colorPickButton.color_texture = colorTexture
|
||||
|
||||
if (not buttonTemplate) then
|
||||
colorPickButton:SetTemplate(detailsFramework:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE"))
|
||||
else
|
||||
colorPickButton:SetTemplate(buttonTemplate)
|
||||
end
|
||||
|
||||
return colorPickButton
|
||||
end
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
---@field GroupIterator fun(self:table, callback:function, ...) iterate over the group, calling the callback function for each group member
|
||||
---@field CommaValue fun(self:table, value:number) : string convert a number to a string with commas, e.g. 1000000 -> 1,000,000
|
||||
---@field SplitTextInLines fun(self:table, text:string) : string[] split a text into lines
|
||||
---@field UnitGroupRolesAssigned fun(unitId: unit, bUseSupport:boolean, specId: specializationid) : string there's no self here
|
||||
---@field UnitGroupRolesAssigned fun(unitId: unit, bUseSupport:boolean?, specId: specializationid?) : string there's no self here
|
||||
---@field SetAnchor fun(self:table, widget:uiobject, anchorTable:df_anchor, anchorTo:uiobject?) only adjust the anchors of a widget, does not save values
|
||||
---@field AddTextureToText fun(text:string, textureInfo:table, bAddSpace:boolean?, bAddAfterText:boolean) : string textureInfo is a table with .texture .width .height .coords{left, right, top, bottom}
|
||||
---@field CreateTextureInfo fun(texture:atlasname|texturepath|textureid, width:number?, height:number?, left:number?, right:number?, top:number?, bottom:number?, imageWidthnumber?, imageHeightnumber?) : table
|
||||
@@ -112,6 +112,8 @@
|
||||
---@field CreateDropDown fun(self:table, parent:frame, func:function, default:any, width:number?, height:number?, member:string?, name:string?, template:table?) : df_dropdown
|
||||
---@field CreateFontDropDown fun(self:table, parent:frame, func:function, default:any, width:number?, height:number?, member:string?, name:string?, template:table?) : df_dropdown
|
||||
---@field CreateColorDropDown fun(self:table, parent:frame, func:function, default:any, width:number?, height:number?, member:string?, name:string?, template:table?) : df_dropdown
|
||||
---@field CreateOutlineDropDown fun(self:table, parent:frame, func:function, default:any, width:number?, height:number?, member:string?, name:string?, template:table?) : df_dropdown
|
||||
---@field CreateAnchorPointDropDown fun(self:table, parent:frame, func:function, default:any, width:number?, height:number?, member:string?, name:string?, template:table?) : df_dropdown
|
||||
---@field CreateFontListGenerator fun(self:table, callback:function) : function return a function which when called returns a table filled with all fonts available and ready to be used on dropdowns
|
||||
---@field CreateTextEntry fun(self:table, parent:frame, textChangedCallback:function, width:number, height:number, member:string?, name:string?, labelText:string?, textentryTemplate:table?, labelTemplate:table?) : df_textentry
|
||||
---@field ReskinSlider fun(self:table, slider:frame)
|
||||
@@ -146,5 +148,9 @@
|
||||
---@field CreateEditor fun(self:table, parent:frame, name:string?, options:df_editor_defaultoptions?) : df_editor
|
||||
---@field RandomBool fun(self:table, odds: number?) : boolean return a random boolean
|
||||
---@field CreateHighlightTexture fun(self:table, parent:frame, parentKey:string?, alpha:number?, name:string?) : texture
|
||||
---@field CreateIconRowGeneric fun(self:table, parent:frame, name:string?, options:table?)
|
||||
---@field CreateColorPickButton fun(self:table, parent:frame, name:string?, member:string?, callback:function, alpha:number?, buttonTemplate:table?) : df_button
|
||||
---@field CreateSlider fun(self:table, parent:frame, width:number?, height:number?, minValue:number?, maxValue:number?, step:number?, defaultv:number?, isDecemal:boolean?, member:string?, name:string?, label:string?, sliderTemplate:string|table?, labelTemplate:string|table?) : df_slider, df_label?
|
||||
---@field
|
||||
---@field
|
||||
---@field
|
||||
|
||||
|
||||
+32
-11
@@ -303,7 +303,7 @@ function DropDownMetaFunctions:GetFrameForOption(optionsTable, value) --not test
|
||||
end
|
||||
|
||||
function DropDownMetaFunctions:Refresh()
|
||||
local optionsTable = DF:Dispatch(self.func, self)
|
||||
local state, optionsTable = xpcall(self.func, geterrorhandler(), self)
|
||||
|
||||
if (#optionsTable == 0) then
|
||||
self:NoOption(true)
|
||||
@@ -558,9 +558,11 @@ function DropDownMetaFunctions:Selected(thisOption)
|
||||
self.statusbar:SetTexture(thisOption.statusbar)
|
||||
if (thisOption.statusbarcolor) then
|
||||
self.statusbar:SetVertexColor(unpack(thisOption.statusbarcolor))
|
||||
else
|
||||
self.statusbar:SetVertexColor(1, 1, 1, 1)
|
||||
end
|
||||
else
|
||||
self.statusbar:SetTexture([[Interface\Tooltips\CHATBUBBLE-BACKGROUND]])
|
||||
self.statusbar:SetVertexColor(0, 0, 0, 0)
|
||||
end
|
||||
|
||||
if (self.widget.__rcorners) then
|
||||
@@ -774,9 +776,11 @@ function DetailsFrameworkDropDownOnMouseDown(button, buttontype)
|
||||
thisOptionFrame.statusbar:SetTexture(thisOption.statusbar)
|
||||
if (thisOption.statusbarcolor) then
|
||||
thisOptionFrame.statusbar:SetVertexColor(unpack(thisOption.statusbarcolor))
|
||||
else
|
||||
thisOptionFrame.statusbar:SetVertexColor(1, 1, 1, 1)
|
||||
end
|
||||
else
|
||||
thisOptionFrame.statusbar:SetTexture([[Interface\Tooltips\CHATBUBBLE-BACKGROUND]])
|
||||
thisOptionFrame.statusbar:SetVertexColor(0, 0, 0, 0)
|
||||
end
|
||||
|
||||
--an extra button in the right side of the row
|
||||
@@ -824,7 +828,7 @@ function DetailsFrameworkDropDownOnMouseDown(button, buttontype)
|
||||
end
|
||||
|
||||
selectedTexture:Show()
|
||||
selectedTexture:SetVertexColor(1, 1, 1, .3)
|
||||
selectedTexture:SetVertexColor(1, 1, 0, .5)
|
||||
selectedTexture:SetTexCoord(0, 29/32, 5/32, 27/32)
|
||||
|
||||
currentIndex = tindex
|
||||
@@ -1009,13 +1013,21 @@ end
|
||||
--template
|
||||
|
||||
function DropDownMetaFunctions:SetTemplate(template)
|
||||
if (type(template) == "string") then
|
||||
local templateName = template
|
||||
template = DF:GetTemplate("dropdown", templateName)
|
||||
if (not template) then
|
||||
print("no template found", templateName)
|
||||
end
|
||||
end
|
||||
|
||||
self.template = template
|
||||
|
||||
if (template.width) then
|
||||
PixelUtil.SetWidth(self.dropdown, template.width)
|
||||
end
|
||||
if (template.height) then
|
||||
PixelUtil.SetWidth(self.dropdown, template.height)
|
||||
PixelUtil.SetHeight(self.dropdown, template.height)
|
||||
end
|
||||
|
||||
if (template.backdrop) then
|
||||
@@ -1090,13 +1102,19 @@ end
|
||||
--object constructor
|
||||
|
||||
---@class df_dropdown : table, frame
|
||||
---@field SetTemplate fun(self:df_dropdown, template:table)
|
||||
---@field SetTemplate fun(self:df_dropdown, template:table|string)
|
||||
---@field BuildDropDownFontList fun(self:df_dropdown, onClick:function, icon:any, iconTexcoord:table?, iconSize:table?):table make a dropdown list with all fonts available, on select a font, call the function onClick
|
||||
---@field
|
||||
---@field
|
||||
---@field
|
||||
---@field
|
||||
---@field
|
||||
---@field SetFunction fun(self:df_dropdown, func:function)
|
||||
---@field SetEmptyTextAndIcon fun(self:df_dropdown, text:string, icon:any)
|
||||
---@field Select fun(self:df_dropdown, optionName:string|number, byOptionNumber:boolean?, bOnlyShown:boolean?, runCallback:boolean?):boolean
|
||||
---@field Open fun(self:df_dropdown)
|
||||
---@field Close fun(self:df_dropdown)
|
||||
---@field Refresh fun(self:df_dropdown)
|
||||
---@field GetFunction fun(self:df_dropdown):function
|
||||
---@field GetMenuSize fun(self:df_dropdown):number, number
|
||||
---@field SetMenuSize fun(self:df_dropdown, width:number, height:number)
|
||||
---@field Disable fun(self:df_dropdown)
|
||||
---@field Enable fun(self:df_dropdown)
|
||||
|
||||
---return a function which when called returns a table filled with all fonts available and ready to be used on dropdowns
|
||||
---@param callback function
|
||||
@@ -1259,6 +1277,9 @@ function DF:NewDropDown(parent, container, name, member, width, height, func, de
|
||||
default = 1
|
||||
end
|
||||
|
||||
width = width or 160
|
||||
height = height or 20
|
||||
|
||||
dropDownObject.dropdown = DF:CreateNewDropdownFrame(parent, name)
|
||||
PixelUtil.SetSize(dropDownObject.dropdown, width, height)
|
||||
|
||||
|
||||
+50
-18
@@ -1,6 +1,6 @@
|
||||
|
||||
|
||||
local dversion = 510
|
||||
local dversion = 511
|
||||
local major, minor = "DetailsFramework-1.0", dversion
|
||||
local DF, oldminor = LibStub:NewLibrary(major, minor)
|
||||
|
||||
@@ -2522,6 +2522,28 @@ DF.dropdown_templates["OPTIONS_DROPDOWNDARK_TEMPLATE"] = {
|
||||
dropiconpoints = {-2, -3},
|
||||
}
|
||||
|
||||
DF.dropdown_templates["OLD_DROPDOWN_TEMPLATE"] = {
|
||||
height = 24,
|
||||
|
||||
backdrop = {
|
||||
edgeFile = "Interface\\Buttons\\UI-SliderBar-Border",
|
||||
edgeSize = 8,
|
||||
bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
|
||||
tileSize = 64,
|
||||
tile = true,
|
||||
insets = {left = 4, right = 4, top = 4, bottom = 4}
|
||||
},
|
||||
|
||||
backdropcolor = {0.1215, 0.1176, 0.1294, 0.4000},
|
||||
backdropbordercolor = {1, 1, 1, 1},
|
||||
onentercolor = {.5, .5, .5, .9},
|
||||
onenterbordercolor = {1, 1, 1, 1},
|
||||
|
||||
dropicon = "Interface\\BUTTONS\\arrow-Down-Down",
|
||||
dropiconsize = {16, 16},
|
||||
dropiconpoints = {-2, -3},
|
||||
}
|
||||
|
||||
--switches
|
||||
DF.switch_templates = DF.switch_templates or {}
|
||||
DF.switch_templates["OPTIONS_CHECKBOX_TEMPLATE"] = {
|
||||
@@ -2534,6 +2556,23 @@ DF.switch_templates["OPTIONS_CHECKBOX_TEMPLATE"] = {
|
||||
disabled_backdropcolor = {1, 1, 1, .2},
|
||||
onenterbordercolor = {1, 1, 1, 1},
|
||||
}
|
||||
|
||||
DF.switch_templates["OPTIONS_CIRCLECHECKBOX_TEMPLATE"] = {
|
||||
width = 18,
|
||||
height = 18,
|
||||
is_checkbox = true, --will call SetAsCheckBox()
|
||||
checked_texture = [[Interface\CHARACTERFRAME\TempPortraitAlphaMaskSmall]],
|
||||
checked_size_percent = 0.7,
|
||||
checked_xoffset = 0,
|
||||
checked_yoffset = 0,
|
||||
checked_color = "dark3",
|
||||
rounded_corner = {
|
||||
color = {.075, .075, .075, 1},
|
||||
border_color = {.2, .2, .2, 1},
|
||||
roundness = 8,
|
||||
},
|
||||
}
|
||||
|
||||
DF.switch_templates["OPTIONS_CHECKBOX_BRIGHT_TEMPLATE"] = {
|
||||
backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
|
||||
backdropcolor = {1, 1, 1, .5},
|
||||
@@ -2553,6 +2592,14 @@ DF.button_templates["OPTIONS_BUTTON_TEMPLATE"] = {
|
||||
backdropbordercolor = {0, 0, 0, 1},
|
||||
}
|
||||
|
||||
DF.button_templates["OPTIONS_CIRCLEBUTTON_TEMPLATE"] = {
|
||||
rounded_corner = {
|
||||
color = {.075, .075, .075, 1},
|
||||
border_color = {.2, .2, .2, 1},
|
||||
roundness = 8,
|
||||
},
|
||||
}
|
||||
|
||||
DF.button_templates["OPTIONS_BUTTON_GOLDENBORDER_TEMPLATE"] = {
|
||||
backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
|
||||
backdropcolor = {1, 1, 1, .5},
|
||||
@@ -3905,7 +3952,7 @@ function DF:GetClassSpecIds(engClass) --naming conventions
|
||||
end
|
||||
|
||||
local dispatch_error = function(context, errortext)
|
||||
DF:Msg( (context or "<no context>") .. " |cFFFF9900error|r: " .. (errortext or "<no error given>"))
|
||||
error((context or "") .. (errortext or ""))
|
||||
end
|
||||
|
||||
--call a function with payload, if the callback doesn't exists, quit silently
|
||||
@@ -3930,23 +3977,8 @@ end
|
||||
---@param ... any
|
||||
---@return any
|
||||
function DF:Dispatch(func, ...)
|
||||
if (type(func) ~= "function") then
|
||||
return dispatch_error(_, "DetailsFramework:Dispatch(func) expect a function as parameter 1.")
|
||||
end
|
||||
assert(type(func) == "function", "DetailsFramework:Dispatch(func) expect a function as parameter 1. Received: " .. type(func) .. " instead.")
|
||||
return select(2, xpcall(func, geterrorhandler(), ...))
|
||||
|
||||
--[=[
|
||||
local dispatchResult = {xpcall(func, geterrorhandler(), ...)}
|
||||
local okay = dispatchResult[1]
|
||||
|
||||
if (not okay) then
|
||||
return false
|
||||
end
|
||||
|
||||
tremove(dispatchResult, 1)
|
||||
|
||||
return unpack(dispatchResult)
|
||||
--]=]
|
||||
end
|
||||
|
||||
--[=[
|
||||
|
||||
+359
-142
@@ -14,14 +14,94 @@ end
|
||||
---@field options table
|
||||
---@field NextIcon number
|
||||
---@field IconPool table<number, df_icongeneric> table which store the icons created for this iconrow
|
||||
---@field SetAuraWithIconTemplate fun(self:df_icongeneric, aI:aurainfo, iconTemplateTable:table)
|
||||
---@field ClearIcons fun(self:df_icongeneric, resetBuffs:boolean?, resetDebuffs:boolean?)
|
||||
---@field AlignAuraIcons fun(self:df_icongeneric)
|
||||
|
||||
---@class df_iconrow_generic_options : table
|
||||
---@field icon_width number? @The width of the icon.
|
||||
---@field icon_height number? @The height of the icon.
|
||||
---@field texcoord table? @The texture coordinates of the icon.
|
||||
---@field show_text boolean? @Whether to show text on the icon.
|
||||
---@field text_color table? @The color of the text.
|
||||
---@field text_size number? @The size of the text.
|
||||
---@field text_font string? @The font of the text.
|
||||
---@field text_outline string? @The outline style of the text.
|
||||
---@field text_anchor df_anchor? @The anchor point of the text.
|
||||
---@field text_alpha_by_percent boolean? @Whether to change the alpha of the text by the percentage of the cooldown.
|
||||
---@field desc_text boolean? @Whether to show description text.
|
||||
---@field desc_text_color table? @The color of the description text.
|
||||
---@field desc_text_size number? @The size of the description text.
|
||||
---@field desc_text_font string? @The font of the description text.
|
||||
---@field desc_text_outline string? @The outline style of the description text.
|
||||
---@field desc_text_anchor string? @The anchor point of the description text.
|
||||
---@field desc_text_rel_anchor string? @The relative anchor point of the description text.
|
||||
---@field desc_text_x_offset number? @The x offset of the description text.
|
||||
---@field desc_text_y_offset number? @The y offset of the description text.
|
||||
---@field stack_text boolean? @Whether to show stack text.
|
||||
---@field stack_text_color table? @The color of the stack text.
|
||||
---@field stack_text_size number? @The size of the stack text.
|
||||
---@field stack_text_font string? @The font of the stack text.
|
||||
---@field stack_text_outline string? @The outline style of the stack text.
|
||||
---@field stack_text_anchor string? @The anchor point of the stack text.
|
||||
---@field stack_text_rel_anchor string? @The relative anchor point of the stack text.
|
||||
---@field stack_text_x_offset number? @The x offset of the stack text.
|
||||
---@field stack_text_y_offset number? @The y offset of the stack text.
|
||||
---@field left_padding number? @The distance between the right and left sides.
|
||||
---@field top_padding number? @The distance between the top and bottom sides.
|
||||
---@field icon_padding number? @The distance between each icon.
|
||||
---@field backdrop table? @The backdrop options.
|
||||
---@field backdrop_color table? @The color of the backdrop.
|
||||
---@field backdrop_border_color table? @The color of the backdrop border.
|
||||
---@field anchor table? @The anchor options.
|
||||
---@field grow_direction number? @The direction in which the icons grow.
|
||||
---@field center_alignment boolean? @Whether to align the icons in the center.
|
||||
---@field surpress_blizzard_cd_timer boolean? @Whether to suppress the Blizzard cooldown timer.
|
||||
---@field surpress_tulla_omni_cc boolean? @Whether to suppress the Tulla OmniCC cooldown count.
|
||||
---@field on_tick_cooldown_update boolean? @Whether to update cooldowns on every tick.
|
||||
---@field cooldown_max_brightness number? @The maximum brightness of the cooldown, it is adjusted by the percent.
|
||||
---@field decimal_timer boolean? @Whether to display the timer in decimal format.
|
||||
---@field show_cooldown boolean? @Whether to show blizzard cooldown animation.
|
||||
---@field cooldown_reverse boolean? @Whether to reverse the cooldown animation.
|
||||
---@field cooldown_swipe_enabled boolean? @Whether to enable the cooldown swipe animation.
|
||||
---@field cooldown_edge_texture string? @The texture for the cooldown edge.
|
||||
---@field show_horizontal_swipe boolean? @Whether to show the horizontal swipe animation.
|
||||
---@field swipe_alpha number? @The alpha value for the swipe animation.
|
||||
---@field swipe_brightness number? @The brightness value for the swipe animation.
|
||||
---@field swipe_progressive_color boolean? @Whether to use progressive color for the swipe animation. Start on Green and goes to Red, follows percent amount.
|
||||
---@field swipe_color table? @When the color isn't progressive, this is the color of the swipe
|
||||
---@field swipe_color_start number[]? @Whether to use yellow color for the swipe animation.
|
||||
---@field swipe_color_end number[]? @Whether to use red color for the swipe animation.
|
||||
---@field remove_on_finish boolean? @Whether to remove the icon when the cooldown finishes. Only usable if the icon has a identifier (from setting specific).
|
||||
---@field first_icon_use_anchor boolean? @The anchor point for the first ico will use the anchor set in options.anchor.
|
||||
|
||||
---@class df_iconrow_generic : df_iconrow
|
||||
---@field SetCooldown fun(self:df_iconrow_generic, iconFrame:df_icongeneric)
|
||||
---@field OnIconTick fun(iconFrame:df_icongeneric)
|
||||
---@field FormatCooldownTime fun(thisTime:number)
|
||||
---@field FormatCooldownTimeDecimal fun(formattedTime:number)
|
||||
---@field GetIconGrowDirection fun(self:df_iconrow_generic):number
|
||||
---@field OnOptionChanged fun(self:df_iconrow_generic, optionName:string)
|
||||
---@field CreateIcon fun(self:df_iconrow_generic, iconName:string)
|
||||
---@field GetIcon fun(self:df_iconrow_generic)
|
||||
---@field SetStacks fun(self:df_iconrow_generic, iconFrame:df_icongeneric, bIsShown:boolean, stacksAmount:number?)
|
||||
---@field AddSpecificIcon fun(self:df_iconrow_generic, identifierKey:any, spellId:number, borderColor:table, startTime:number, duration:number, forceTexture:string, descText:string, count:number, debuffType:string, caster:string, canStealOrPurge:boolean, spellName:string, isBuff:boolean, modRate:number, iconSettings:table)
|
||||
---@field AddSpecificIconWithTemplate fun(self:df_iconrow_generic, iconTemplateTable:table)
|
||||
---@field IsIconShown fun(self:df_iconrow_generic, identifierKey:any)
|
||||
---@field SetIcon fun(self:df_iconrow_generic, spellId:number, borderColor:table, startTime:number, duration:number, iconTexture:string, descText:string, count:number, debuffType:string, caster:string, canStealOrPurge:boolean, spellName:string, isBuff:boolean, modRate:number, iconSettings:table, expirationTime:number?)
|
||||
---@field RemoveSpecificIcon fun(self:df_iconrow_generic, identifierKey:any)
|
||||
---@field ClearIcons fun(self:df_iconrow_generic, resetBuffs:boolean?, resetDebuffs:boolean?)
|
||||
---@field AlignAuraIcons fun(self:df_iconrow_generic)
|
||||
---@field SetAuraWithIconTemplate fun(self:df_iconrow_generic, auraInfo:aurainfo, iconTemplateTable:table)
|
||||
---@field IconPool table<number, df_icongeneric>
|
||||
---@field NextIcon number
|
||||
---@field AuraCache table<any, boolean>
|
||||
---@field shownAmount number
|
||||
---@field options table
|
||||
---@field SetSpecificAuraWithIconTemplate fun(self:df_iconrow_generic, identifierKey:any, auraInfo:aurainfo, iconTemplateTable:table)
|
||||
|
||||
local unpack = unpack
|
||||
local CreateFrame = CreateFrame
|
||||
local PixelUtil = PixelUtil
|
||||
local GetTime = GetTime
|
||||
local Clamp = detailsFramework.Math.Clamp
|
||||
|
||||
local spellIconCache = {}
|
||||
local spellNameCache = {}
|
||||
@@ -38,9 +118,16 @@ local iconFrameOnHideScript = function(self)
|
||||
end
|
||||
end
|
||||
|
||||
local checkPointCallback = function(iconFrame)
|
||||
if (iconFrame.timeRemaining < 3) then
|
||||
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
detailsFramework.IconGenericMixin = {
|
||||
---create a new icon frame
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
---@param iconName string the name of the icon frame
|
||||
---@return df_icongeneric
|
||||
CreateIcon = function(self, iconName)
|
||||
@@ -55,9 +142,8 @@ detailsFramework.IconGenericMixin = {
|
||||
---@type texture
|
||||
newIcon.CooldownBrightnessTexture = newIcon:CreateTexture(nil, "artwork", nil, 2)
|
||||
newIcon.CooldownBrightnessTexture:SetBlendMode("ADD")
|
||||
newIcon.CooldownBrightnessTexture:SetAlpha(1)
|
||||
PixelUtil.SetPoint(newIcon.CooldownBrightnessTexture, "topleft", newIcon, "topleft", 0, 0)
|
||||
PixelUtil.SetPoint(newIcon.CooldownBrightnessTexture, "bottomright", newIcon, "bottomright", 0, 0)
|
||||
PixelUtil.SetPoint(newIcon.CooldownBrightnessTexture, "topleft", newIcon.Texture, "topleft", 0, 0)
|
||||
PixelUtil.SetPoint(newIcon.CooldownBrightnessTexture, "bottomright", newIcon.Texture, "bottomright", 0, 0)
|
||||
|
||||
---@type texture
|
||||
newIcon.Border = newIcon:CreateTexture(nil, "background")
|
||||
@@ -80,10 +166,10 @@ detailsFramework.IconGenericMixin = {
|
||||
|
||||
--create a overlay texture which will indicate the cooldown time
|
||||
newIcon.CooldownTexture = newIcon:CreateTexture(self:GetName() .. "CooldownTexture", "overlay", nil, 6)
|
||||
newIcon.CooldownTexture:SetColorTexture(1, 1, 1, 1)
|
||||
newIcon.CooldownTexture:SetTexture("Interface\\BUTTONS\\GreyscaleRamp64", "CLAMP", "CLAMP", "TRILINEAR")
|
||||
newIcon.CooldownTexture:SetHeight(2)
|
||||
newIcon.CooldownTexture:SetPoint("bottomleft", newIcon.Texture, "bottomleft", 0, 0)
|
||||
newIcon.CooldownTexture:SetPoint("bottomright", newIcon.Texture, "bottomright", 0, 0)
|
||||
newIcon.CooldownTexture:SetHeight(1)
|
||||
newIcon.CooldownTexture:Hide()
|
||||
|
||||
newIcon.CooldownEdge = newIcon:CreateTexture(self:GetName() .. "CooldownEdge", "overlay", nil, 7)
|
||||
@@ -95,11 +181,18 @@ detailsFramework.IconGenericMixin = {
|
||||
newIcon.stacks = 0
|
||||
newIcon:SetScript("OnHide", iconFrameOnHideScript)
|
||||
|
||||
local cooldownFrame = CreateFrame("cooldown", "$parentCooldownFrame", newIcon, "CooldownFrameTemplate, BackdropTemplate")
|
||||
cooldownFrame:SetAllPoints()
|
||||
cooldownFrame:EnableMouse(false)
|
||||
cooldownFrame:SetFrameLevel(newIcon:GetFrameLevel()+1)
|
||||
cooldownFrame.CountdownText = ({cooldownFrame:GetRegions()})[1]
|
||||
newIcon.Cooldown = cooldownFrame
|
||||
|
||||
return newIcon
|
||||
end,
|
||||
|
||||
---get an icon frame from the pool
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
---@return df_icongeneric
|
||||
GetIcon = function(self)
|
||||
---@type df_icongeneric
|
||||
@@ -152,7 +245,7 @@ detailsFramework.IconGenericMixin = {
|
||||
end,
|
||||
|
||||
---adds only if not existing already in the cache
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
AddSpecificIcon = function(self, identifierKey, spellId, borderColor, startTime, duration, forceTexture, descText, count, debuffType, caster, canStealOrPurge, spellName, isBuff, modRate, iconSettings)
|
||||
if (not identifierKey or identifierKey == "") then
|
||||
return
|
||||
@@ -179,18 +272,32 @@ detailsFramework.IconGenericMixin = {
|
||||
end
|
||||
end,
|
||||
|
||||
---set an icon frame with a template
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param aI aurainfo
|
||||
---@param iconTemplateTable df_icontemplate
|
||||
SetAuraWithIconTemplate = function(self, aI, iconTemplateTable)
|
||||
local startTime = aI.expirationTime - aI.duration
|
||||
---@type df_icongeneric
|
||||
self:SetIcon(aI.spellId, nil, startTime, aI.duration, aI.icon, nil, aI.applications, aI.dispelName, aI.sourceUnit, aI.isStealable, aI.name, aI.isHelpful, aI.timeMod, iconTemplateTable, aI.expirationTime)
|
||||
SetSpecificAuraWithIconTemplate = function(self, identifierKey, auraInfo, iconTemplateTable)
|
||||
if (not identifierKey or identifierKey == "") then
|
||||
return
|
||||
end
|
||||
|
||||
if (not self.AuraCache[identifierKey]) then
|
||||
---@type df_icongeneric
|
||||
local iconFrame = self:SetAuraWithIconTemplate(auraInfo, iconTemplateTable)
|
||||
iconFrame.identifierKey = identifierKey
|
||||
self.AuraCache[identifierKey] = true
|
||||
end
|
||||
end,
|
||||
|
||||
---set an icon frame with a template
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
---@param auraInfo aurainfo
|
||||
---@param iconTemplateTable df_icontemplate
|
||||
SetAuraWithIconTemplate = function(self, auraInfo, iconTemplateTable)
|
||||
local startTime = auraInfo.expirationTime - auraInfo.duration
|
||||
|
||||
---@type df_icongeneric
|
||||
return self:SetIcon(auraInfo.spellId, nil, startTime, auraInfo.duration, auraInfo.icon, nil, auraInfo.applications, auraInfo.dispelName, auraInfo.sourceUnit, auraInfo.isStealable, auraInfo.name, auraInfo.isHelpful, auraInfo.timeMod, iconTemplateTable, auraInfo.expirationTime)
|
||||
end,
|
||||
|
||||
---set an icon frame with a template
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
---@return df_icongeneric?
|
||||
SetIcon = function(self, spellId, borderColor, startTime, duration, iconTexture, descText, count, debuffType, caster, canStealOrPurge, spellName, isBuff, modRate, iconSettings, expirationTime)
|
||||
local actualSpellName, spellIcon = spellNameCache[spellId], spellIconCache[spellId]
|
||||
@@ -213,6 +320,10 @@ detailsFramework.IconGenericMixin = {
|
||||
end
|
||||
end
|
||||
|
||||
if (iconSettings.overrideTexture) then
|
||||
spellIcon = iconSettings.overrideTexture
|
||||
end
|
||||
|
||||
if (spellIcon) then
|
||||
spellName = spellName or actualSpellName or "unknown_aura"
|
||||
modRate = modRate or 1
|
||||
@@ -223,8 +334,29 @@ detailsFramework.IconGenericMixin = {
|
||||
|
||||
iconFrame.expirationTime = expirationTime
|
||||
|
||||
local widthFromTexture
|
||||
local heightFromTexture
|
||||
local width = iconSettings.width or self.options.icon_width
|
||||
local height = iconSettings.height or self.options.icon_height or width
|
||||
|
||||
--adjust the width and height by scale
|
||||
local scale = iconSettings.scale or 1
|
||||
width = width * scale
|
||||
height = height * scale
|
||||
|
||||
PixelUtil.SetSize(iconFrame, width, height)
|
||||
|
||||
--set the texture points to be all points minus one
|
||||
iconFrame.Texture:ClearAllPoints()
|
||||
PixelUtil.SetPoint(iconFrame.Texture, "topleft", iconFrame, "topleft", 1, -1)
|
||||
PixelUtil.SetPoint(iconFrame.Texture, "bottomright", iconFrame, "bottomright", -1, 1)
|
||||
|
||||
iconFrame.textureWidth = math.max(iconFrame.Texture:GetWidth(), width)
|
||||
iconFrame.textureHeight = math.max(iconFrame.Texture:GetHeight(), height) --for some reason, GetHeight() was returning 0 on the first call
|
||||
|
||||
--cache size
|
||||
iconFrame.width = width
|
||||
iconFrame.height = height
|
||||
|
||||
iconFrame:Show()
|
||||
|
||||
if (iconFrame.Texture.texture ~= spellIcon or (iconSettings.coords and iconSettings.coords ~= iconFrame.currentCoords)) then
|
||||
iconFrame.Texture:SetTexture(spellIcon, "CLAMP", "CLAMP", iconSettings.textureFilter or "LINEAR") --"TRILINEAR"
|
||||
@@ -240,38 +372,13 @@ detailsFramework.IconGenericMixin = {
|
||||
iconFrame.Texture:SetTexCoord(0, 1, 0, 1)
|
||||
end
|
||||
|
||||
iconFrame.Texture:ClearAllPoints()
|
||||
|
||||
if (iconSettings.points) then
|
||||
iconFrame.Texture:ClearAllPoints()
|
||||
for i = 1, #iconSettings.points do
|
||||
local point = iconSettings.points[i]
|
||||
iconFrame.Texture:SetPoint(point[1], iconFrame, point[2], point[3], point[4])
|
||||
end
|
||||
|
||||
if (iconSettings.width) then
|
||||
iconFrame.Texture:SetWidth(iconSettings.width)
|
||||
widthFromTexture = iconSettings.width
|
||||
else
|
||||
iconFrame.Texture:SetWidth(self.options.icon_width)
|
||||
end
|
||||
|
||||
if (iconSettings.height or iconSettings.width) then
|
||||
iconFrame.Texture:SetHeight(iconSettings.height or iconSettings.width)
|
||||
heightFromTexture = iconSettings.height or iconSettings.width
|
||||
else
|
||||
iconFrame.Texture:SetHeight(self.options.icon_height)
|
||||
end
|
||||
else
|
||||
if (iconSettings.width) then
|
||||
iconFrame.Texture:SetWidth(iconSettings.width)
|
||||
iconFrame.Texture:SetHeight(iconSettings.height or iconSettings.width)
|
||||
widthFromTexture = iconSettings.width
|
||||
heightFromTexture = iconSettings.height or iconSettings.width
|
||||
PixelUtil.SetPoint(iconFrame.Texture, "center", iconFrame, "center", 0, 0)
|
||||
else
|
||||
PixelUtil.SetPoint(iconFrame.Texture, "topleft", iconFrame, "topleft", 1, -1)
|
||||
PixelUtil.SetPoint(iconFrame.Texture, "bottomright", iconFrame, "bottomright", -1, 1)
|
||||
end
|
||||
iconFrame.Texture:SetSize(width, height)
|
||||
end
|
||||
|
||||
iconFrame.Texture.texture = spellIcon
|
||||
@@ -285,6 +392,17 @@ detailsFramework.IconGenericMixin = {
|
||||
end
|
||||
end
|
||||
|
||||
iconFrame:SetIgnoreParentAlpha(false)
|
||||
|
||||
if (iconSettings.color) then
|
||||
local r, g, b, a = detailsFramework:ParseColors(iconSettings.color)
|
||||
iconFrame.Texture:SetVertexColor(r, g, b, a)
|
||||
--ignore the param alpha has the settings might have an alpha for it
|
||||
iconFrame:SetIgnoreParentAlpha(true)
|
||||
else
|
||||
iconFrame.Texture:SetVertexColor(1, 1, 1, 1)
|
||||
end
|
||||
|
||||
if (borderColor) then
|
||||
iconFrame.Border:Show()
|
||||
iconFrame.Border:SetVertexColor(unpack(borderColor))
|
||||
@@ -306,44 +424,33 @@ detailsFramework.IconGenericMixin = {
|
||||
|
||||
iconFrame.stacks = count or 0
|
||||
|
||||
if (iconSettings.scale) then
|
||||
iconFrame.Texture:SetScale(iconSettings.scale)
|
||||
if (widthFromTexture) then
|
||||
widthFromTexture = widthFromTexture * iconSettings.scale
|
||||
end
|
||||
if (heightFromTexture) then
|
||||
heightFromTexture = heightFromTexture * iconSettings.scale
|
||||
end
|
||||
else
|
||||
iconFrame.Texture:SetScale(1)
|
||||
end
|
||||
|
||||
if (iconSettings.alpha) then
|
||||
iconFrame.Texture:SetAlpha(iconSettings.alpha)
|
||||
else
|
||||
iconFrame.Texture:SetAlpha(1)
|
||||
end
|
||||
|
||||
iconFrame:Show()
|
||||
iconFrame.textureWidth = iconFrame.Texture:GetWidth()
|
||||
iconFrame.textureHeight = iconFrame.Texture:GetHeight()
|
||||
PixelUtil.SetSize(iconFrame, iconFrame.textureWidth, iconFrame.textureHeight)
|
||||
|
||||
--cache size
|
||||
iconFrame.width = iconFrame.textureWidth
|
||||
iconFrame.height = iconFrame.textureHeight
|
||||
|
||||
--iconFrame.Texture:SetBlendMode("ADD")
|
||||
iconFrame.CooldownBrightnessTexture:SetTexture(iconFrame.Texture:GetTexture())
|
||||
do
|
||||
local left, top, c, bottom, right = iconFrame.Texture:GetTexCoord()
|
||||
iconFrame.CooldownBrightnessTexture:SetTexCoord(left, right, top, bottom)
|
||||
iconFrame.CooldownBrightnessTexture.cords = {left, right, top, bottom}
|
||||
|
||||
local coords = iconFrame.CooldownBrightnessTexture.cords
|
||||
if (coords) then
|
||||
coords[1] = left
|
||||
coords[2] = right
|
||||
coords[3] = top
|
||||
coords[4] = bottom
|
||||
else
|
||||
iconFrame.CooldownBrightnessTexture.cords = {left, right, top, bottom}
|
||||
end
|
||||
|
||||
iconFrame.CooldownBrightnessTexture.top = top
|
||||
iconFrame.CooldownBrightnessTexture.bottom = bottom
|
||||
end
|
||||
|
||||
PixelUtil.SetPoint(iconFrame.CooldownBrightnessTexture, "bottomright", iconFrame, "bottomright", -1, 1)
|
||||
PixelUtil.SetPoint(iconFrame.CooldownBrightnessTexture, "bottomright", iconFrame.Texture, "bottomright", 0, 0)
|
||||
end
|
||||
|
||||
--make information available
|
||||
iconFrame.spellId = spellId
|
||||
@@ -388,7 +495,7 @@ detailsFramework.IconGenericMixin = {
|
||||
end
|
||||
end,
|
||||
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
---@param iconFrame df_icongeneric
|
||||
SetCooldown = function(self, iconFrame)
|
||||
if (iconFrame.cooldownLooper) then
|
||||
@@ -399,69 +506,166 @@ detailsFramework.IconGenericMixin = {
|
||||
|
||||
--iconFrame:SetScale(3) --debug
|
||||
|
||||
iconFrame.CooldownEdge:Hide()
|
||||
iconFrame.CooldownEdge.texture = nil
|
||||
if (options.show_horizontal_swipe) then
|
||||
iconFrame.CooldownEdge:Show()
|
||||
iconFrame.CooldownTexture:Show()
|
||||
iconFrame.CooldownBrightnessTexture:Show()
|
||||
|
||||
detailsFramework:SetFontColor(iconFrame.CountdownText, self.options.text_color)
|
||||
iconFrame.CooldownEdge.texture = nil
|
||||
iconFrame.CooldownEdge:SetAlpha(0.834)
|
||||
|
||||
PixelUtil.SetSize(iconFrame.CooldownEdge, iconFrame.CooldownTexture:GetWidth(), 2)
|
||||
PixelUtil.SetPoint(iconFrame.CooldownEdge, "topleft", iconFrame.CooldownTexture, "topleft", 0, 0)
|
||||
PixelUtil.SetPoint(iconFrame.CooldownEdge, "topright", iconFrame.CooldownTexture, "topright", 0, 0)
|
||||
PixelUtil.SetHeight(iconFrame.CooldownEdge, 2)
|
||||
PixelUtil.SetSize(iconFrame.CooldownEdge, iconFrame.CooldownTexture:GetWidth(), 2)
|
||||
PixelUtil.SetPoint(iconFrame.CooldownEdge, "topleft", iconFrame.CooldownTexture, "topleft", 0, 0)
|
||||
PixelUtil.SetPoint(iconFrame.CooldownEdge, "topright", iconFrame.CooldownTexture, "topright", 0, 0)
|
||||
PixelUtil.SetHeight(iconFrame.CooldownEdge, 8)
|
||||
|
||||
local swipe_brightness = options.swipe_brightness
|
||||
iconFrame.CooldownBrightnessTexture:SetAlpha(swipe_brightness)
|
||||
iconFrame.CooldownEdge:SetTexture(options.swipe_white, "CLAMP", "CLAMP", "TRILINEAR")
|
||||
iconFrame.CooldownEdge.texture = options.swipe_white
|
||||
|
||||
local swipe_darkness = options.swipe_alpha
|
||||
iconFrame.CooldownTexture:SetAlpha(swipe_darkness)
|
||||
iconFrame.CooldownTexture:SetVertexColor(unpack(options.swipe_color))
|
||||
local swipe_brightness = options.swipe_brightness
|
||||
iconFrame.CooldownBrightnessTexture:SetAlpha(swipe_brightness)
|
||||
|
||||
iconFrame.CooldownEdge:SetAlpha(0.834)
|
||||
local swipe_darkness = options.swipe_alpha
|
||||
iconFrame.CooldownTexture:SetAlpha(swipe_darkness)
|
||||
iconFrame.CooldownTexture:SetVertexColor(unpack(options.swipe_color))
|
||||
else
|
||||
iconFrame.CooldownEdge:Hide()
|
||||
iconFrame.CooldownBrightnessTexture:Hide()
|
||||
iconFrame.CooldownTexture:Hide()
|
||||
end
|
||||
|
||||
if (options.show_text) then
|
||||
detailsFramework:SetFontColor(iconFrame.CountdownText, self.options.text_color)
|
||||
detailsFramework:SetFontSize(iconFrame.CountdownText, self.options.text_size)
|
||||
detailsFramework:SetFontFace(iconFrame.CountdownText, self.options.text_font)
|
||||
detailsFramework:SetFontOutline(iconFrame.CountdownText, self.options.text_outline)
|
||||
detailsFramework:SetAnchor(iconFrame.CountdownText, self.options.text_anchor, iconFrame)
|
||||
iconFrame.CountdownText:Show()
|
||||
iconFrame.CountdownText:SetAlpha(1)
|
||||
else
|
||||
iconFrame.CountdownText:Hide()
|
||||
end
|
||||
|
||||
if (options.show_cooldown) then
|
||||
iconFrame.Cooldown:Show()
|
||||
iconFrame.Cooldown:SetReverse(options.cooldown_reverse)
|
||||
iconFrame.Cooldown:SetDrawSwipe(options.cooldown_swipe_enabled)
|
||||
iconFrame.Cooldown:SetEdgeTexture(options.cooldown_edge_texture) --the yellow edge that follows the cooldown animation
|
||||
iconFrame.Cooldown:SetHideCountdownNumbers(options.surpress_blizzard_cd_timer)
|
||||
|
||||
iconFrame.Cooldown:SetSwipeTexture([[Interface\Masks\SquareMask]], 0, 0, 0, 0.3)
|
||||
--iconFrame.Cooldown:SetSwipeColor(1, 1, 1, 1)
|
||||
--iconFrame.Cooldown:SetSwipeColor(0, 0, 0, 0.1)
|
||||
|
||||
--iconFrame.Cooldown:SetDrawEdge(true) --the same shit as above
|
||||
--iconFrame.Cooldown:SetDrawSwipe(true)
|
||||
--iconFrame.Cooldown:SetDrawBling(true) --edge of the animation, a thin horizontal texture
|
||||
--iconFrame.Cooldown:SetEdgeScale(4) --edge of the animation, a thin horizontal texture
|
||||
|
||||
if (not options.surpress_blizzard_cd_timer) then
|
||||
detailsFramework:SetFontColor(iconFrame.Cooldown.CountdownText, self.options.text_color)
|
||||
detailsFramework:SetFontSize(iconFrame.Cooldown.CountdownText, self.options.text_size)
|
||||
detailsFramework:SetFontFace(iconFrame.Cooldown.CountdownText, self.options.text_font)
|
||||
detailsFramework:SetFontOutline(iconFrame.Cooldown.CountdownText, self.options.text_outline)
|
||||
end
|
||||
iconFrame.Cooldown.noCooldownCount = options.surpress_tulla_omni_cc
|
||||
|
||||
CooldownFrame_Set(iconFrame.Cooldown, iconFrame.startTime, iconFrame.duration, true, true, iconFrame.modRate)
|
||||
|
||||
iconFrame.CooldownBrightnessTexture:Show()
|
||||
else
|
||||
iconFrame.Cooldown:Hide()
|
||||
end
|
||||
|
||||
self.OnIconTick(iconFrame)
|
||||
|
||||
local amountOfLoops = math.floor(iconFrame.duration / 0.5)
|
||||
local amountOfLoops = math.floor(iconFrame.duration / 0.25)
|
||||
local loopEndCallback = nil
|
||||
local checkPointCallback = nil
|
||||
|
||||
local newLooper = detailsFramework.Schedules.NewLooper(0.5, self.OnIconTick, amountOfLoops, loopEndCallback, checkPointCallback, iconFrame)
|
||||
iconFrame.cooldownLooper = newLooper
|
||||
if (iconFrame.options.remove_on_finish) then
|
||||
--increase the amount of loops in one, so the last loop will remove the icon
|
||||
--otherwise it might finish
|
||||
amountOfLoops = amountOfLoops + 1
|
||||
local newLooper = detailsFramework.Schedules.NewLooper(0.25, self.OnIconTick, amountOfLoops, loopEndCallback, checkPointCallback, iconFrame)
|
||||
iconFrame.cooldownLooper = newLooper
|
||||
else
|
||||
local newLooper = detailsFramework.Schedules.NewLooper(0.25, self.OnIconTick, amountOfLoops, loopEndCallback, checkPointCallback, iconFrame)
|
||||
iconFrame.cooldownLooper = newLooper
|
||||
end
|
||||
end,
|
||||
|
||||
---@param iconFrame df_icongeneric
|
||||
OnIconTick = function(iconFrame)
|
||||
local now = GetTime()
|
||||
--local percent = (now - iconFrame.startTime) / iconFrame.duration --no mod rate
|
||||
local percent = ((now - iconFrame.startTime) / (iconFrame.modRate or 1)) / (iconFrame.duration / (iconFrame.modRate or 1))
|
||||
local percent = (((now - iconFrame.startTime) / (iconFrame.modRate or 1)) / (iconFrame.duration / (iconFrame.modRate or 1))) or 0
|
||||
local options = iconFrame.options
|
||||
percent = Saturate(percent)
|
||||
--percent = abs(percent - 1)
|
||||
|
||||
local newHeight = math.min(iconFrame.textureHeight * percent, iconFrame.textureHeight)
|
||||
iconFrame.CooldownTexture:SetHeight(newHeight)
|
||||
iconFrame.timeRemaining = iconFrame.duration - (now - iconFrame.startTime)
|
||||
|
||||
PixelUtil.SetPoint(iconFrame.CooldownBrightnessTexture, "bottomright", iconFrame, "bottomright", 0, newHeight) --iconFrame.textureHeight -
|
||||
local left, right, top, bottom = unpack(iconFrame.CooldownBrightnessTexture.cords)
|
||||
local newBottomCord = Lerp(iconFrame.CooldownBrightnessTexture.top, iconFrame.CooldownBrightnessTexture.bottom, abs(percent - 1))
|
||||
iconFrame.CooldownBrightnessTexture:SetTexCoord(left, right, top, newBottomCord)
|
||||
|
||||
if (percent > options.swipe_percent2) then
|
||||
if (options.swipe_red and iconFrame.CooldownEdge.texture ~= options.swipe_red) then
|
||||
iconFrame.CooldownEdge:Show()
|
||||
iconFrame.CooldownEdge:SetTexture(options.swipe_red)
|
||||
iconFrame.CooldownEdge.texture = options.swipe_red
|
||||
end
|
||||
|
||||
elseif (percent > options.swipe_percent1) then
|
||||
if (options.swipe_yellow and iconFrame.CooldownEdge.texture ~= options.swipe_yellow) then
|
||||
iconFrame.CooldownEdge:Show()
|
||||
iconFrame.CooldownEdge:SetTexture(options.swipe_yellow)
|
||||
iconFrame.CooldownEdge.texture = options.swipe_yellow
|
||||
if (percent >= 1) then
|
||||
--time expired
|
||||
if (options.remove_on_finish) then
|
||||
iconFrame:GetParent():RemoveSpecificIcon(iconFrame.identifierKey)
|
||||
return
|
||||
else
|
||||
percent = 1
|
||||
end
|
||||
end
|
||||
|
||||
--iconFrame.CountdownText:SetText(iconFrame.parentIconRow.FormatCooldownTime(iconFrame.duration - (now - iconFrame.startTime))) --no mod rate
|
||||
iconFrame.CountdownText:SetText(iconFrame.parentIconRow.FormatCooldownTime((iconFrame.duration - (now - iconFrame.startTime)) / (iconFrame.modRate or 1)))
|
||||
--self.CountdownText:Show()
|
||||
if (options.show_horizontal_swipe) then
|
||||
local newHeight = math.min(iconFrame.textureHeight * percent, iconFrame.textureHeight)
|
||||
iconFrame.CooldownTexture:SetHeight(newHeight)
|
||||
|
||||
PixelUtil.SetPoint(iconFrame.CooldownBrightnessTexture, "bottomright", iconFrame.Texture, "bottomright", 0, newHeight) --iconFrame.textureHeight -
|
||||
local left, right, top, bottom = unpack(iconFrame.CooldownBrightnessTexture.cords)
|
||||
local newBottomCord = Lerp(iconFrame.CooldownBrightnessTexture.top, iconFrame.CooldownBrightnessTexture.bottom, abs(percent - 1))
|
||||
iconFrame.CooldownBrightnessTexture:SetTexCoord(left, right, top, newBottomCord)
|
||||
|
||||
--local newBrightness = Lerp(Saturate(options.cooldown_max_brightness-0.6), options.cooldown_max_brightness, percent)
|
||||
--iconFrame.CooldownBrightnessTexture:SetAlpha(newBrightness)
|
||||
|
||||
if (options.swipe_progressive_color) then
|
||||
--interpolate from green to red
|
||||
--percent goes from 0 to 1, where zero is the start of the cooldown and 1 is the end
|
||||
if (options.swipe_color_start and options.swipe_color_end) then
|
||||
--use the first and second color
|
||||
local r1, g1, b1 = unpack(options.swipe_color_start)
|
||||
local r2, g2, b2 = unpack(options.swipe_color_end)
|
||||
local r, g, b = detailsFramework.Math.LerpLinearColor(percent, 1, r1, g1, b1, r2, g2, b2)
|
||||
iconFrame.CooldownEdge:SetVertexColor(r, g, b, 0.834)
|
||||
else
|
||||
--use a solid color
|
||||
iconFrame.CooldownEdge:SetVertexColor(unpack(options.swipe_color))
|
||||
end
|
||||
|
||||
--iconFrame.CooldownEdge:SetVertexColor(percent, math.abs(percent-1), 0, 0.834)
|
||||
local alpha = Saturate(0.2 + percent)
|
||||
iconFrame.CooldownEdge:SetAlpha(alpha)
|
||||
else
|
||||
--use a solid color
|
||||
iconFrame.CooldownEdge:SetVertexColor(unpack(options.swipe_color))
|
||||
end
|
||||
end
|
||||
|
||||
if (options.show_cooldown) then
|
||||
if (options.cooldown_max_brightness) then
|
||||
iconFrame.CooldownBrightnessTexture:SetAlpha(Lerp(0, options.cooldown_max_brightness, percent))
|
||||
local swipeAlpha = Saturate(Lerp(0, 1, percent))
|
||||
local exponentialCurve = 0.1 * math.exp(3.5 * swipeAlpha)
|
||||
exponentialCurve = Saturate(exponentialCurve)
|
||||
iconFrame.Cooldown:SetSwipeColor(0, 0, 0, exponentialCurve)
|
||||
end
|
||||
end
|
||||
|
||||
--show the countdown text
|
||||
if (options.show_text) then
|
||||
iconFrame.CountdownText:SetText(iconFrame.parentIconRow.FormatCooldownTime((iconFrame.duration - (now - iconFrame.startTime)) / (iconFrame.modRate or 1)))
|
||||
if (options.text_alpha_by_percent) then
|
||||
iconFrame.CountdownText:SetAlpha(percent)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
FormatCooldownTime = function(thisTime)
|
||||
@@ -495,7 +699,7 @@ detailsFramework.IconGenericMixin = {
|
||||
end
|
||||
end,
|
||||
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
---@param identifierKey any
|
||||
RemoveSpecificIcon = function(self, identifierKey)
|
||||
if (not identifierKey or identifierKey == "") then
|
||||
@@ -527,7 +731,7 @@ detailsFramework.IconGenericMixin = {
|
||||
self:AlignAuraIcons()
|
||||
end,
|
||||
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
ClearIcons = function(self, resetBuffs, resetDebuffs)
|
||||
resetBuffs = resetBuffs ~= false
|
||||
resetDebuffs = resetDebuffs ~= false
|
||||
@@ -560,7 +764,7 @@ detailsFramework.IconGenericMixin = {
|
||||
self:AlignAuraIcons()
|
||||
end,
|
||||
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
AlignAuraIcons = function(self)
|
||||
local iconPool = self.IconPool
|
||||
local iconAmount = #iconPool
|
||||
@@ -604,22 +808,30 @@ detailsFramework.IconGenericMixin = {
|
||||
|
||||
if (growDirection == 1) then --grow to right
|
||||
if (bIsFirstIcon) then
|
||||
local attachSide = (bIsCenterAligned and "center") or (nWhichSide and not detailsFramework.SideIsCorner[nWhichSide] and "left") or "bottomleft"
|
||||
PixelUtil.SetPoint(iconFrame, attachSide, anchorTo, attachSide, 0, 0)
|
||||
if (self.options.first_icon_use_anchor) then
|
||||
detailsFramework:SetAnchor(iconFrame, self.options.anchor, self)
|
||||
else
|
||||
local attachSide = (bIsCenterAligned and "center") or (nWhichSide and not detailsFramework.SideIsCorner[nWhichSide] and "left") or "bottomleft"
|
||||
PixelUtil.SetPoint(iconFrame, attachSide, anchorTo, attachSide, 0, 0)
|
||||
end
|
||||
else
|
||||
PixelUtil.SetPoint(iconFrame, "left", anchorTo, "right", xPadding, 0)
|
||||
end
|
||||
|
||||
elseif (growDirection == 2) then --grow to left
|
||||
if (bIsFirstIcon) then
|
||||
local attachSide = (bIsCenterAligned and "center") or (nWhichSide and not detailsFramework.SideIsCorner[nWhichSide] and "right") or "bottomright"
|
||||
PixelUtil.SetPoint(iconFrame, attachSide, anchorTo, attachSide, 0, 0)
|
||||
if (self.options.first_icon_use_anchor) then
|
||||
detailsFramework:SetAnchor(iconFrame, self.options.anchor, self)
|
||||
else
|
||||
local attachSide = (bIsCenterAligned and "center") or (nWhichSide and not detailsFramework.SideIsCorner[nWhichSide] and "right") or "bottomright"
|
||||
PixelUtil.SetPoint(iconFrame, attachSide, anchorTo, attachSide, 0, 0)
|
||||
end
|
||||
else
|
||||
PixelUtil.SetPoint(iconFrame, "right", anchorTo, "left", xPadding, 0)
|
||||
end
|
||||
end
|
||||
|
||||
width = width + ((iconFrame.width or iconFrame:GetWidth()) * iconFrame:GetScale()) + 1
|
||||
width = width + ((iconFrame.width or iconFrame:GetWidth())) + 1 --* iconFrame:GetScale() removed the getscale as now the scale are applied to the width and height
|
||||
end
|
||||
|
||||
if (bIsCenterAligned) then
|
||||
@@ -636,13 +848,13 @@ detailsFramework.IconGenericMixin = {
|
||||
end
|
||||
end,
|
||||
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
GetIconGrowDirection = function(self)
|
||||
local side = self.options.anchor.side
|
||||
return detailsFramework.GrowDirectionBySide[side]
|
||||
end,
|
||||
|
||||
---@param self df_iconrow the parent frame
|
||||
---@param self df_iconrow_generic the parent frame
|
||||
OnOptionChanged = function(self, optionName)
|
||||
if (self.SetBackdropColor) then
|
||||
self:SetBackdropColor(unpack(self.options.backdrop_color))
|
||||
@@ -651,19 +863,18 @@ detailsFramework.IconGenericMixin = {
|
||||
end,
|
||||
}
|
||||
|
||||
local default_icon_row_options = {
|
||||
---@type df_iconrow_generic_options
|
||||
local default_iconrow_generic_options = {
|
||||
icon_width = 20,
|
||||
icon_height = 20,
|
||||
texcoord = {.1, .9, .1, .9},
|
||||
show_text = true,
|
||||
show_text = false,
|
||||
text_color = {1, 1, 1, 1},
|
||||
text_size = 12,
|
||||
text_font = "Arial Narrow",
|
||||
text_outline = "NONE",
|
||||
text_anchor = "center",
|
||||
text_rel_anchor = "center",
|
||||
text_x_offset = 0,
|
||||
text_y_offset = 0,
|
||||
text_anchor = {side = 9, x = 0, y = 0},
|
||||
text_alpha_by_percent = false,
|
||||
desc_text = true,
|
||||
desc_text_color = {1, 1, 1, 1},
|
||||
desc_text_size = 7,
|
||||
@@ -691,29 +902,35 @@ local default_icon_row_options = {
|
||||
anchor = {side = 6, x = 2, y = 0},
|
||||
grow_direction = 1, --1 = to right 2 = to left
|
||||
center_alignment = false, --if true if will align the icons with grow_direction and then set the iconRow width to match the length used by all icons
|
||||
surpress_blizzard_cd_timer = false,
|
||||
|
||||
show_cooldown = false,
|
||||
surpress_tulla_omni_cc = false,
|
||||
on_tick_cooldown_update = true,
|
||||
decimal_timer = false,
|
||||
decimal_timer = false, --nop, not in use
|
||||
cooldown_reverse = false,
|
||||
cooldown_swipe_enabled = true,
|
||||
cooldown_edge_texture = "Interface\\Cooldown\\edge",
|
||||
cooldown_max_brightness = 0.7,
|
||||
surpress_blizzard_cd_timer = false,
|
||||
on_tick_cooldown_update = true, --nop, not in use
|
||||
|
||||
show_horizontal_swipe = true,
|
||||
swipe_progressive_color = true,
|
||||
swipe_alpha = 0.5,
|
||||
swipe_brightness = 0.5,
|
||||
swipe_color = {0, 0, 0},
|
||||
swipe_yellow = false,
|
||||
swipe_red = false,
|
||||
swipe_percent1 = 0.75,
|
||||
swipe_percent2 = 0.90,
|
||||
swipe_color = {0, 0, 0}, --this variable is having conflicts because it's in use by other things
|
||||
swipe_color_start = {0, 1, 0},
|
||||
swipe_color_end = {1, 0, 0},
|
||||
|
||||
--first_icon_anchor = "auto",
|
||||
remove_on_finish = false,
|
||||
first_icon_use_anchor = false,
|
||||
}
|
||||
|
||||
|
||||
|
||||
---@param parent frame
|
||||
---@param name string?
|
||||
---@param options table?
|
||||
---@return df_iconrow
|
||||
---@return df_iconrow_generic
|
||||
function detailsFramework:CreateIconRowGeneric(parent, name, options)
|
||||
local newIconRowFrame = CreateFrame("frame", name, parent, "BackdropTemplate")
|
||||
newIconRowFrame.IconPool = {}
|
||||
@@ -724,7 +941,7 @@ function detailsFramework:CreateIconRowGeneric(parent, name, options)
|
||||
detailsFramework:Mixin(newIconRowFrame, detailsFramework.IconGenericMixin)
|
||||
detailsFramework:Mixin(newIconRowFrame, detailsFramework.OptionsFunctions)
|
||||
|
||||
newIconRowFrame:BuildOptionsTable(default_icon_row_options, options)
|
||||
newIconRowFrame:BuildOptionsTable(default_iconrow_generic_options, options)
|
||||
|
||||
newIconRowFrame:SetSize(1, 1)
|
||||
|
||||
|
||||
@@ -111,14 +111,14 @@ local cornerNames = {"TopLeft", "TopRight", "BottomLeft", "BottomRight"}
|
||||
local setCornerPoints = function(self, textures, width, height, xOffset, yOffset, bIsBorder)
|
||||
for cornerName, thisTexture in pairs(textures) do
|
||||
PixelUtil.SetSize(thisTexture, width or 16, height or 16)
|
||||
thisTexture:SetTexture(self.options.corner_texture)
|
||||
thisTexture:SetTexture(self.options.corner_texture, "CLAMP", "CLAMP", "TRILINEAR")
|
||||
|
||||
--set the mask
|
||||
if (not thisTexture.MaskTexture and bIsBorder) then
|
||||
thisTexture.MaskTexture = self:CreateMaskTexture(nil, "background")
|
||||
thisTexture.MaskTexture:SetSize(74, 64)
|
||||
thisTexture:AddMaskTexture(thisTexture.MaskTexture)
|
||||
thisTexture.MaskTexture:SetTexture([[Interface\Azerite\AzeriteGoldRingRank2]]) --1940690
|
||||
thisTexture.MaskTexture:SetTexture([[Interface\Azerite\AzeriteGoldRingRank2]], "CLAMP", "CLAMP", "TRILINEAR") --1940690
|
||||
--thisTexture.MaskTexture:Hide()
|
||||
end
|
||||
|
||||
@@ -300,7 +300,7 @@ detailsFramework.RoundedCornerPanelMixin = {
|
||||
---@type height
|
||||
local frameHeight = self:GetHeight()
|
||||
|
||||
if (frameHeight < 32) then
|
||||
if (false and frameHeight < 32) then
|
||||
local newCornerSize = frameHeight / 2
|
||||
|
||||
--set the new size of the corners on all corner textures
|
||||
@@ -419,6 +419,11 @@ detailsFramework.RoundedCornerPanelMixin = {
|
||||
return self:GetHeight() - (borderTexture:GetHeight() * 2) + 2
|
||||
|
||||
elseif (alignment == "horizontal") then
|
||||
if (self.tabSide) then
|
||||
if (self.tabSide == "left" or self.tabSide == "right") then
|
||||
return self:GetWidth() - (borderTexture:GetHeight() * 2) + 2 - borderTexture:GetHeight()
|
||||
end
|
||||
end
|
||||
return self:GetWidth() - (borderTexture:GetHeight() * 2) + 2
|
||||
end
|
||||
|
||||
|
||||
+100
-8
@@ -334,11 +334,11 @@ local grid_scrollbox_options = {
|
||||
---create a scrollbox with a grid layout
|
||||
---@param parent frame
|
||||
---@param name string
|
||||
---@param refreshFunc function
|
||||
---@param refreshFunc fun(button:frame, data:table)
|
||||
---@param data table
|
||||
---@param createColumnFrameFunc function
|
||||
---@param createColumnFrameFunc fun(line:frame, lineIndex:number, columnIndex:number)
|
||||
---@param options df_gridscrollbox_options?
|
||||
---@return unknown
|
||||
---@return df_gridscrollbox
|
||||
function detailsFramework:CreateGridScrollBox(parent, name, refreshFunc, data, createColumnFrameFunc, options)
|
||||
options = options or {}
|
||||
|
||||
@@ -428,25 +428,117 @@ function detailsFramework:CreateGridScrollBox(parent, name, refreshFunc, data, c
|
||||
scrollBox.OnSetData = onSetData
|
||||
onSetData(scrollBox, data)
|
||||
|
||||
---@cast scrollBox df_gridscrollbox
|
||||
return scrollBox
|
||||
end
|
||||
|
||||
function detailsFramework.CreateRoundedOptionsScrollBox(parent, name, onRefreshButton, onSelectOption, tbdData, createSelectorButton, gridScrollBoxOptions)
|
||||
---create a scrollbox with a grid layout to be used as a menu
|
||||
---@param parent frame
|
||||
---@param name string?
|
||||
---@param refreshMeFunc fun(gridScrollBox:df_gridscrollbox, searchText:string)
|
||||
---@param refreshButtonFunc fun(button:button, data:table)
|
||||
---@param clickFunc fun(button:button, data:table)
|
||||
---@param onCreateButton fun(button:button, lineIndex:number, columnIndex:number)
|
||||
---@param gridScrollBoxOptions df_gridscrollbox_options
|
||||
---@return df_gridscrollbox
|
||||
function detailsFramework:CreateMenuWithGridScrollBox(parent, name, refreshMeFunc, refreshButtonFunc, clickFunc, onCreateButton, gridScrollBoxOptions)
|
||||
local dataSelected = nil
|
||||
local gridScrollBox
|
||||
|
||||
local onClickButtonSelectorButton = function(blizzButton, buttonDown, dfButton, data)
|
||||
dataSelected = data
|
||||
gridScrollBox:Refresh()
|
||||
xpcall(clickFunc, geterrorhandler(), dfButton, data)
|
||||
end
|
||||
|
||||
--create a search bar to filter the auras
|
||||
local searchText = ""
|
||||
local onSearchTextChangedCallback = function(self, ...)
|
||||
local text = self:GetText()
|
||||
searchText = string.lower(text)
|
||||
dataSelected = nil
|
||||
gridScrollBox:RefreshMe()
|
||||
end
|
||||
|
||||
local searchBox = detailsFramework:CreateSearchBox(parent, onSearchTextChangedCallback)
|
||||
|
||||
---when the scroll is refreshing the line, the line will call this function for each selection button on it
|
||||
---@param button df_button
|
||||
---@param data table
|
||||
local refreshAuraSelectorFrame = function(button, data)
|
||||
local refreshLine = function(button, data)
|
||||
button.data = data
|
||||
|
||||
if (data.tooltip) then
|
||||
button.tooltip = data.tooltip
|
||||
end
|
||||
|
||||
xpcall(onRefreshButton, geterrorhandler(), button, data)
|
||||
|
||||
--set what happen when the user clicks the button
|
||||
button:SetClickFunction(onSelectOption, button, data)
|
||||
button:SetClickFunction(onClickButtonSelectorButton, button, data)
|
||||
|
||||
if (button.data == dataSelected) then
|
||||
button.widget:SetBorderCornerColor(.9, .9, .9)
|
||||
else
|
||||
button.widget:SetBorderCornerColor(unpack(gridScrollBoxOptions.roundedFramePreset.border_color))
|
||||
end
|
||||
|
||||
xpcall(refreshButtonFunc, geterrorhandler(), button, data)
|
||||
end
|
||||
|
||||
--create a line
|
||||
local createButton = function(line, lineIndex, columnIndex)
|
||||
local width = gridScrollBoxOptions.width / gridScrollBoxOptions.columns_per_line - 5
|
||||
local height = gridScrollBoxOptions.line_height
|
||||
if (not height) then
|
||||
height = 30
|
||||
end
|
||||
|
||||
local button = detailsFramework:CreateButton(line, onClickButtonSelectorButton, width, height)
|
||||
detailsFramework:AddRoundedCornersToFrame(button.widget, gridScrollBoxOptions.roundedFramePreset)
|
||||
button.textsize = 11
|
||||
|
||||
button:SetHook("OnEnter", function(self)
|
||||
local dfButton = self:GetObject()
|
||||
GameCooltip:Reset()
|
||||
if (dfButton.spellId) then
|
||||
GameCooltip:SetSpellByID(dfButton.spellId)
|
||||
GameCooltip:SetOwner(self)
|
||||
GameCooltip:Show()
|
||||
end
|
||||
self:SetBorderCornerColor(.9, .9, .9)
|
||||
end)
|
||||
|
||||
button:SetHook("OnLeave", function(self)
|
||||
GameCooltip:Hide()
|
||||
local dfButton = self:GetObject()
|
||||
if (dfButton.data == dataSelected) then
|
||||
self:SetBorderCornerColor(.9, .9, .9)
|
||||
else
|
||||
self:SetBorderCornerColor(unpack(gridScrollBoxOptions.roundedFramePreset.border_color))
|
||||
end
|
||||
end)
|
||||
|
||||
xpcall(onCreateButton, geterrorhandler(), button, lineIndex, columnIndex)
|
||||
|
||||
return button
|
||||
end
|
||||
|
||||
gridScrollBox = detailsFramework:CreateGridScrollBox(parent, name, refreshLine, {}, createButton, gridScrollBoxOptions)
|
||||
gridScrollBox:SetBackdrop({})
|
||||
gridScrollBox:SetBackdropColor(0, 0, 0, 0)
|
||||
gridScrollBox:SetBackdropBorderColor(0, 0, 0, 0)
|
||||
gridScrollBox.__background:Hide()
|
||||
gridScrollBox:Show()
|
||||
|
||||
gridScrollBox.searchBox = searchBox
|
||||
|
||||
searchBox:SetPoint("bottomleft", gridScrollBox, "topleft", 0, 2)
|
||||
searchBox:SetWidth(gridScrollBoxOptions.width)
|
||||
|
||||
function gridScrollBox:RefreshMe()
|
||||
xpcall(refreshMeFunc, geterrorhandler(), gridScrollBox, searchBox:GetText())
|
||||
end
|
||||
|
||||
return gridScrollBox
|
||||
end
|
||||
|
||||
--Need to test this and check the "same_name_spells_add(value)" on the OnEnter function
|
||||
|
||||
+71
-8
@@ -885,13 +885,26 @@ local get_switch_func = function(self)
|
||||
return self.OnSwitch
|
||||
end
|
||||
|
||||
local setCheckedTexture = function(self, texture, xOffSet, yOffSet)
|
||||
self.checked_texture:SetTexture(texture)
|
||||
local setCheckedTexture = function(self, texture, xOffSet, yOffSet, sizePercent, color)
|
||||
if (texture) then
|
||||
self.checked_texture:SetTexture(texture, "CLAMP", "CLAMP", "TRILINEAR")
|
||||
end
|
||||
|
||||
if (xOffSet or yOffSet) then
|
||||
self.checked_texture:SetPoint("center", self.button, "center", xOffSet or -1, yOffSet or -1)
|
||||
else
|
||||
self.checked_texture:SetPoint("center", self.button, "center", -1, -1)
|
||||
end
|
||||
|
||||
if (sizePercent and type(sizePercent) == "number") then
|
||||
local width = self:GetWidth() * sizePercent
|
||||
self.checked_texture:SetSize(width, width)
|
||||
end
|
||||
|
||||
if (color) then
|
||||
local r, g, b, a = DF:ParseColors(color)
|
||||
self.checked_texture:SetVertexColor(r, g, b, a)
|
||||
end
|
||||
end
|
||||
|
||||
local set_as_checkbok = function(self)
|
||||
@@ -904,6 +917,7 @@ local set_as_checkbok = function(self)
|
||||
self.checked_texture = checked
|
||||
|
||||
self.SetCheckedTexture = setCheckedTexture
|
||||
self.SetChecked = switch_set_value
|
||||
|
||||
self._thumb:Hide()
|
||||
self._text:Hide()
|
||||
@@ -1041,6 +1055,14 @@ function DF:NewSwitch(parent, container, name, member, width, height, leftText,
|
||||
end
|
||||
|
||||
function DFSliderMetaFunctions:SetTemplate(template)
|
||||
if (type(template) == "string") then
|
||||
local templateName = template
|
||||
template = DF:GetTemplate("switch", templateName)
|
||||
if (not template) then
|
||||
print("no template found", templateName)
|
||||
end
|
||||
end
|
||||
|
||||
--slider e switch
|
||||
if (template.width) then
|
||||
PixelUtil.SetWidth(self.widget, template.width)
|
||||
@@ -1103,13 +1125,54 @@ function DFSliderMetaFunctions:SetTemplate(template)
|
||||
local r, g, b, a = DF:ParseColors(template.disabled_backdropcolor)
|
||||
self.backdrop_disabledcolor = {r, g, b, a}
|
||||
end
|
||||
|
||||
if (template.is_checkbox) then
|
||||
self:SetAsCheckBox()
|
||||
self:SetCheckedTexture(template.checked_texture, template.checked_xoffset or 0, template.checked_yoffset or 0, template.checked_size_percent or 0.7, template.checked_color)
|
||||
end
|
||||
|
||||
if (template.rounded_corner) then
|
||||
self:SetBackdrop(nil)
|
||||
DF:AddRoundedCornersToFrame(self.widget or self, template.rounded_corner)
|
||||
end
|
||||
end
|
||||
|
||||
function DF:CreateSlider (parent, w, h, min, max, step, defaultv, isDecemal, member, name, with_label, slider_template, label_template)
|
||||
local slider, label = DF:NewSlider (parent, parent, name, member, w, h, min, max, step, defaultv, isDecemal, false, with_label, slider_template, label_template)
|
||||
return slider, label
|
||||
--DF:Mixin(DFSliderMetaFunctions, DF.SetPointMixin)
|
||||
--DF:Mixin(DFSliderMetaFunctions, DF.FrameMixin)
|
||||
--DF:Mixin(DFSliderMetaFunctions, DF.TooltipHandlerMixin)
|
||||
|
||||
---@class df_slider : slider, df_scripthookmixin
|
||||
---@field widget slider
|
||||
---@field slider slider
|
||||
---@field type string
|
||||
---@field dframework boolean
|
||||
---@field SetTemplate fun(self:df_slider, template: table|string)
|
||||
---@field SetFixedParameter fun(value: any)
|
||||
---@field GetFixedParameter fun()
|
||||
---@field SetValueNoCallback fun(value: number)
|
||||
---@field SetThumbSize fun(width:number, height:number)
|
||||
---@field ClearFocus fun()
|
||||
|
||||
---@param parent frame
|
||||
---@param width number? default 150
|
||||
---@param height number? default 20
|
||||
---@param minValue number? default 1
|
||||
---@param maxValue number? default 2
|
||||
---@param step number? default 1
|
||||
---@param defaultv number? default to minValue
|
||||
---@param isDecemal boolean? default false
|
||||
---@param member string?
|
||||
---@param name string?
|
||||
---@param label string?
|
||||
---@param sliderTemplate string|table|nil
|
||||
---@param labelTemplate string|table|nil
|
||||
---@return df_slider, df_label?
|
||||
function DF:CreateSlider (parent, width, height, minValue, maxValue, step, defaultv, isDecemal, member, name, label, sliderTemplate, labelTemplate)
|
||||
local slider, labelText = DF:NewSlider(parent, parent, name, member, width, height, minValue, maxValue, step, defaultv, isDecemal, false, label, sliderTemplate, labelTemplate)
|
||||
return slider, labelText
|
||||
end
|
||||
|
||||
---@return df_slider, df_label?
|
||||
function DF:NewSlider (parent, container, name, member, width, height, minValue, maxValue, step, defaultValue, isDecemal, isSwitch, with_label, slider_template, label_template)
|
||||
if (not name) then
|
||||
name = "DetailsFrameworkSlider" .. DF.SliderCounter
|
||||
@@ -1117,7 +1180,7 @@ function DF:NewSlider (parent, container, name, member, width, height, minValue,
|
||||
end
|
||||
|
||||
if (not parent) then
|
||||
return error("Details! FrameWork: parent not found.", 2)
|
||||
error("Details! FrameWork: parent not found.", 2)
|
||||
end
|
||||
|
||||
if (not container) then
|
||||
@@ -1148,8 +1211,8 @@ function DF:NewSlider (parent, container, name, member, width, height, minValue,
|
||||
step = step or 1
|
||||
defaultValue = defaultValue or minValue
|
||||
|
||||
width = width or 130
|
||||
height = height or 19
|
||||
width = width or 160
|
||||
height = height or 20
|
||||
|
||||
--default members
|
||||
SliderObject.lockdown = false
|
||||
|
||||
@@ -722,6 +722,51 @@ function detailsFramework:NewTextEntry(parent, container, name, member, width, h
|
||||
return newTextEntryObject, withLabel
|
||||
end
|
||||
|
||||
---create a search box with no backdrop, a magnifying glass icon and a clear search button
|
||||
---@param parent frame
|
||||
---@param callback any
|
||||
---@return df_textentry
|
||||
function detailsFramework:CreateSearchBox(parent, callback)
|
||||
local onSearchPressEnterCallback = function(_, _, text, self)
|
||||
callback(self)
|
||||
end
|
||||
|
||||
local searchBox = detailsFramework:CreateTextEntry(parent, onSearchPressEnterCallback, 220, 26)
|
||||
searchBox:SetAsSearchBox()
|
||||
searchBox:SetTextInsets(25, 5, 0, 0)
|
||||
searchBox:SetBackdrop(nil)
|
||||
searchBox:SetHook("OnTextChanged", callback)
|
||||
|
||||
local file, size, flags = searchBox:GetFont()
|
||||
searchBox:SetFont(file, 12, flags)
|
||||
searchBox.ClearSearchButton:SetAlpha(0)
|
||||
|
||||
searchBox.BottomLineTexture = searchBox:CreateTexture(nil, "border")
|
||||
searchBox.BottomLineTexture:SetPoint("bottomleft", searchBox.widget, "bottomleft", -15, 0)
|
||||
searchBox.BottomLineTexture:SetPoint("bottomright", searchBox.widget, "bottomright", 0, 0)
|
||||
local bUseAtlasSize = false
|
||||
searchBox.BottomLineTexture:SetAtlas("common-slider-track")
|
||||
searchBox.BottomLineTexture:SetHeight(8)
|
||||
|
||||
--create the button to clear the search box
|
||||
searchBox.ClearSearchButton = CreateFrame("button", nil, searchBox.widget, "UIPanelCloseButton")
|
||||
searchBox.ClearSearchButton:SetPoint("right", searchBox.widget, "right", -3, 0)
|
||||
searchBox.ClearSearchButton:SetSize(10, 10)
|
||||
searchBox.ClearSearchButton:SetAlpha(0.3)
|
||||
searchBox.ClearSearchButton:GetNormalTexture():SetAtlas("common-search-clearbutton")
|
||||
searchBox.ClearSearchButton:GetHighlightTexture():SetAtlas("common-search-clearbutton")
|
||||
searchBox.ClearSearchButton:GetPushedTexture():SetAtlas("common-search-clearbutton")
|
||||
|
||||
searchBox.ClearSearchButton:SetScript("OnClick", function()
|
||||
searchBox:SetText("")
|
||||
searchBox:PressEnter()
|
||||
searchBox:ClearFocus()
|
||||
end)
|
||||
|
||||
return searchBox
|
||||
end
|
||||
|
||||
|
||||
function detailsFramework:NewSpellEntry(parent, func, width, height, param1, param2, member, name)
|
||||
local editbox = detailsFramework:NewTextEntry(parent, parent, name, member, width, height, func, param1, param2)
|
||||
return editbox
|
||||
|
||||
+4570
-1266
File diff suppressed because it is too large
Load Diff
@@ -18,8 +18,8 @@
|
||||
local addonName, Details222 = ...
|
||||
local version, build, date, tocversion = GetBuildInfo()
|
||||
|
||||
Details.build_counter = 12294
|
||||
Details.alpha_build_counter = 12294 --if this is higher than the regular counter, use it instead
|
||||
Details.build_counter = 12307
|
||||
Details.alpha_build_counter = 12307 --if this is higher than the regular counter, use it instead
|
||||
Details.dont_open_news = true
|
||||
Details.game_version = version
|
||||
Details.userversion = version .. " " .. Details.build_counter
|
||||
@@ -158,9 +158,16 @@ do
|
||||
|
||||
--change logs
|
||||
--[=[
|
||||
|
||||
--]=]
|
||||
|
||||
local news = {
|
||||
{"v10.2.5.12307.155", "February 13th, 2024"},
|
||||
"Fixed the deaths display, where the windows wasn't usig custom text scripts.",
|
||||
"Fixed an issue with custom displays, where it was unable to use class colors in their texts.",
|
||||
"More development and bug fixes on the new Mythic+ Run Completion panel.",
|
||||
"Framework Update.",
|
||||
|
||||
{"v10.2.5.12294.155", "February 08th, 2024"},
|
||||
"General fixes applied to the Mythic+ Panel.",
|
||||
"The Mythic+ section in the options panel can now be translated.",
|
||||
|
||||
+137
-136
@@ -2,6 +2,7 @@
|
||||
local _ = nil
|
||||
_detalhes.custom_function_cache = {}
|
||||
local addonName, Details222 = ...
|
||||
local Details = _detalhes
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--local pointers
|
||||
@@ -11,17 +12,17 @@
|
||||
local tinsert = table.insert
|
||||
local ipairs = ipairs
|
||||
local unpack = table.unpack or unpack
|
||||
local _GetSpellInfo = _detalhes.getspellinfo
|
||||
local _GetSpellInfo = Details.getspellinfo
|
||||
local IsInRaid = IsInRaid
|
||||
local IsInGroup = IsInGroup
|
||||
local stringReplace = _detalhes.string.replace
|
||||
local stringReplace = Details.string.replace
|
||||
|
||||
local Loc = LibStub("AceLocale-3.0"):GetLocale("Details")
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--constants
|
||||
|
||||
local classCustom = _detalhes.atributo_custom
|
||||
local classCustom = Details.atributo_custom
|
||||
classCustom.mt = {__index = classCustom}
|
||||
|
||||
local combatContainers = {
|
||||
@@ -35,7 +36,7 @@
|
||||
classCustom._InstanceLastCombatShown = {}
|
||||
classCustom._TargetActorsProcessed = {}
|
||||
|
||||
local ToKFunctions = _detalhes.ToKFunctions
|
||||
local ToKFunctions = Details.ToKFunctions
|
||||
local SelectedToKFunction = ToKFunctions[1]
|
||||
local UsingCustomRightText = false
|
||||
local UsingCustomLeftText = false
|
||||
@@ -86,25 +87,25 @@
|
||||
local func
|
||||
local scriptTypeName = "search"
|
||||
|
||||
if (_detalhes.custom_function_cache [instanceObject.customName]) then
|
||||
func = _detalhes.custom_function_cache [instanceObject.customName]
|
||||
if (Details.custom_function_cache [instanceObject.customName]) then
|
||||
func = Details.custom_function_cache [instanceObject.customName]
|
||||
else
|
||||
local errortext
|
||||
func, errortext = loadstring (customObject.script)
|
||||
if (func) then
|
||||
DetailsFramework:SetEnvironment(func)
|
||||
_detalhes.custom_function_cache [instanceObject.customName] = func
|
||||
Details.custom_function_cache [instanceObject.customName] = func
|
||||
else
|
||||
_detalhes:Msg("|cFFFF9900error compiling code for custom display " .. (instanceObject.customName or "") .. " |r:", errortext)
|
||||
Details:Msg("|cFFFF9900error compiling code for custom display " .. (instanceObject.customName or "") .. " |r:", errortext)
|
||||
end
|
||||
|
||||
if (customObject.tooltip) then
|
||||
local tooltip_script, errortext = loadstring (customObject.tooltip)
|
||||
if (tooltip_script) then
|
||||
DetailsFramework:SetEnvironment(tooltip_script)
|
||||
_detalhes.custom_function_cache [instanceObject.customName .. "Tooltip"] = tooltip_script
|
||||
Details.custom_function_cache [instanceObject.customName .. "Tooltip"] = tooltip_script
|
||||
else
|
||||
_detalhes:Msg("|cFFFF9900error compiling tooltip code for custom display " .. (instanceObject.customName or "") .. " |r:", errortext)
|
||||
Details:Msg("|cFFFF9900error compiling tooltip code for custom display " .. (instanceObject.customName or "") .. " |r:", errortext)
|
||||
end
|
||||
scriptTypeName = "tooltip"
|
||||
end
|
||||
@@ -113,9 +114,9 @@
|
||||
local total_script, errortext = loadstring (customObject.total_script)
|
||||
if (total_script) then
|
||||
DetailsFramework:SetEnvironment(total_script)
|
||||
_detalhes.custom_function_cache [instanceObject.customName .. "Total"] = total_script
|
||||
Details.custom_function_cache [instanceObject.customName .. "Total"] = total_script
|
||||
else
|
||||
_detalhes:Msg("|cFFFF9900error compiling total code for custom display " .. (instanceObject.customName or "") .. " |r:", errortext)
|
||||
Details:Msg("|cFFFF9900error compiling total code for custom display " .. (instanceObject.customName or "") .. " |r:", errortext)
|
||||
end
|
||||
scriptTypeName = "total"
|
||||
end
|
||||
@@ -124,24 +125,24 @@
|
||||
local percent_script, errortext = loadstring (customObject.percent_script)
|
||||
if (percent_script) then
|
||||
DetailsFramework:SetEnvironment(percent_script)
|
||||
_detalhes.custom_function_cache [instanceObject.customName .. "Percent"] = percent_script
|
||||
Details.custom_function_cache [instanceObject.customName .. "Percent"] = percent_script
|
||||
else
|
||||
_detalhes:Msg("|cFFFF9900error compiling percent code for custom display " .. (instanceObject.customName or "") .. " |r:", errortext)
|
||||
Details:Msg("|cFFFF9900error compiling percent code for custom display " .. (instanceObject.customName or "") .. " |r:", errortext)
|
||||
end
|
||||
scriptTypeName = "percent"
|
||||
end
|
||||
end
|
||||
|
||||
if (not func) then
|
||||
_detalhes:Msg(Loc ["STRING_CUSTOM_FUNC_INVALID"], func)
|
||||
_detalhes:EndRefresh (instanceObject, 0, combatObject, combatObject [1])
|
||||
Details:Msg(Loc ["STRING_CUSTOM_FUNC_INVALID"], func)
|
||||
Details:EndRefresh (instanceObject, 0, combatObject, combatObject [1])
|
||||
end
|
||||
|
||||
local okey, _total, _top, _amount = pcall (func, combatObject, instance_container, instanceObject)
|
||||
if (not okey) then
|
||||
local errorText = _total
|
||||
_detalhes:Msg("|cFFFF9900error on display " .. customObject:GetName() .. " (" .. scriptTypeName .. ")|r:", errorText)
|
||||
return _detalhes:EndRefresh(instanceObject, 0, combatObject, combatObject[1])
|
||||
Details:Msg("|cFFFF9900error on display " .. customObject:GetName() .. " (" .. scriptTypeName .. ")|r:", errorText)
|
||||
return Details:EndRefresh(instanceObject, 0, combatObject, combatObject[1])
|
||||
end
|
||||
|
||||
total = _total or 0
|
||||
@@ -178,7 +179,7 @@
|
||||
end
|
||||
end
|
||||
instanceObject:EsconderScrollBar()
|
||||
return _detalhes:EndRefresh (instanceObject, total, combatObject, nil)
|
||||
return Details:EndRefresh (instanceObject, total, combatObject, nil)
|
||||
end
|
||||
|
||||
if (amount > #instance_container._ActorTable) then
|
||||
@@ -195,8 +196,8 @@
|
||||
-- key name value need to be formated
|
||||
if (customObject) then
|
||||
|
||||
local percent_script = _detalhes.custom_function_cache [instanceObject.customName .. "Percent"]
|
||||
local total_script = _detalhes.custom_function_cache [instanceObject.customName .. "Total"]
|
||||
local percent_script = Details.custom_function_cache [instanceObject.customName .. "Percent"]
|
||||
local total_script = Details.custom_function_cache [instanceObject.customName .. "Total"]
|
||||
local okey
|
||||
|
||||
for index, actor in ipairs(instance_container._ActorTable) do
|
||||
@@ -206,8 +207,8 @@
|
||||
if (percent_script) then
|
||||
okey, percent = pcall (percent_script, floor(actor.value), top, total, combatObject, instanceObject, actor)
|
||||
if (not okey) then
|
||||
_detalhes:Msg("|cFFFF9900percent script error|r:", percent)
|
||||
return _detalhes:EndRefresh (instanceObject, 0, combatObject, combatObject [1])
|
||||
Details:Msg("|cFFFF9900percent script error|r:", percent)
|
||||
return Details:EndRefresh (instanceObject, 0, combatObject, combatObject [1])
|
||||
end
|
||||
else
|
||||
percent = format ("%.1f", floor(actor.value) / total * 100)
|
||||
@@ -216,8 +217,8 @@
|
||||
if (total_script) then
|
||||
local okey, value = pcall (total_script, floor(actor.value), top, total, combatObject, instanceObject, actor)
|
||||
if (not okey) then
|
||||
_detalhes:Msg("|cFFFF9900total script error|r:", value)
|
||||
return _detalhes:EndRefresh (instanceObject, 0, combatObject, combatObject [1])
|
||||
Details:Msg("|cFFFF9900total script error|r:", value)
|
||||
return Details:EndRefresh (instanceObject, 0, combatObject, combatObject [1])
|
||||
end
|
||||
|
||||
if (type(value) == "number") then
|
||||
@@ -252,7 +253,7 @@
|
||||
|
||||
classCustom:Refresh (instanceObject, instance_container, combatObject, force, total, top, customObject)
|
||||
|
||||
return _detalhes:EndRefresh (instanceObject, total, combatObject, combatObject [container_index])
|
||||
return Details:EndRefresh (instanceObject, total, combatObject, combatObject [container_index])
|
||||
|
||||
end
|
||||
|
||||
@@ -288,11 +289,11 @@
|
||||
|
||||
elseif (source == "[raid]") then
|
||||
|
||||
if (_detalhes.in_combat and instance.segmento == 0 and not export) then
|
||||
if (Details.in_combat and instance.segmento == 0 and not export) then
|
||||
if (container_index == 1) then
|
||||
combat_container = _detalhes.cache_damage_group
|
||||
combat_container = Details.cache_damage_group
|
||||
elseif (container_index == 2) then
|
||||
combat_container = _detalhes.cache_healing_group
|
||||
combat_container = Details.cache_healing_group
|
||||
end
|
||||
end
|
||||
|
||||
@@ -319,7 +320,7 @@
|
||||
end
|
||||
|
||||
elseif (source == "[player]") then
|
||||
local pindex = combat [container_index]._NameIndexTable [_detalhes.playername]
|
||||
local pindex = combat [container_index]._NameIndexTable [Details.playername]
|
||||
if (pindex) then
|
||||
local actor = combat [container_index]._ActorTable [pindex]
|
||||
local actortotal = func (_, actor, source, target, spellid, combat, instance_container)
|
||||
@@ -379,8 +380,8 @@
|
||||
end
|
||||
end
|
||||
|
||||
local percent_script = _detalhes.custom_function_cache [instance.customName .. "Percent"]
|
||||
local total_script = _detalhes.custom_function_cache [instance.customName .. "Total"]
|
||||
local percent_script = Details.custom_function_cache [instance.customName .. "Percent"]
|
||||
local total_script = Details.custom_function_cache [instance.customName .. "Total"]
|
||||
|
||||
local bars_show_data = instance.row_info.textR_show_data
|
||||
local bars_brackets = instance:GetBarBracket()
|
||||
@@ -399,7 +400,7 @@
|
||||
local row1 = barContainer [1]
|
||||
row1.minha_tabela = nil
|
||||
row1.lineText1:SetText(Loc ["STRING_TOTAL"])
|
||||
row1.lineText4:SetText(_detalhes:ToK2 (total) .. " (" .. _detalhes:ToK (total / combatElapsedTime) .. ")")
|
||||
row1.lineText4:SetText(Details:ToK2 (total) .. " (" .. Details:ToK (total / combatElapsedTime) .. ")")
|
||||
|
||||
row1:SetValue(100)
|
||||
local r, g, b = unpack(instance.total_bar.color)
|
||||
@@ -435,7 +436,7 @@
|
||||
local row1 = barContainer [1]
|
||||
row1.minha_tabela = nil
|
||||
row1.lineText1:SetText(Loc ["STRING_TOTAL"])
|
||||
row1.lineText4:SetText(_detalhes:ToK2 (total) .. " (" .. _detalhes:ToK (total / combatElapsedTime) .. ")")
|
||||
row1.lineText4:SetText(Details:ToK2 (total) .. " (" .. Details:ToK (total / combatElapsedTime) .. ")")
|
||||
|
||||
row1:SetValue(100)
|
||||
local r, g, b = unpack(instance.total_bar.color)
|
||||
@@ -493,8 +494,8 @@
|
||||
--local value, top, total, combat, instance = ...
|
||||
okey, percent = pcall (percent_script, self.value, top, total, combat, instance, self)
|
||||
if (not okey) then
|
||||
_detalhes:Msg("|cFFFF9900error on custom display function|r:", percent)
|
||||
return _detalhes:EndRefresh (instance, 0, combat, combat [1])
|
||||
Details:Msg("|cFFFF9900error on custom display function|r:", percent)
|
||||
return Details:EndRefresh (instance, 0, combat, combat [1])
|
||||
end
|
||||
else
|
||||
if (percentage_type == 1) then
|
||||
@@ -512,8 +513,8 @@
|
||||
if (total_script) then
|
||||
local okey, value = pcall (total_script, self.value, top, total, combat, instance, self)
|
||||
if (not okey) then
|
||||
_detalhes:Msg("|cFFFF9900error on custom display function|r:", value)
|
||||
return _detalhes:EndRefresh (instance, 0, combat, combat [1])
|
||||
Details:Msg("|cFFFF9900error on custom display function|r:", value)
|
||||
return Details:EndRefresh (instance, 0, combat, combat [1])
|
||||
end
|
||||
|
||||
if (instance.use_multi_fontstrings) then
|
||||
@@ -554,7 +555,7 @@
|
||||
-- update tooltip function --
|
||||
|
||||
if (self.id) then
|
||||
local school = _detalhes.spell_school_cache[self.nome]
|
||||
local school = Details.spell_school_cache[self.nome]
|
||||
if (school) then
|
||||
local schoolColor = Details.spells_school[school]
|
||||
if (not schoolColor) then
|
||||
@@ -611,7 +612,7 @@
|
||||
|
||||
esta_barra.last_value = esta_porcentagem --reseta o ultimo valor da barra
|
||||
|
||||
if (_detalhes.is_using_row_animations and forcar) then
|
||||
if (Details.is_using_row_animations and forcar) then
|
||||
esta_barra.tem_animacao = 0
|
||||
esta_barra:SetScript("OnUpdate", nil)
|
||||
end
|
||||
@@ -620,7 +621,7 @@
|
||||
|
||||
elseif (esta_porcentagem ~= esta_barra.last_value) then --continua mostrando a mesma tabela ent�o compara a porcentagem
|
||||
--apenas atualizar
|
||||
if (_detalhes.is_using_row_animations) then
|
||||
if (Details.is_using_row_animations) then
|
||||
|
||||
local upRow = barras_container [whichRowLine-1]
|
||||
if (upRow) then
|
||||
@@ -641,14 +642,14 @@
|
||||
end
|
||||
end
|
||||
|
||||
function classCustom:RefreshBarra(esta_barra, instancia, from_resize)
|
||||
function classCustom:RefreshBarra(thisBar, instanceObject, bFromResize)
|
||||
local class, enemy, arena_enemy, arena_ally = self.classe, self.enemy, self.arena_enemy, self.arena_ally
|
||||
|
||||
if (from_resize) then
|
||||
if (bFromResize) then
|
||||
if (self.id) then
|
||||
local school = _detalhes.spell_school_cache[self.nome]
|
||||
if (school) then
|
||||
local schoolColor = Details.spells_school[school]
|
||||
local schoolData = Details.spell_school_cache[self.nome]
|
||||
if (schoolData) then
|
||||
local schoolColor = Details.spells_school[schoolData]
|
||||
if (not schoolColor) then
|
||||
schoolColor = Details.spells_school[1]
|
||||
end
|
||||
@@ -662,64 +663,64 @@
|
||||
end
|
||||
end
|
||||
|
||||
_detalhes:SetBarColors(esta_barra, instancia, actor_class_color_r, actor_class_color_g, actor_class_color_b)
|
||||
self:SetBarColors(thisBar, instanceObject, actor_class_color_r, actor_class_color_g, actor_class_color_b)
|
||||
|
||||
--we need a customized icon settings for custom displays.
|
||||
if (self.classe == "UNKNOW") then
|
||||
esta_barra.icone_classe:SetTexture("Interface\\LFGFRAME\\LFGROLE_BW")
|
||||
esta_barra.icone_classe:SetTexCoord(.25, .5, 0, 1)
|
||||
esta_barra.icone_classe:SetVertexColor(1, 1, 1)
|
||||
thisBar.icone_classe:SetTexture("Interface\\LFGFRAME\\LFGROLE_BW")
|
||||
thisBar.icone_classe:SetTexCoord(.25, .5, 0, 1)
|
||||
thisBar.icone_classe:SetVertexColor(1, 1, 1)
|
||||
|
||||
elseif (self.classe == "UNGROUPPLAYER") then
|
||||
if (self.enemy) then
|
||||
if (_detalhes.faction_against == "Horde") then
|
||||
esta_barra.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Orc_Male")
|
||||
esta_barra.icone_classe:SetTexCoord(0, 1, 0, 1)
|
||||
if (Details.faction_against == "Horde") then
|
||||
thisBar.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Orc_Male")
|
||||
thisBar.icone_classe:SetTexCoord(0, 1, 0, 1)
|
||||
else
|
||||
esta_barra.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Human_Male")
|
||||
esta_barra.icone_classe:SetTexCoord(0, 1, 0, 1)
|
||||
thisBar.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Human_Male")
|
||||
thisBar.icone_classe:SetTexCoord(0, 1, 0, 1)
|
||||
end
|
||||
else
|
||||
if (_detalhes.faction_against == "Horde") then
|
||||
esta_barra.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Human_Male")
|
||||
esta_barra.icone_classe:SetTexCoord(0, 1, 0, 1)
|
||||
if (Details.faction_against == "Horde") then
|
||||
thisBar.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Human_Male")
|
||||
thisBar.icone_classe:SetTexCoord(0, 1, 0, 1)
|
||||
else
|
||||
esta_barra.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Orc_Male")
|
||||
esta_barra.icone_classe:SetTexCoord(0, 1, 0, 1)
|
||||
thisBar.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Orc_Male")
|
||||
thisBar.icone_classe:SetTexCoord(0, 1, 0, 1)
|
||||
end
|
||||
end
|
||||
esta_barra.icone_classe:SetVertexColor(1, 1, 1)
|
||||
thisBar.icone_classe:SetVertexColor(1, 1, 1)
|
||||
|
||||
elseif (self.classe == "PET") then
|
||||
esta_barra.icone_classe:SetTexture(instancia.row_info.icon_file)
|
||||
esta_barra.icone_classe:SetTexCoord(0.25, 0.49609375, 0.75, 1)
|
||||
esta_barra.icone_classe:SetVertexColor(actor_class_color_r, actor_class_color_g, actor_class_color_b)
|
||||
thisBar.icone_classe:SetTexture(instanceObject.row_info.icon_file)
|
||||
thisBar.icone_classe:SetTexCoord(0.25, 0.49609375, 0.75, 1)
|
||||
thisBar.icone_classe:SetVertexColor(actor_class_color_r, actor_class_color_g, actor_class_color_b)
|
||||
|
||||
else
|
||||
if (self.id) then
|
||||
esta_barra.icone_classe:SetTexCoord(0.078125, 0.921875, 0.078125, 0.921875)
|
||||
esta_barra.icone_classe:SetTexture(self.icon)
|
||||
thisBar.icone_classe:SetTexCoord(0.078125, 0.921875, 0.078125, 0.921875)
|
||||
thisBar.icone_classe:SetTexture(self.icon)
|
||||
else
|
||||
if (instancia.row_info.use_spec_icons) then
|
||||
if (instanceObject.row_info.use_spec_icons) then
|
||||
if ((self.spec and self.spec ~= 0) or (self.my_actor.spec and self.my_actor.spec ~= 0)) then
|
||||
esta_barra.icone_classe:SetTexture(instancia.row_info.spec_file)
|
||||
esta_barra.icone_classe:SetTexCoord(unpack(_detalhes.class_specs_coords[self.spec or self.my_actor.spec]))
|
||||
thisBar.icone_classe:SetTexture(instanceObject.row_info.spec_file)
|
||||
thisBar.icone_classe:SetTexCoord(unpack(Details.class_specs_coords[self.spec or self.my_actor.spec]))
|
||||
else
|
||||
esta_barra.icone_classe:SetTexture([[Interface\AddOns\Details\images\classes_small]])
|
||||
esta_barra.icone_classe:SetTexCoord(unpack(Details.class_coords[self.classe]))
|
||||
thisBar.icone_classe:SetTexture([[Interface\AddOns\Details\images\classes_small]])
|
||||
thisBar.icone_classe:SetTexCoord(unpack(Details.class_coords[self.classe]))
|
||||
end
|
||||
else
|
||||
esta_barra.icone_classe:SetTexture(instancia.row_info.icon_file)
|
||||
esta_barra.icone_classe:SetTexCoord(unpack(Details.class_coords[self.classe]))
|
||||
thisBar.icone_classe:SetTexture(instanceObject.row_info.icon_file)
|
||||
thisBar.icone_classe:SetTexCoord(unpack(Details.class_coords[self.classe]))
|
||||
end
|
||||
end
|
||||
esta_barra.icone_classe:SetVertexColor(1, 1, 1)
|
||||
thisBar.icone_classe:SetVertexColor(1, 1, 1)
|
||||
end
|
||||
|
||||
--left text
|
||||
self:SetBarLeftText (esta_barra, instancia, enemy, arena_enemy, arena_ally, UsingCustomLeftText)
|
||||
self:SetBarLeftText(thisBar, instanceObject, enemy, arena_enemy, arena_ally, UsingCustomLeftText)
|
||||
|
||||
esta_barra.lineText1:SetSize(esta_barra:GetWidth() - esta_barra.lineText4:GetStringWidth() - 20, 15)
|
||||
thisBar.lineText1:SetSize(thisBar:GetWidth() - thisBar.lineText4:GetStringWidth() - 20, 15)
|
||||
|
||||
end
|
||||
|
||||
@@ -829,7 +830,7 @@
|
||||
end
|
||||
if (class == "UNKNOW") then
|
||||
--try once again
|
||||
class = _detalhes:GetClass(actor.nome or actor.name)
|
||||
class = Details:GetClass(actor.nome or actor.name)
|
||||
if (class and class ~= "UNKNOW") then
|
||||
actor.classe = class
|
||||
end
|
||||
@@ -839,7 +840,7 @@
|
||||
local newActor = setmetatable({
|
||||
nome = actor.nome or actor.name,
|
||||
classe = class,
|
||||
value = _detalhes:GetOrderNumber(),
|
||||
value = Details:GetOrderNumber(),
|
||||
is_custom = true,
|
||||
color = actor.color,
|
||||
}, classCustom.mt)
|
||||
@@ -847,7 +848,7 @@
|
||||
newActor.customColor = actor.customColor
|
||||
|
||||
newActor.name_complement = name_complement
|
||||
newActor.displayName = actor.displayName or (_detalhes:GetOnlyName(newActor.nome) .. (name_complement or ""))
|
||||
newActor.displayName = actor.displayName or (Details:GetOnlyName(newActor.nome) .. (name_complement or ""))
|
||||
|
||||
newActor:SetSpecId(actor.spec)
|
||||
|
||||
@@ -935,19 +936,19 @@
|
||||
local actorObject = self.my_actor
|
||||
|
||||
if (actorObject.id) then
|
||||
_detalhes:AddTooltipSpellHeaderText (select(1, _GetSpellInfo(actorObject.id)), "yellow", 1, select(3, _GetSpellInfo(actorObject.id)), 0.90625, 0.109375, 0.15625, 0.875, false, 18)
|
||||
Details:AddTooltipSpellHeaderText (select(1, _GetSpellInfo(actorObject.id)), "yellow", 1, select(3, _GetSpellInfo(actorObject.id)), 0.90625, 0.109375, 0.15625, 0.875, false, 18)
|
||||
else
|
||||
_detalhes:AddTooltipSpellHeaderText (customObject:GetName(), "yellow", 1, customObject:GetIcon(), 0.90625, 0.109375, 0.15625, 0.875, false, 18)
|
||||
Details:AddTooltipSpellHeaderText (customObject:GetName(), "yellow", 1, customObject:GetIcon(), 0.90625, 0.109375, 0.15625, 0.875, false, 18)
|
||||
end
|
||||
|
||||
_detalhes:AddTooltipHeaderStatusbar (1, 1, 1, 0.6)
|
||||
Details:AddTooltipHeaderStatusbar (1, 1, 1, 0.6)
|
||||
|
||||
if (customObject:IsScripted()) then
|
||||
if (customObject.tooltip) then
|
||||
local func = _detalhes.custom_function_cache [instanceObject.customName .. "Tooltip"]
|
||||
local func = Details.custom_function_cache [instanceObject.customName .. "Tooltip"]
|
||||
local okey, errortext = pcall(func, actorObject, instanceObject.showing, instanceObject, keydown)
|
||||
if (not okey) then
|
||||
_detalhes:Msg("|cFFFF9900error on custom display tooltip function|r:", errortext)
|
||||
Details:Msg("|cFFFF9900error on custom display tooltip function|r:", errortext)
|
||||
return false
|
||||
end
|
||||
end
|
||||
@@ -1044,14 +1045,14 @@
|
||||
|
||||
function classCustom:RemoveCustom (index)
|
||||
|
||||
if (not _detalhes.tabela_instancias) then
|
||||
if (not Details.tabela_instancias) then
|
||||
--do not remove customs while the addon is loading.
|
||||
return
|
||||
end
|
||||
|
||||
table.remove (_detalhes.custom, index)
|
||||
table.remove (Details.custom, index)
|
||||
|
||||
for _, instance in ipairs(_detalhes.tabela_instancias) do
|
||||
for _, instance in ipairs(Details.tabela_instancias) do
|
||||
if (instance.atributo == 5 and instance.sub_atributo == index) then
|
||||
instance:ResetAttribute()
|
||||
elseif (instance.atributo == 5 and instance.sub_atributo > index) then
|
||||
@@ -1062,33 +1063,33 @@
|
||||
end
|
||||
end
|
||||
|
||||
_detalhes.switch:OnRemoveCustom (index)
|
||||
Details.switch:OnRemoveCustom (index)
|
||||
end
|
||||
|
||||
--export for plugins
|
||||
function _detalhes:RemoveCustomObject (object_name)
|
||||
for index, object in ipairs(_detalhes.custom) do
|
||||
function Details:RemoveCustomObject (object_name)
|
||||
for index, object in ipairs(Details.custom) do
|
||||
if (object.name == object_name) then
|
||||
return classCustom:RemoveCustom (index)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function _detalhes:ResetCustomFunctionsCache()
|
||||
Details:Destroy(_detalhes.custom_function_cache)
|
||||
function Details:ResetCustomFunctionsCache()
|
||||
Details:Destroy(Details.custom_function_cache)
|
||||
end
|
||||
|
||||
function _detalhes.refresh:r_atributo_custom()
|
||||
function Details.refresh:r_atributo_custom()
|
||||
--check for non used temp displays
|
||||
if (_detalhes.tabela_instancias) then
|
||||
if (Details.tabela_instancias) then
|
||||
|
||||
for i = #_detalhes.custom, 1, -1 do
|
||||
local custom_object = _detalhes.custom [i]
|
||||
for i = #Details.custom, 1, -1 do
|
||||
local custom_object = Details.custom [i]
|
||||
if (custom_object.temp) then
|
||||
--check if there is a instance showing this custom
|
||||
local showing = false
|
||||
|
||||
for index, instance in ipairs(_detalhes.tabela_instancias) do
|
||||
for index, instance in ipairs(Details.tabela_instancias) do
|
||||
if (instance.atributo == 5 and instance.sub_atributo == i) then
|
||||
showing = true
|
||||
end
|
||||
@@ -1102,37 +1103,37 @@
|
||||
end
|
||||
|
||||
--restore metatable and indexes
|
||||
for index, custom_object in ipairs(_detalhes.custom) do
|
||||
for index, custom_object in ipairs(Details.custom) do
|
||||
setmetatable(custom_object, classCustom)
|
||||
custom_object.__index = classCustom
|
||||
end
|
||||
end
|
||||
|
||||
function _detalhes.clear:c_atributo_custom()
|
||||
for _, custom_object in ipairs(_detalhes.custom) do
|
||||
function Details.clear:c_atributo_custom()
|
||||
for _, custom_object in ipairs(Details.custom) do
|
||||
custom_object.__index = nil
|
||||
end
|
||||
end
|
||||
|
||||
function classCustom:UpdateSelectedToKFunction()
|
||||
SelectedToKFunction = ToKFunctions [_detalhes.ps_abbreviation]
|
||||
FormatTooltipNumber = ToKFunctions [_detalhes.tooltip.abbreviation]
|
||||
TooltipMaximizedMethod = _detalhes.tooltip.maximize_method
|
||||
SelectedToKFunction = ToKFunctions [Details.ps_abbreviation]
|
||||
FormatTooltipNumber = ToKFunctions [Details.tooltip.abbreviation]
|
||||
TooltipMaximizedMethod = Details.tooltip.maximize_method
|
||||
classCustom:UpdateDamageDoneBracket()
|
||||
classCustom:UpdateHealingDoneBracket()
|
||||
end
|
||||
|
||||
function _detalhes:InstallCustomObject (object)
|
||||
function Details:InstallCustomObject (object)
|
||||
local have = false
|
||||
if (object.script_version) then
|
||||
for _, custom in ipairs(_detalhes.custom) do
|
||||
for _, custom in ipairs(Details.custom) do
|
||||
if (custom.name == object.name and (custom.script_version and custom.script_version >= object.script_version) ) then
|
||||
have = true
|
||||
break
|
||||
end
|
||||
end
|
||||
else
|
||||
for _, custom in ipairs(_detalhes.custom) do
|
||||
for _, custom in ipairs(Details.custom) do
|
||||
if (custom.name == object.name) then
|
||||
have = true
|
||||
break
|
||||
@@ -1141,27 +1142,27 @@
|
||||
end
|
||||
|
||||
if (not have) then
|
||||
for i, custom in ipairs(_detalhes.custom) do
|
||||
for i, custom in ipairs(Details.custom) do
|
||||
if (custom.name == object.name) then
|
||||
table.remove (_detalhes.custom, i)
|
||||
table.remove (Details.custom, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
setmetatable(object, _detalhes.atributo_custom)
|
||||
object.__index = _detalhes.atributo_custom
|
||||
_detalhes.custom [#_detalhes.custom+1] = object
|
||||
setmetatable(object, Details.atributo_custom)
|
||||
object.__index = Details.atributo_custom
|
||||
Details.custom [#Details.custom+1] = object
|
||||
end
|
||||
end
|
||||
|
||||
function Details222.GetCustomDisplayIDByName(customDisplayName)
|
||||
for customDisplayID, customObject in ipairs(_detalhes.custom) do
|
||||
for customDisplayID, customObject in ipairs(Details.custom) do
|
||||
if (customObject.name == customDisplayName) then
|
||||
return customDisplayID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function _detalhes:AddDefaultCustomDisplays()
|
||||
function Details:AddDefaultCustomDisplays()
|
||||
local PotionUsed = {
|
||||
name = Loc ["STRING_CUSTOM_POT_DEFAULT"],
|
||||
icon = [[Interface\ICONS\INV_Potion_03]],
|
||||
@@ -1280,8 +1281,8 @@
|
||||
table.remove (self.custom, i)
|
||||
end
|
||||
end
|
||||
setmetatable(PotionUsed, _detalhes.atributo_custom)
|
||||
PotionUsed.__index = _detalhes.atributo_custom
|
||||
setmetatable(PotionUsed, Details.atributo_custom)
|
||||
PotionUsed.__index = Details.atributo_custom
|
||||
self.custom [#self.custom+1] = PotionUsed
|
||||
end
|
||||
|
||||
@@ -1366,8 +1367,8 @@
|
||||
table.remove (self.custom, i)
|
||||
end
|
||||
end
|
||||
setmetatable(Healthstone, _detalhes.atributo_custom)
|
||||
Healthstone.__index = _detalhes.atributo_custom
|
||||
setmetatable(Healthstone, Details.atributo_custom)
|
||||
Healthstone.__index = Details.atributo_custom
|
||||
self.custom [#self.custom+1] = Healthstone
|
||||
end
|
||||
|
||||
@@ -1430,8 +1431,8 @@
|
||||
table.remove (self.custom, i)
|
||||
end
|
||||
end
|
||||
setmetatable(DamageActivityTime, _detalhes.atributo_custom)
|
||||
DamageActivityTime.__index = _detalhes.atributo_custom
|
||||
setmetatable(DamageActivityTime, Details.atributo_custom)
|
||||
DamageActivityTime.__index = Details.atributo_custom
|
||||
self.custom [#self.custom+1] = DamageActivityTime
|
||||
end
|
||||
|
||||
@@ -1492,8 +1493,8 @@
|
||||
table.remove (self.custom, i)
|
||||
end
|
||||
end
|
||||
setmetatable(HealActivityTime, _detalhes.atributo_custom)
|
||||
HealActivityTime.__index = _detalhes.atributo_custom
|
||||
setmetatable(HealActivityTime, Details.atributo_custom)
|
||||
HealActivityTime.__index = Details.atributo_custom
|
||||
self.custom [#self.custom+1] = HealActivityTime
|
||||
end
|
||||
|
||||
@@ -1588,8 +1589,8 @@
|
||||
end
|
||||
end
|
||||
if (not have) then
|
||||
setmetatable(CC_Done, _detalhes.atributo_custom)
|
||||
CC_Done.__index = _detalhes.atributo_custom
|
||||
setmetatable(CC_Done, Details.atributo_custom)
|
||||
CC_Done.__index = Details.atributo_custom
|
||||
|
||||
for i, custom in ipairs(self.custom) do
|
||||
if (custom.name == Loc ["STRING_CUSTOM_CC_DONE"]) then
|
||||
@@ -1722,8 +1723,8 @@
|
||||
end
|
||||
end
|
||||
if (not have) then
|
||||
setmetatable(CC_Received, _detalhes.atributo_custom)
|
||||
CC_Received.__index = _detalhes.atributo_custom
|
||||
setmetatable(CC_Received, Details.atributo_custom)
|
||||
CC_Received.__index = Details.atributo_custom
|
||||
|
||||
for i, custom in ipairs(self.custom) do
|
||||
if (custom.name == Loc ["STRING_CUSTOM_CC_RECEIVED"]) then
|
||||
@@ -1982,8 +1983,8 @@
|
||||
end
|
||||
end
|
||||
if (not have) then
|
||||
setmetatable(MySpells, _detalhes.atributo_custom)
|
||||
MySpells.__index = _detalhes.atributo_custom
|
||||
setmetatable(MySpells, Details.atributo_custom)
|
||||
MySpells.__index = Details.atributo_custom
|
||||
|
||||
for i, custom in ipairs(self.custom) do
|
||||
if (custom.name == Loc ["STRING_CUSTOM_MYSPELLS"]) then
|
||||
@@ -2074,8 +2075,8 @@
|
||||
end
|
||||
end
|
||||
if (not have) then
|
||||
setmetatable(DamageOnSkullTarget, _detalhes.atributo_custom)
|
||||
DamageOnSkullTarget.__index = _detalhes.atributo_custom
|
||||
setmetatable(DamageOnSkullTarget, Details.atributo_custom)
|
||||
DamageOnSkullTarget.__index = Details.atributo_custom
|
||||
|
||||
for i, custom in ipairs(self.custom) do
|
||||
if (custom.name == Loc ["STRING_CUSTOM_DAMAGEONSKULL"]) then
|
||||
@@ -2204,8 +2205,8 @@
|
||||
end
|
||||
end
|
||||
if (not have) then
|
||||
setmetatable(DamageOnAnyTarget, _detalhes.atributo_custom)
|
||||
DamageOnAnyTarget.__index = _detalhes.atributo_custom
|
||||
setmetatable(DamageOnAnyTarget, Details.atributo_custom)
|
||||
DamageOnAnyTarget.__index = Details.atributo_custom
|
||||
|
||||
for i, custom in ipairs(self.custom) do
|
||||
if (custom.name == Loc ["STRING_CUSTOM_DAMAGEONANYMARKEDTARGET"]) then
|
||||
@@ -2390,8 +2391,8 @@
|
||||
table.remove (self.custom, i)
|
||||
end
|
||||
end
|
||||
setmetatable(DynamicOverallDamage, _detalhes.atributo_custom)
|
||||
DynamicOverallDamage.__index = _detalhes.atributo_custom
|
||||
setmetatable(DynamicOverallDamage, Details.atributo_custom)
|
||||
DynamicOverallDamage.__index = Details.atributo_custom
|
||||
self.custom [#self.custom+1] = DynamicOverallDamage
|
||||
end
|
||||
|
||||
@@ -2491,13 +2492,13 @@
|
||||
table.remove (self.custom, i)
|
||||
end
|
||||
end
|
||||
setmetatable(DamageOnShields, _detalhes.atributo_custom)
|
||||
DamageOnShields.__index = _detalhes.atributo_custom
|
||||
setmetatable(DamageOnShields, Details.atributo_custom)
|
||||
DamageOnShields.__index = Details.atributo_custom
|
||||
self.custom [#self.custom+1] = DamageOnShields
|
||||
end
|
||||
|
||||
---------------------------------------
|
||||
|
||||
_detalhes:ResetCustomFunctionsCache()
|
||||
Details:ResetCustomFunctionsCache()
|
||||
|
||||
end
|
||||
|
||||
@@ -327,8 +327,18 @@ function Details.Sort4Reverse(table1, table2) --[[exported]]
|
||||
return table1[4] < table2[4]
|
||||
end
|
||||
|
||||
function Details:GetTextColor(instanceObject, actorObject)
|
||||
if (instanceObject.row_info.textL_class_colors) then
|
||||
function Details:GetTextColor(instanceObject, textSide)
|
||||
local actorObject = self
|
||||
textSide = textSide or "left"
|
||||
|
||||
local bUseClassColor = false
|
||||
if (textSide == "left") then
|
||||
bUseClassColor = instanceObject.row_info.textL_class_colors
|
||||
elseif (textSide == "right") then
|
||||
bUseClassColor = instanceObject.row_info.textR_class_colors
|
||||
end
|
||||
|
||||
if (bUseClassColor) then
|
||||
return unpack(Details.class_colors[actorObject.classe or "UNKNOW"])
|
||||
else
|
||||
return unpack(instanceObject.row_info.fixed_text_color)
|
||||
@@ -3179,9 +3189,12 @@ function Details:SetBarLeftText(bar, instance, enemy, arenaEnemy, arenaAlly, usi
|
||||
barNumber = bar.colocacao .. ". "
|
||||
end
|
||||
|
||||
--translate cyrillic alphabet to western alphabet by Vardex (https://github.com/Vardex May 22, 2019)
|
||||
if (instance.row_info.textL_translit_text) then
|
||||
self.displayName = Translit:Transliterate(self.displayName, "!")
|
||||
if (not self.transliteratedName) then
|
||||
--translate cyrillic alphabet to western alphabet by Vardex (https://github.com/Vardex May 22, 2019)
|
||||
self.transliteratedName = Translit:Transliterate(self.displayName, "!")
|
||||
end
|
||||
self.displayName = self.transliteratedName or self.displayName
|
||||
end
|
||||
|
||||
if (enemy) then
|
||||
@@ -3282,12 +3295,12 @@ function Details:SetBarColors(bar, instance, r, g, b, a) --[[exported]] --~color
|
||||
end
|
||||
|
||||
if (instance.row_info.textL_class_colors) then
|
||||
local textColor_Red, textColor_Green, textColor_Blue = Details:GetTextColor(instance, self)
|
||||
local textColor_Red, textColor_Green, textColor_Blue = self:GetTextColor(instance, "left")
|
||||
bar.lineText1:SetTextColor(textColor_Red, textColor_Green, textColor_Blue) --the r, g, b color passed are the color used on the bar, so if the bar is not using class color, the text is painted with the fixed color for the bar
|
||||
end
|
||||
|
||||
if (instance.row_info.textR_class_colors) then
|
||||
local textColor_Red, textColor_Green, textColor_Blue = Details:GetTextColor(instance, self)
|
||||
local textColor_Red, textColor_Green, textColor_Blue = self:GetTextColor(instance, "right")
|
||||
bar.lineText2:SetTextColor(textColor_Red, textColor_Green, textColor_Blue)
|
||||
bar.lineText3:SetTextColor(textColor_Red, textColor_Green, textColor_Blue)
|
||||
bar.lineText4:SetTextColor(textColor_Red, textColor_Green, textColor_Blue)
|
||||
|
||||
@@ -1372,15 +1372,14 @@ function healingClass:ToolTip_HealingDone (instancia, numero, barra, keydown)
|
||||
|
||||
--TOP Curados
|
||||
ActorSkillsContainer = self.targets
|
||||
for target_name, amount in pairs(ActorSkillsContainer) do
|
||||
for targetName, amount in pairs(ActorSkillsContainer) do
|
||||
if (amount > 0) then
|
||||
|
||||
--translate cyrillic alphabet to western alphabet by Vardex (https://github.com/Vardex May 22, 2019)
|
||||
if (instancia.row_info.textL_translit_text) then
|
||||
target_name = Translit:Transliterate(target_name, "!")
|
||||
targetName = Translit:Transliterate(targetName, "!")
|
||||
end
|
||||
|
||||
tinsert(ActorHealingTargets, {target_name, amount, amount / ActorTotal * 100})
|
||||
tinsert(ActorHealingTargets, {targetName, amount, amount / ActorTotal * 100})
|
||||
end
|
||||
end
|
||||
_table_sort (ActorHealingTargets, _detalhes.Sort2)
|
||||
|
||||
+59
-29
@@ -574,55 +574,85 @@ function atributo_misc:ReportSingleDebuffUptimeLine (misc_actor, instance)
|
||||
return _detalhes:Reportar (report_table, {_no_current = true, _no_inverse = true, _custom = true})
|
||||
end
|
||||
|
||||
---index[1] is the death log
|
||||
---index[2] is the death time
|
||||
---index[3] is the name of the player
|
||||
---index[4] is the class of the player
|
||||
---index[5] is the max health
|
||||
---index[6] is the time of the fight as string
|
||||
---@field death boolean
|
||||
---@field last_cooldown table
|
||||
---@field dead_at number --combat time when the player died
|
||||
---@field spec number
|
||||
|
||||
---update a row in an instance (window) showing death logs
|
||||
---@param morte table
|
||||
---@param deathTable table
|
||||
---@param whichRowLine number
|
||||
---@param rankPosition number
|
||||
---@param instance table
|
||||
function atributo_misc:UpdateDeathRow(morte, whichRowLine, rankPosition, instance) --todo: change this function name
|
||||
morte["dead"] = true
|
||||
local thisRow = instance.barras[whichRowLine]
|
||||
---@param instanceObject table
|
||||
function atributo_misc:UpdateDeathRow(deathTable, whichRowLine, rankPosition, instanceObject) --todo: change this function name
|
||||
local playerName, playerClass, deathTime, deathCombatTime, deathTimeString, playerMaxHealth, deathEvents, lastCooldown, spec = Details:UnpackDeathTable(deathTable)
|
||||
|
||||
deathTable["dead"] = true
|
||||
local thisRow = instanceObject.barras[whichRowLine]
|
||||
|
||||
if (not thisRow) then
|
||||
print("DEBUG: problema com <instancia.esta_barra> "..whichRowLine.." "..rankPosition)
|
||||
return
|
||||
end
|
||||
|
||||
thisRow.minha_tabela = morte
|
||||
thisRow.minha_tabela = deathTable
|
||||
|
||||
morte.nome = morte[3] --void an issue while resizing the window
|
||||
morte.minha_barra = whichRowLine
|
||||
deathTable.nome = playerName
|
||||
deathTable.minha_barra = whichRowLine
|
||||
thisRow.colocacao = rankPosition
|
||||
|
||||
if (not getmetatable(morte)) then
|
||||
setmetatable(morte, {__call = RefreshBarraMorte})
|
||||
morte._custom = true
|
||||
if (not getmetatable(deathTable)) then
|
||||
setmetatable(deathTable, {__call = RefreshBarraMorte})
|
||||
deathTable._custom = true
|
||||
end
|
||||
|
||||
local bUseCustomLeftText = instanceObject.row_info.textL_enable_custom_text
|
||||
|
||||
local actorObject = instanceObject:GetCombat():GetContainer(DETAILS_ATTRIBUTE_MISC):GetActor(playerName)
|
||||
if (actorObject) then
|
||||
actorObject:SetBarLeftText(thisRow, instanceObject, false, false, false, bUseCustomLeftText)
|
||||
else
|
||||
Details:SetBarLeftText(thisRow, instanceObject, false, false, false, bUseCustomLeftText)
|
||||
end
|
||||
|
||||
if (instanceObject.row_info.textL_class_colors) then
|
||||
local textColor_Red, textColor_Green, textColor_Blue = actorObject:GetTextColor(instanceObject, "left")
|
||||
thisRow.lineText1:SetTextColor(textColor_Red, textColor_Green, textColor_Blue) --the r, g, b color passed are the color used on the bar, so if the bar is not using class color, the text is painted with the fixed color for the bar
|
||||
end
|
||||
|
||||
if (instanceObject.row_info.textR_class_colors) then
|
||||
local textColor_Red, textColor_Green, textColor_Blue = actorObject:GetTextColor(instanceObject, "right")
|
||||
thisRow.lineText4:SetTextColor(textColor_Red, textColor_Green, textColor_Blue) --the r, g, b color passed are the color used on the bar, so if the bar is not using class color, the text is painted with the fixed color for the bar
|
||||
end
|
||||
|
||||
thisRow.lineText1:SetText(rankPosition .. ". " .. morte[3]:gsub(("%-.*"), ""))
|
||||
thisRow.lineText2:SetText("")
|
||||
thisRow.lineText3:SetText("")
|
||||
thisRow.lineText4:SetText(morte[6])
|
||||
thisRow.lineText4:SetText(deathTimeString)
|
||||
|
||||
local r, g, b, a = actorObject:GetBarColor()
|
||||
actorObject:SetBarColors(thisRow, instanceObject, r, g, b, a)
|
||||
|
||||
thisRow:SetValue(100)
|
||||
if (thisRow.hidden or thisRow.fading_in or thisRow.faded) then
|
||||
Details.FadeHandler.Fader(thisRow, "out")
|
||||
end
|
||||
|
||||
--seta a cor da barra e a cor do texto caso eles esteja mostrando com a cor da classe
|
||||
local r, g, b, a = unpack(_detalhes.class_colors[morte[4]])
|
||||
_detalhes:SetBarColors(thisRow, instance, r, g, b, a)
|
||||
|
||||
if (instance.row_info.use_spec_icons) then
|
||||
local nome = morte[3]
|
||||
local spec = instance.showing (1, nome) and instance.showing (1, nome).spec or (instance.showing (2, nome) and instance.showing (2, nome).spec)
|
||||
if (instanceObject.row_info.use_spec_icons) then
|
||||
local nome = deathTable[3]
|
||||
local spec = instanceObject.showing (1, nome) and instanceObject.showing (1, nome).spec or (instanceObject.showing (2, nome) and instanceObject.showing (2, nome).spec)
|
||||
if (spec and spec ~= 0) then
|
||||
thisRow.icone_classe:SetTexture(instance.row_info.spec_file)
|
||||
thisRow.icone_classe:SetTexture(instanceObject.row_info.spec_file)
|
||||
thisRow.icone_classe:SetTexCoord(unpack(_detalhes.class_specs_coords[spec]))
|
||||
else
|
||||
if (CLASS_ICON_TCOORDS [morte[4]]) then
|
||||
thisRow.icone_classe:SetTexture(instance.row_info.icon_file)
|
||||
thisRow.icone_classe:SetTexCoord(unpack(CLASS_ICON_TCOORDS [morte[4]]))
|
||||
if (CLASS_ICON_TCOORDS [deathTable[4]]) then
|
||||
thisRow.icone_classe:SetTexture(instanceObject.row_info.icon_file)
|
||||
thisRow.icone_classe:SetTexCoord(unpack(CLASS_ICON_TCOORDS [deathTable[4]]))
|
||||
else
|
||||
local texture, l, r, t, b = Details:GetUnknownClassIcon()
|
||||
thisRow.icone_classe:SetTexture(texture)
|
||||
@@ -630,9 +660,9 @@ function atributo_misc:UpdateDeathRow(morte, whichRowLine, rankPosition, instanc
|
||||
end
|
||||
end
|
||||
else
|
||||
if (CLASS_ICON_TCOORDS [morte[4]]) then
|
||||
thisRow.icone_classe:SetTexture(instance.row_info.icon_file)
|
||||
thisRow.icone_classe:SetTexCoord(unpack(CLASS_ICON_TCOORDS [morte[4]]))
|
||||
if (CLASS_ICON_TCOORDS [deathTable[4]]) then
|
||||
thisRow.icone_classe:SetTexture(instanceObject.row_info.icon_file)
|
||||
thisRow.icone_classe:SetTexCoord(unpack(CLASS_ICON_TCOORDS [deathTable[4]]))
|
||||
else
|
||||
local texture, l, r, t, b = Details:GetUnknownClassIcon()
|
||||
thisRow.icone_classe:SetTexture(texture)
|
||||
@@ -642,8 +672,8 @@ function atributo_misc:UpdateDeathRow(morte, whichRowLine, rankPosition, instanc
|
||||
|
||||
thisRow.icone_classe:SetVertexColor(1, 1, 1)
|
||||
|
||||
if (thisRow.mouse_over and not instance.baseframe.isMoving) then --precisa atualizar o tooltip
|
||||
gump:UpdateTooltip (whichRowLine, thisRow, instance)
|
||||
if (thisRow.mouse_over and not instanceObject.baseframe.isMoving) then --precisa atualizar o tooltip
|
||||
gump:UpdateTooltip (whichRowLine, thisRow, instanceObject)
|
||||
end
|
||||
|
||||
thisRow.lineText1:SetSize(thisRow:GetWidth() - thisRow.lineText4:GetStringWidth() - 20, 15)
|
||||
|
||||
+9
-9
@@ -458,17 +458,17 @@
|
||||
---@return {key1: unixtime, key2: spellid}
|
||||
---@return specializationid specId
|
||||
function Details:UnpackDeathTable(deathTable)
|
||||
local deathevents = deathTable[1]
|
||||
local deathtime = deathTable[2]
|
||||
local playername = deathTable[3]
|
||||
local playerclass = deathTable[4]
|
||||
local playermaxhealth = deathTable[5]
|
||||
local deathtimestring = deathTable[6]
|
||||
local lastcooldown = deathTable.last_cooldown
|
||||
local deathcombattime = deathTable.dead_at
|
||||
local deathEvents = deathTable[1]
|
||||
local deathTime = deathTable[2]
|
||||
local playerName = deathTable[3]
|
||||
local playerClass = deathTable[4]
|
||||
local playerMaxHealth = deathTable[5]
|
||||
local deathTimeString = deathTable[6]
|
||||
local lastCooldown = deathTable.last_cooldown
|
||||
local deathCombatTime = deathTable.dead_at
|
||||
local spec = deathTable.spec
|
||||
|
||||
return playername, playerclass, deathtime, deathcombattime, deathtimestring, playermaxhealth, deathevents, lastcooldown, spec
|
||||
return playerName, playerClass, deathTime, deathCombatTime, deathTimeString, playerMaxHealth, deathEvents, lastCooldown, spec
|
||||
end
|
||||
|
||||
---get a random fraction number
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
|
||||
--old small window for the end of mythic plus runs
|
||||
|
||||
if (false and Details222.MythicPlus.Level and Details222.MythicPlus.Level < 28 and not Details.user_is_patreon_supporter) then
|
||||
--create the panel
|
||||
if (not mythicDungeonFrames.ReadyFrame) then
|
||||
mythicDungeonFrames.ReadyFrame = CreateFrame("frame", "DetailsMythicDungeonReadyFrame", UIParent, "BackdropTemplate")
|
||||
local readyFrame = mythicDungeonFrames.ReadyFrame
|
||||
|
||||
local textColor = {1, 0.8196, 0, 1}
|
||||
local textSize = 11
|
||||
|
||||
local roundedCornerTemplate = {
|
||||
roundness = 6,
|
||||
color = {.1, .1, .1, 0.98},
|
||||
border_color = {.05, .05, .05, 0.834},
|
||||
}
|
||||
|
||||
detailsFramework:AddRoundedCornersToFrame(readyFrame, roundedCornerTemplate)
|
||||
|
||||
local titleLabel = DetailsFramework:CreateLabel(readyFrame, "Details! Mythic Run Completed!", 12, "yellow")
|
||||
titleLabel:SetPoint("top", readyFrame, "top", 0, -7)
|
||||
titleLabel.textcolor = textColor
|
||||
|
||||
local closeButton = detailsFramework:CreateCloseButton(readyFrame, "$parentCloseButton")
|
||||
closeButton:SetPoint("topright", readyFrame, "topright", -2, -2)
|
||||
closeButton:SetScale(1.4)
|
||||
closeButton:SetAlpha(0.823)
|
||||
|
||||
readyFrame:SetSize(255, 120)
|
||||
readyFrame:SetPoint("center", UIParent, "center", 300, 0)
|
||||
readyFrame:SetFrameStrata("LOW")
|
||||
readyFrame:EnableMouse(true)
|
||||
readyFrame:SetMovable(true)
|
||||
--DetailsFramework:ApplyStandardBackdrop(readyFrame)
|
||||
--DetailsFramework:CreateTitleBar (readyFrame, "Details! Mythic Run Completed!")
|
||||
|
||||
readyFrame:Hide()
|
||||
|
||||
--register to libwindow
|
||||
local LibWindow = LibStub("LibWindow-1.1")
|
||||
LibWindow.RegisterConfig(readyFrame, Details.mythic_plus.finished_run_frame)
|
||||
LibWindow.RestorePosition(readyFrame)
|
||||
LibWindow.MakeDraggable(readyFrame)
|
||||
LibWindow.SavePosition(readyFrame)
|
||||
|
||||
--show button
|
||||
---@type df_button
|
||||
readyFrame.ShowChartButton = DetailsFramework:CreateButton(readyFrame, function() mythicDungeonCharts.ShowChart(); readyFrame:Hide() end, 80, 20, "Show Damage Graphic")
|
||||
readyFrame.ShowChartButton:SetTemplate(DetailsFramework:GetTemplate("button", "DETAILS_PLUGIN_BUTTON_TEMPLATE"))
|
||||
readyFrame.ShowChartButton:SetPoint("topleft", readyFrame, "topleft", 5, -30)
|
||||
readyFrame.ShowChartButton:SetIcon([[Interface\AddOns\Details\images\icons2.png]], 16, 16, "overlay", {42/512, 75/512, 153/512, 187/512}, {.7, .7, .7, 1}, nil, 0, 0)
|
||||
readyFrame.ShowChartButton.textcolor = textColor
|
||||
|
||||
--disable feature check box (dont show this again)
|
||||
local on_switch_enable = function(self, _, value)
|
||||
Details.mythic_plus.show_damage_graphic = not value
|
||||
end
|
||||
|
||||
local notAgainSwitch, notAgainLabel = DetailsFramework:CreateSwitch(readyFrame, on_switch_enable, not Details.mythic_plus.show_damage_graphic, _, _, _, _, _, _, _, _, _, Loc ["STRING_MINITUTORIAL_BOOKMARK4"], DetailsFramework:GetTemplate("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE"), "GameFontHighlightLeft")
|
||||
notAgainSwitch:ClearAllPoints()
|
||||
notAgainLabel:SetPoint("left", notAgainSwitch, "right", 2, 0)
|
||||
notAgainSwitch:SetPoint("bottomleft", readyFrame, "bottomleft", 5, 5)
|
||||
notAgainSwitch:SetAsCheckBox()
|
||||
notAgainLabel.textSize = textSize
|
||||
|
||||
local timeNotInCombatLabel = DetailsFramework:CreateLabel(readyFrame, "Time not in combat:", textSize, "orangered")
|
||||
timeNotInCombatLabel:SetPoint("bottomleft", notAgainSwitch, "topleft", 0, 7)
|
||||
local timeNotInCombatAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, "orangered")
|
||||
timeNotInCombatAmount:SetPoint("left", timeNotInCombatLabel, "left", 130, 0)
|
||||
|
||||
local elapsedTimeLabel = DetailsFramework:CreateLabel(readyFrame, "Run Time:", textSize, textColor)
|
||||
elapsedTimeLabel:SetPoint("bottomleft", timeNotInCombatLabel, "topleft", 0, 5)
|
||||
local elapsedTimeAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, textColor)
|
||||
elapsedTimeAmount:SetPoint("left", elapsedTimeLabel, "left", 130, 0)
|
||||
|
||||
readyFrame.TimeNotInCombatAmountLabel = timeNotInCombatAmount
|
||||
readyFrame.ElapsedTimeAmountLabel = elapsedTimeAmount
|
||||
end
|
||||
|
||||
mythicDungeonFrames.ReadyFrame:Show()
|
||||
|
||||
--update the run time and time not in combat
|
||||
local elapsedTime = Details222.MythicPlus.time or 1507
|
||||
mythicDungeonFrames.ReadyFrame.ElapsedTimeAmountLabel.text = DetailsFramework:IntegerToTimer(elapsedTime)
|
||||
|
||||
local overallMythicDungeonCombat = Details:GetCurrentCombat()
|
||||
if (overallMythicDungeonCombat:GetCombatType() == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_OVERALL) then
|
||||
local combatTime = overallMythicDungeonCombat:GetCombatTime()
|
||||
local notInCombat = elapsedTime - combatTime
|
||||
mythicDungeonFrames.ReadyFrame.TimeNotInCombatAmountLabel.text = DetailsFramework:IntegerToTimer(notInCombat) .. " (" .. math.floor(notInCombat / elapsedTime * 100) .. "%)"
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
@@ -20,8 +20,8 @@ local mythicDungeonCharts = Details222.MythicPlus.Charts.Listener
|
||||
local mythicDungeonFrames = Details222.MythicPlus.Frames
|
||||
|
||||
--debug
|
||||
--_G.DetailsMythicDungeonChartHandler = mythicDungeonCharts
|
||||
|
||||
_G.MythicDungeonFrames = mythicDungeonFrames
|
||||
--/run _G.MythicDungeonFrames.ShowEndOfMythicPlusPanel(true)
|
||||
|
||||
local createPlayerBanner = function(parent, name)
|
||||
local template = "ChallengeModeBannerPartyMemberTemplate"
|
||||
@@ -336,100 +336,6 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel(bIsDebug)
|
||||
Details222.MythicPlus.Level = Details222.MythicPlus.Level or 2
|
||||
end
|
||||
|
||||
--feature under development
|
||||
if (false and Details222.MythicPlus.Level and Details222.MythicPlus.Level < 28 and not Details.user_is_patreon_supporter) then
|
||||
--create the panel
|
||||
if (not mythicDungeonFrames.ReadyFrame) then
|
||||
mythicDungeonFrames.ReadyFrame = CreateFrame("frame", "DetailsMythicDungeonReadyFrame", UIParent, "BackdropTemplate")
|
||||
local readyFrame = mythicDungeonFrames.ReadyFrame
|
||||
|
||||
local textColor = {1, 0.8196, 0, 1}
|
||||
local textSize = 11
|
||||
|
||||
local roundedCornerTemplate = {
|
||||
roundness = 6,
|
||||
color = {.1, .1, .1, 0.98},
|
||||
border_color = {.05, .05, .05, 0.834},
|
||||
}
|
||||
|
||||
detailsFramework:AddRoundedCornersToFrame(readyFrame, roundedCornerTemplate)
|
||||
|
||||
local titleLabel = DetailsFramework:CreateLabel(readyFrame, "Details! Mythic Run Completed!", 12, "yellow")
|
||||
titleLabel:SetPoint("top", readyFrame, "top", 0, -7)
|
||||
titleLabel.textcolor = textColor
|
||||
|
||||
local closeButton = detailsFramework:CreateCloseButton(readyFrame, "$parentCloseButton")
|
||||
closeButton:SetPoint("topright", readyFrame, "topright", -2, -2)
|
||||
closeButton:SetScale(1.4)
|
||||
closeButton:SetAlpha(0.823)
|
||||
|
||||
readyFrame:SetSize(255, 120)
|
||||
readyFrame:SetPoint("center", UIParent, "center", 300, 0)
|
||||
readyFrame:SetFrameStrata("LOW")
|
||||
readyFrame:EnableMouse(true)
|
||||
readyFrame:SetMovable(true)
|
||||
--DetailsFramework:ApplyStandardBackdrop(readyFrame)
|
||||
--DetailsFramework:CreateTitleBar (readyFrame, "Details! Mythic Run Completed!")
|
||||
|
||||
readyFrame:Hide()
|
||||
|
||||
--register to libwindow
|
||||
local LibWindow = LibStub("LibWindow-1.1")
|
||||
LibWindow.RegisterConfig(readyFrame, Details.mythic_plus.mythicrun_chart_frame_ready)
|
||||
LibWindow.RestorePosition(readyFrame)
|
||||
LibWindow.MakeDraggable(readyFrame)
|
||||
LibWindow.SavePosition(readyFrame)
|
||||
|
||||
--show button
|
||||
---@type df_button
|
||||
readyFrame.ShowChartButton = DetailsFramework:CreateButton(readyFrame, function() mythicDungeonCharts.ShowChart(); readyFrame:Hide() end, 80, 20, "Show Damage Graphic")
|
||||
readyFrame.ShowChartButton:SetTemplate(DetailsFramework:GetTemplate("button", "DETAILS_PLUGIN_BUTTON_TEMPLATE"))
|
||||
readyFrame.ShowChartButton:SetPoint("topleft", readyFrame, "topleft", 5, -30)
|
||||
readyFrame.ShowChartButton:SetIcon([[Interface\AddOns\Details\images\icons2.png]], 16, 16, "overlay", {42/512, 75/512, 153/512, 187/512}, {.7, .7, .7, 1}, nil, 0, 0)
|
||||
readyFrame.ShowChartButton.textcolor = textColor
|
||||
|
||||
--disable feature check box (dont show this again)
|
||||
local on_switch_enable = function(self, _, value)
|
||||
Details.mythic_plus.show_damage_graphic = not value
|
||||
end
|
||||
|
||||
local notAgainSwitch, notAgainLabel = DetailsFramework:CreateSwitch(readyFrame, on_switch_enable, not Details.mythic_plus.show_damage_graphic, _, _, _, _, _, _, _, _, _, Loc ["STRING_MINITUTORIAL_BOOKMARK4"], DetailsFramework:GetTemplate("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE"), "GameFontHighlightLeft")
|
||||
notAgainSwitch:ClearAllPoints()
|
||||
notAgainLabel:SetPoint("left", notAgainSwitch, "right", 2, 0)
|
||||
notAgainSwitch:SetPoint("bottomleft", readyFrame, "bottomleft", 5, 5)
|
||||
notAgainSwitch:SetAsCheckBox()
|
||||
notAgainLabel.textSize = textSize
|
||||
|
||||
local timeNotInCombatLabel = DetailsFramework:CreateLabel(readyFrame, "Time not in combat:", textSize, "orangered")
|
||||
timeNotInCombatLabel:SetPoint("bottomleft", notAgainSwitch, "topleft", 0, 7)
|
||||
local timeNotInCombatAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, "orangered")
|
||||
timeNotInCombatAmount:SetPoint("left", timeNotInCombatLabel, "left", 130, 0)
|
||||
|
||||
local elapsedTimeLabel = DetailsFramework:CreateLabel(readyFrame, "Run Time:", textSize, textColor)
|
||||
elapsedTimeLabel:SetPoint("bottomleft", timeNotInCombatLabel, "topleft", 0, 5)
|
||||
local elapsedTimeAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, textColor)
|
||||
elapsedTimeAmount:SetPoint("left", elapsedTimeLabel, "left", 130, 0)
|
||||
|
||||
readyFrame.TimeNotInCombatAmountLabel = timeNotInCombatAmount
|
||||
readyFrame.ElapsedTimeAmountLabel = elapsedTimeAmount
|
||||
end
|
||||
|
||||
mythicDungeonFrames.ReadyFrame:Show()
|
||||
|
||||
--update the run time and time not in combat
|
||||
local elapsedTime = Details222.MythicPlus.time or 1507
|
||||
mythicDungeonFrames.ReadyFrame.ElapsedTimeAmountLabel.text = DetailsFramework:IntegerToTimer(elapsedTime)
|
||||
|
||||
local overallMythicDungeonCombat = Details:GetCurrentCombat()
|
||||
if (overallMythicDungeonCombat:GetCombatType() == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_OVERALL) then
|
||||
local combatTime = overallMythicDungeonCombat:GetCombatTime()
|
||||
local notInCombat = elapsedTime - combatTime
|
||||
mythicDungeonFrames.ReadyFrame.TimeNotInCombatAmountLabel.text = DetailsFramework:IntegerToTimer(notInCombat) .. " (" .. math.floor(notInCombat / elapsedTime * 100) .. "%)"
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
--create the panel
|
||||
if (not mythicDungeonFrames.ReadyFrame) then
|
||||
mythicDungeonFrames.ReadyFrame = CreateFrame("frame", "DetailsMythicDungeonReadyFrame", UIParent, "BackdropTemplate")
|
||||
@@ -457,7 +363,7 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel(bIsDebug)
|
||||
closeButton:SetAlpha(0.823)
|
||||
|
||||
readyFrame:SetSize(355, 390)
|
||||
readyFrame:SetPoint("center", UIParent, "center", 300, 0)
|
||||
readyFrame:SetPoint("center", UIParent, "center", 350, 0)
|
||||
readyFrame:SetFrameStrata("LOW")
|
||||
readyFrame:EnableMouse(true)
|
||||
readyFrame:SetMovable(true)
|
||||
@@ -465,11 +371,60 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel(bIsDebug)
|
||||
|
||||
--register to libwindow
|
||||
local LibWindow = LibStub("LibWindow-1.1")
|
||||
LibWindow.RegisterConfig(readyFrame, Details.mythic_plus.mythicrun_chart_frame_ready)
|
||||
LibWindow.RegisterConfig(readyFrame, Details.mythic_plus.finished_run_frame)
|
||||
LibWindow.RestorePosition(readyFrame)
|
||||
LibWindow.MakeDraggable(readyFrame)
|
||||
LibWindow.SavePosition(readyFrame)
|
||||
|
||||
--waiting for loot label
|
||||
local waitingForLootLabel = DetailsFramework:CreateLabel(readyFrame, "Waiting for loot", 12, "silver")
|
||||
waitingForLootLabel:SetPoint("bottom", readyFrame, "bottom", 0, 54)
|
||||
waitingForLootLabel:Hide()
|
||||
local waitingForLootDotsAnimationLabel = DetailsFramework:CreateLabel(readyFrame, "...", 12, "silver")
|
||||
waitingForLootDotsAnimationLabel:SetPoint("left", waitingForLootLabel, "right", 0, 0)
|
||||
waitingForLootDotsAnimationLabel:Hide()
|
||||
|
||||
--make a text dot animation, which will show no dots at start and then "." then ".." then "..." and back to "" and so on
|
||||
function readyFrame.StartTextDotAnimation()
|
||||
--update the Waiting for Loot labels
|
||||
waitingForLootLabel:Show()
|
||||
waitingForLootDotsAnimationLabel:Show()
|
||||
|
||||
local dots = waitingForLootDotsAnimationLabel
|
||||
local dotsCount = 0
|
||||
local maxDots = 3
|
||||
local maxLoops = 24
|
||||
|
||||
local dotsTimer = C_Timer.NewTicker(0.5, function()
|
||||
dotsCount = dotsCount + 1
|
||||
|
||||
if (dotsCount > maxDots) then
|
||||
dotsCount = 0
|
||||
end
|
||||
|
||||
local dotsText = ""
|
||||
for i = 1, dotsCount do
|
||||
dotsText = dotsText .. "."
|
||||
end
|
||||
|
||||
dots:SetText(dotsText)
|
||||
end, maxLoops)
|
||||
|
||||
waitingForLootDotsAnimationLabel.dotsTimer = dotsTimer
|
||||
end
|
||||
|
||||
function readyFrame.StopTextDotAnimation()
|
||||
waitingForLootLabel:Hide()
|
||||
waitingForLootDotsAnimationLabel:Hide()
|
||||
if (waitingForLootDotsAnimationLabel.dotsTimer) then
|
||||
waitingForLootDotsAnimationLabel.dotsTimer:Cancel()
|
||||
end
|
||||
end
|
||||
|
||||
readyFrame:SetScript("OnHide", function(self)
|
||||
readyFrame.StopTextDotAnimation()
|
||||
end)
|
||||
|
||||
--warning footer
|
||||
local warningFooter = DetailsFramework:CreateLabel(readyFrame, "Under development.", 9, "yellow")
|
||||
warningFooter:SetPoint("bottom", readyFrame, "bottom", 0, 20)
|
||||
@@ -590,13 +545,14 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel(bIsDebug)
|
||||
--print("equip loc:", itemEquipLoc)
|
||||
|
||||
if (effectiveILvl > 300) then --avoid showing loot that isn't items
|
||||
|
||||
local rarityColor = ITEM_QUALITY_COLORS[itemQuality]
|
||||
lootSquare.LootIconBorder:SetVertexColor(rarityColor.r, rarityColor.g, rarityColor.b, 1)
|
||||
|
||||
lootSquare.LootIcon:SetTexture(GetItemIcon(itemID))
|
||||
lootSquare.LootItemLevel:SetText(effectiveILvl or "0")
|
||||
|
||||
readyFrame.StopTextDotAnimation()
|
||||
|
||||
--print("loot info:", itemLink, effectiveILvl, itemQuality)
|
||||
lootSquare:Show()
|
||||
end
|
||||
@@ -637,11 +593,15 @@ function mythicDungeonFrames.ShowEndOfMythicPlusPanel(bIsDebug)
|
||||
readyFrame.YouBeatTheTimerLabel = youBeatTheTimerLabel
|
||||
readyFrame.KeystoneUpgradeLabel = keystoneUpgradeLabel
|
||||
readyFrame.RantingLabel = rantingLabel
|
||||
end
|
||||
end --end of creating of the readyFrame
|
||||
|
||||
--mythic+ finished, showing the readyFrame for the user
|
||||
|
||||
local readyFrame = mythicDungeonFrames.ReadyFrame
|
||||
readyFrame:Show()
|
||||
|
||||
readyFrame.StartTextDotAnimation()
|
||||
|
||||
for i = 1, #readyFrame.PlayerBanners do
|
||||
--hide the lootSquare
|
||||
readyFrame.PlayerBanners[i].LootSquare:Hide()
|
||||
|
||||
@@ -1606,7 +1606,7 @@ local default_global_data = {
|
||||
last_mythicrun_chart = {},
|
||||
mythicrun_chart_frame = {},
|
||||
mythicrun_chart_frame_minimized = {},
|
||||
mythicrun_chart_frame_ready = {},
|
||||
finished_run_frame = {}, --end of mythic+ panel
|
||||
|
||||
mythicrun_time_type = 1, --1: combat time (the amount of time the player is in combat) 2: run time (the amount of time it took to finish the mythic+ run)
|
||||
}, --implementar esse time_type quando estiver dando refresh na janela
|
||||
@@ -2003,7 +2003,7 @@ function Details:ImportProfile (profileString, newProfileName, bImportAutoRunCod
|
||||
mythicPlusSettings.last_mythicrun_chart = {}
|
||||
mythicPlusSettings.mythicrun_chart_frame = {}
|
||||
mythicPlusSettings.mythicrun_chart_frame_minimized = {}
|
||||
mythicPlusSettings.mythicrun_chart_frame_ready = {}
|
||||
mythicPlusSettings.finished_run_frame = {}
|
||||
|
||||
--make the max amount of segments be 30
|
||||
Details.segments_amount = 40
|
||||
|
||||
Reference in New Issue
Block a user