local _ local addonName, platerInternal = ... --performance units are saved at account level, they aren't exported within a profile export --backwards compatibility with code that add performance units before plater loads its database local performanceUnitsAddedBeforeDBLoad = {} platerInternal.PERF_UNIT_OVERRIDES_BIT = { -- disable if this flag is set! ["THREAT"] = 0x1, ["CAST"] = 0x2, ["AURA"] = 0x4, } platerInternal.PERF_UNIT_OVERRIDES_BITS_ALL = 0 for _, flag in pairs(platerInternal.PERF_UNIT_OVERRIDES_BIT) do platerInternal.PERF_UNIT_OVERRIDES_BITS_ALL = bit.bor(platerInternal.PERF_UNIT_OVERRIDES_BITS_ALL, flag) end Plater.PERF_UNIT_OVERRIDES_BIT = platerInternal.PERF_UNIT_OVERRIDES_BIT Plater.PERF_UNIT_OVERRIDES_BITS_ALL = platerInternal.PERF_UNIT_OVERRIDES_BITS_ALL Plater.AddPerformanceUnits = function(npcID, overrideFlags) if (type(npcID) == "number") then performanceUnitsAddedBeforeDBLoad[npcID] = bit.bor(tonumber(performanceUnitsAddedBeforeDBLoad[npcID]) or 0, tonumber(overrideFlags) or 0) end end Plater.RemovePerformanceUnits = function(npcID) if (type(npcID) == "number") then performanceUnitsAddedBeforeDBLoad[npcID] = nil end end Plater.PerformanceUnitsSetOverride = function(npcID, overrideFlags) if (type(npcID) == "number") then performanceUnitsAddedBeforeDBLoad[npcID] = bit.bor(tonumber(performanceUnitsAddedBeforeDBLoad[npcID]) or 0, tonumber(overrideFlags) or 0) end end Plater.PerformanceUnitsRemoveOverride = function(npcID, overrideFlags) if (type(npcID) == "number") then performanceUnitsAddedBeforeDBLoad[npcID] = bit.band(tonumber(performanceUnitsAddedBeforeDBLoad[npcID]) or 0, bit.bxor(platerInternal.PERF_UNIT_OVERRIDES_BITS_ALL, tonumber(overrideFlags) or 0)) end end Plater.PerformanceUnitsGetOverride = function(npcID, overrideFlags) if (type(npcID) == "number") then return bit.band(tonumber(performanceUnitsAddedBeforeDBLoad[npcID]) or 0, bit.band(platerInternal.PERF_UNIT_OVERRIDES_BITS_ALL, tonumber(overrideFlags) or 0)) end end function platerInternal.CreatePerformanceUnits(Plater) --store npcIds for npcs which flood the screen with nameplates and can be quickly processed --search .isPerformanceUnit for locations where there code for improve performance --unitFrame.isPerformanceUnit healthBar.isPerformanceUnit local perfUnits = PlaterDB.performance_units --list of default performance units, being in this list means they are added everytime Plater loads perfUnits[189707] = perfUnits[189707] == nil and true or perfUnits[189707] --chaotic essence (shadowlands season 4 raid affixes) --these are the multiple spawns from the above perfUnits[167999] = perfUnits[167999] == nil and true or perfUnits[167999] --Echo of Sin (shadowlands, Castle Nathria, Sire Denathrius) perfUnits[176920] = perfUnits[176920] == nil and true or perfUnits[176920] --Domination Arrow (shadowlands, Sanctum of Domination, Sylvanas) perfUnits[196642] = perfUnits[196642] == nil and true or perfUnits[196642] --Hungry Lasher (dragonflight, Algeth'ar Academy, Overgrown Ancient) perfUnits[211306] = perfUnits[211306] == nil and true or perfUnits[211306] --Fiery Vines (dragonflight, Amirdrassil, Tindral Sageswift) perfUnits[214441] = perfUnits[214441] == nil and true or perfUnits[214441] --Scorched Treant (dragonflight, Amirdrassil, Tindral Sageswift) perfUnits[219746] = perfUnits[219746] == nil and true or perfUnits[219746] --Silken Tomb (TWW, Nerub-ar Palace, Queen Ansurek) perfUnits[220626] = perfUnits[220626] == nil and true or perfUnits[220626] --Blood Parasite (TWW, Nerub-ar Palace, Broodtwister Ovi'nax) --transfer npcs ids directly added into Plater.PerformanceUnits table before Plater.OnInit() call for npcId in pairs(Plater.PerformanceUnits) do perfUnits[npcId] = true end --add the npc ids added before plater db loads through API calls for npcId, value in pairs(performanceUnitsAddedBeforeDBLoad) do perfUnits[npcId] = value end Plater.PerformanceUnits = perfUnits --setter Plater.AddPerformanceUnits = function (npcID, overrideFlags) if type(npcID) == "number" then Plater.PerformanceUnits[npcID] = bit.bor(tonumber(Plater.PerformanceUnits[npcID]) or 0, tonumber(overrideFlags) or 0) end end Plater.RemovePerformanceUnits = function (npcID) if type(npcID) == "number" then Plater.PerformanceUnits[npcID] = false end end Plater.PerformanceUnitsSetOverride = function(npcID, overrideFlags) if (type(npcID) == "number") then Plater.PerformanceUnits[npcID] = bit.bor(tonumber(Plater.PerformanceUnits[npcID]) or 0, tonumber(overrideFlags) or 0) end end Plater.PerformanceUnitsRemoveOverride = function(npcID, overrideFlags) if (type(npcID) == "number") then Plater.PerformanceUnits[npcID] = bit.band(tonumber(Plater.PerformanceUnits[npcID]) or 0, bit.bxor(platerInternal.PERF_UNIT_OVERRIDES_BITS_ALL, tonumber(overrideFlags) or 0)) end end Plater.PerformanceUnitsGetOverride = function(npcID, overrideFlags) if (type(npcID) == "number") then return bit.band(tonumber(Plater.PerformanceUnits[npcID]) or 0, bit.band(platerInternal.PERF_UNIT_OVERRIDES_BITS_ALL, tonumber(overrideFlags) or 0)) end end end