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

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