You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
11 KiB
239 lines
11 KiB
|
|
local Plater = _G.Plater
|
|
local C_Timer = _G.C_Timer
|
|
local addonName, platerInternal = ...
|
|
|
|
---@type detailsframework
|
|
local DF = DetailsFramework
|
|
|
|
local MEMBER_UNITID = "namePlateUnitToken"
|
|
|
|
local GetSpellInfo = GetSpellInfo or function(spellID) if not spellID then return nil end local si = C_Spell.GetSpellInfo(spellID) if si then return si.name, nil, si.iconID, si.castTime, si.minRange, si.maxRange, si.spellID, si.originalIconID end end
|
|
|
|
function Plater.DebugNameplate()
|
|
return Plater.DebugTargetNameplate()
|
|
end
|
|
|
|
function Plater.DebugTargetNameplate()
|
|
local plateFrame = C_NamePlate.GetNamePlateForUnit("target", issecure())
|
|
if (plateFrame) then
|
|
if (not _G.FrameInspect) then
|
|
Plater:Msg("Please install FrameInspect addon to use this function.")
|
|
return
|
|
end
|
|
_G.FrameInspect.Inspect(plateFrame)
|
|
else
|
|
Plater:Msg("You don't have a target or the nameplate is protected.")
|
|
return
|
|
end
|
|
end
|
|
|
|
---open the options panel and select the cast colors tab
|
|
---searchString is optional, if provided, it will be used to search for a spellId, npcId, spellName, npcName, zoneName, sound name, and encounterName.
|
|
---@param searchString string
|
|
---@return nil
|
|
function Plater.OpenCastColorsPanel(searchString)
|
|
--ColorFrame
|
|
Plater.OpenOptionsPanel(platerInternal.CastColorsFrameIndex)
|
|
|
|
--due to lazy loading, the panel might not be loaded yet
|
|
local castColorFrame = PlaterOptionsPanelContainerCastColorManagementColorFrame
|
|
if (not castColorFrame) then
|
|
C_Timer.After(platerInternal.CastColorsCreationDelay + 0.1, function()
|
|
Plater.OpenOptionsPanel(platerInternal.CastColorsFrameIndex)
|
|
castColorFrame = PlaterOptionsPanelContainerCastColorManagementColorFrame
|
|
castColorFrame.AuraSearchTextEntry:SetText(searchString)
|
|
castColorFrame.OnSearchBoxTextChanged()
|
|
end)
|
|
else
|
|
castColorFrame.AuraSearchTextEntry:SetText(searchString)
|
|
castColorFrame.OnSearchBoxTextChanged()
|
|
end
|
|
end
|
|
|
|
function Plater.OpenNpcColorsPanel(searchString) --/run Plater.OpenNpcColorsPanel("")
|
|
Plater.OpenOptionsPanel(platerInternal.NpcColorsFrameIndex)
|
|
|
|
--due to lazy loading, the panel might not be loaded yet
|
|
local npcColorFrame = PlaterOptionsPanelContainerColorManagement
|
|
Plater.OpenOptionsPanel(platerInternal.NpcColorsFrameIndex, true)
|
|
|
|
--first time loading the options panel
|
|
if (not npcColorFrame.AuraSearchTextEntry) then
|
|
C_Timer.After(0.25, function()
|
|
npcColorFrame.AuraSearchTextEntry:SetText(searchString)
|
|
npcColorFrame.OnSearchBoxTextChanged()
|
|
end)
|
|
else
|
|
npcColorFrame.AuraSearchTextEntry:SetText(searchString)
|
|
npcColorFrame.OnSearchBoxTextChanged()
|
|
end
|
|
--C_Timer.After(0, function() Plater.OpenOptionsPanel(platerInternal.NpcColorsFrameIndex) print("selected tab") end)
|
|
end
|
|
|
|
function platerInternal.InstallMDTHooks()
|
|
--first check if Mythic Dungeon Tools is installed
|
|
if (not MDT) then
|
|
return
|
|
end
|
|
|
|
--this function open the plater options panel and search for the npcId under the tab 'Npc Color and Names'
|
|
local fSeeNpcOnPlater = function(self, fixedParameter, npcId)
|
|
Plater.OpenNpcColorsPanel(npcId)
|
|
end
|
|
|
|
--this function open the plater options panel and search for the spellId under the tab 'Cast Color and Names'
|
|
local fSeeSpellOnPlater = function(self, fixedParameter, spellId)
|
|
Plater.OpenCastColorsPanel(spellId)
|
|
end
|
|
|
|
if (not MDT.UpdateEnemyInfoFrame) then
|
|
return
|
|
end
|
|
|
|
hooksecurefunc(MDT, "UpdateEnemyInfoFrame", function()
|
|
local midContainerChildren = MDT.EnemyInfoFrame and MDT.EnemyInfoFrame.midContainer and MDT.EnemyInfoFrame.midContainer.children
|
|
if (midContainerChildren) then
|
|
for i = 1, #midContainerChildren do
|
|
local containerFrame = midContainerChildren[i]
|
|
if (containerFrame.idEditBox) then
|
|
if (not containerFrame.GoToPlaterButton) then
|
|
containerFrame.GoToPlaterButton = DF:CreateButton(containerFrame.frame, fSeeNpcOnPlater, 1, 1, "")
|
|
containerFrame.GoToPlaterButton.tooltip = "Setup this npc on Plater"
|
|
--DF:ApplyStandardBackdrop(containerFrame.GoToPlaterButton) --debug button size
|
|
--DF:ApplyStandardBackdrop(containerFrame.frame) --debug container size
|
|
--DF:DebugVisibility(containerFrame.frame)
|
|
end
|
|
|
|
local npcId = containerFrame.idEditBox:GetText()
|
|
npcId = tonumber(npcId)
|
|
if (npcId and npcId > 1) then
|
|
containerFrame.GoToPlaterButton.param1 = npcId
|
|
--/dump MDT.EnemyInfoFrame.midContainer.children[2].healthEditBox
|
|
|
|
local point1 = Plater.MDTSettings.enemyinfo_button_point
|
|
containerFrame.GoToPlaterButton:ClearAllPoints()
|
|
containerFrame.GoToPlaterButton:SetPoint(point1[1], containerFrame.frame, point1[2], point1[3], point1[4])
|
|
containerFrame.GoToPlaterButton:SetSize(Plater.MDTSettings.button_width, Plater.MDTSettings.button_height)
|
|
containerFrame.GoToPlaterButton:SetIcon(Plater.MDTSettings.icon_texture, Plater.MDTSettings.button_width, Plater.MDTSettings.button_height, "overlay", Plater.MDTSettings.icon_coords)
|
|
containerFrame.GoToPlaterButton:SetAlpha(Plater.MDTSettings.alpha)
|
|
else
|
|
containerFrame.GoToPlaterButton:Hide()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--MDT spells info section
|
|
local spellScrollChildren = MDT.EnemyInfoFrame and MDT.EnemyInfoFrame.spellScroll and MDT.EnemyInfoFrame.spellScroll.children --.children is an array of tables, each table has a frame and a spellId
|
|
if (spellScrollChildren) then
|
|
for i = 1, #spellScrollChildren do
|
|
---@type table
|
|
local spellFrameTable = spellScrollChildren[i]
|
|
if (spellFrameTable) then
|
|
local spellButton = spellFrameTable.frame
|
|
local spellId = spellFrameTable.spellId
|
|
|
|
local _, _, _, castTime = GetSpellInfo(spellId or 1)
|
|
|
|
if (castTime and castTime > 0) then
|
|
if (not spellButton.GoToPlaterButton) then
|
|
spellButton.GoToPlaterButton = DF:CreateButton(spellButton, fSeeSpellOnPlater, 1, 1, "", spellId)
|
|
spellButton.GoToPlaterButton.tooltip = "Setup this spell on Plater"
|
|
--DF:ApplyStandardBackdrop(spellButton.GoToPlaterButton) --debug button size
|
|
end
|
|
|
|
spellButton.GoToPlaterButton.param1 = spellId
|
|
local point1 = Plater.MDTSettings.spellinfo_button_point
|
|
spellButton.GoToPlaterButton:ClearAllPoints()
|
|
spellButton.GoToPlaterButton:SetPoint(point1[1], spellButton, point1[2], point1[3], point1[4])
|
|
spellButton.GoToPlaterButton:SetSize(Plater.MDTSettings.button_width, Plater.MDTSettings.button_height)
|
|
spellButton.GoToPlaterButton:SetIcon(Plater.MDTSettings.icon_texture, Plater.MDTSettings.button_width, Plater.MDTSettings.button_height, "overlay", Plater.MDTSettings.icon_coords)
|
|
spellButton.GoToPlaterButton:SetAlpha(Plater.MDTSettings.alpha)
|
|
else
|
|
if (spellButton.GoToPlaterButton) then
|
|
spellButton.GoToPlaterButton:Hide()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
--> debuggers ~debug
|
|
|
|
function Plater.DebugColorAnimation()
|
|
if (Plater.DebugColorAnimation_Timer) then
|
|
return
|
|
end
|
|
|
|
Plater.DebugColorAnimation_Timer = C_Timer.NewTicker (0.5, function() --~animationtest
|
|
for _, plateFrame in ipairs (Plater.GetAllShownPlates()) do
|
|
--make the bar jump from green to pink - pink to green
|
|
Plater.ChangeHealthBarColor_Internal (plateFrame.unitFrame.healthBar, abs (math.sin (GetTime())), abs (math.cos (GetTime())), abs (math.sin (GetTime())), 1)
|
|
end
|
|
end)
|
|
|
|
C_Timer.After (10, function()
|
|
if (Plater.DebugColorAnimation_Timer) then
|
|
Plater.DebugColorAnimation_Timer:Cancel()
|
|
Plater.DebugColorAnimation_Timer = nil
|
|
Plater:Msg ("stopped the animation test.")
|
|
Plater.UpdateAllPlates()
|
|
end
|
|
end)
|
|
|
|
Plater:Msg ("is now animating color nameplates in your screen for test purposes.")
|
|
end
|
|
|
|
function Plater.DebugHealthAnimation()
|
|
if (Plater.DebugHealthAnimation_Timer) then
|
|
return
|
|
end
|
|
|
|
Plater.DebugHealthAnimation_Timer = C_Timer.NewTicker (1.5, function() --~animationtest
|
|
for _, plateFrame in ipairs (Plater.GetAllShownPlates()) do
|
|
local self = plateFrame.unitFrame
|
|
|
|
if self and self.PlaterOnScreen then
|
|
|
|
if (self.healthBar.CurrentHealth == 0) then
|
|
self.healthBar.AnimationStart = 0
|
|
self.healthBar.AnimationEnd = UnitHealthMax(self [MEMBER_UNITID])
|
|
else
|
|
self.healthBar.AnimationStart = UnitHealthMax(self [MEMBER_UNITID])
|
|
self.healthBar.AnimationEnd = 0
|
|
end
|
|
|
|
self.healthBar:SetValue (self.healthBar.CurrentHealth)
|
|
self.healthBar.CurrentHealthMax = UnitHealthMax(self [MEMBER_UNITID])
|
|
|
|
self.healthBar.IsAnimating = true
|
|
|
|
if (self.healthBar.AnimationEnd > self.healthBar.AnimationStart) then
|
|
self.healthBar.AnimateFunc = Plater.AnimateRightWithAccel
|
|
else
|
|
self.healthBar.AnimateFunc = Plater.AnimateLeftWithAccel
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
end)
|
|
|
|
C_Timer.After (10, function()
|
|
if (Plater.DebugHealthAnimation_Timer) then
|
|
Plater.DebugHealthAnimation_Timer:Cancel()
|
|
Plater.DebugHealthAnimation_Timer = nil
|
|
Plater:Msg ("stopped the animation test.")
|
|
Plater.UpdateAllPlates()
|
|
end
|
|
end)
|
|
|
|
Plater:Msg ("is now animating nameplates in your screen for test purposes.")
|
|
end
|