mirror of
https://github.com/brues-code/pfUI.git
synced 2026-09-27 18:06:02 +00:00
New throttling menu
New throttling menu
This commit is contained in:
@@ -12,6 +12,13 @@ This version includes significant performance improvements, DLL-enhanced feature
|
||||
|
||||
> **Looking for TBC support?** Visit the original pfUI by Shagu: [https://github.com/shagu/pfUI](https://github.com/shagu/pfUI)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 What's New in Version 7.6.1 (February 6, 2026)
|
||||
- Added a new menu in /pfui named "Throttling" - Players who were unsatisfied with the throggling update rate can change it now for nameplates, Toolip Cursor and Chat Tab.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 What's New in Version 7.6.0 (February 3, 2026)
|
||||
|
||||
### 🚀 Centralized Cast-Bar Tracking System (libdebuff.lua + nameplates.lua)
|
||||
|
||||
@@ -712,6 +712,8 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("tooltip", nil, "font_tooltip", "Interface\\AddOns\\pfUI\\fonts\\Myriad-Pro.ttf")
|
||||
pfUI:UpdateConfig("tooltip", nil, "font_tooltip_size", "12")
|
||||
|
||||
-- Throttle Settings
|
||||
|
||||
pfUI:UpdateConfig("chat", "text", "input_width", "0")
|
||||
pfUI:UpdateConfig("chat", "text", "input_height", "0")
|
||||
pfUI:UpdateConfig("chat", "text", "outline", "1")
|
||||
|
||||
+2
-2
@@ -1395,7 +1395,7 @@ function pfUI.uf.OnUpdate()
|
||||
-- update combat feedback (no throttle - needs immediate feedback)
|
||||
if this.feedbackText then CombatFeedback_OnUpdate(arg1) end
|
||||
|
||||
-- Throttle raid/party frames for performance (10 updates/sec)
|
||||
-- Throttle raid/party frames for performance
|
||||
if this.label == "raid" or this.label == "party" then
|
||||
if (this.throttleTick or 0) > now then
|
||||
if pfUI.uf.stats and pfUI.uf.stats.enabled then
|
||||
@@ -1403,7 +1403,7 @@ function pfUI.uf.OnUpdate()
|
||||
end
|
||||
return
|
||||
end
|
||||
this.throttleTick = now + 0.1
|
||||
this.throttleTick = now + 0.1 -- Default: 10 FPS
|
||||
end
|
||||
|
||||
-- ============================================================================
|
||||
|
||||
Vendored
+32
@@ -878,4 +878,36 @@ pfUI_translation["deDE"] = {
|
||||
["Zonetime"] = nil,
|
||||
["Zoom & Fade"] = nil,
|
||||
["Zoom Target Nameplate"] = nil,
|
||||
|
||||
-- Throttling translations
|
||||
["Throttling"] = "Drosselung",
|
||||
["Nameplates"] = "Namensplaketten",
|
||||
["Tooltips"] = "Tooltips",
|
||||
["Chat Tab"] = "Chat Tab",
|
||||
["Libpredict"] = "Libpredict",
|
||||
["Panel Alignment"] = "Panel Ausrichtung",
|
||||
["Nameplate Update Rate"] = "Namensplaketten Aktualisierungsrate",
|
||||
["Target/Casting Plates"] = "Ziel/Cast Plaketten",
|
||||
["Normal Plates"] = "Normale Plaketten",
|
||||
["Mass Pulls (20+ Plates)"] = "Große Pulls (20+ Plaketten)",
|
||||
["Tooltip Update Rate"] = "Tooltip Aktualisierungsrate",
|
||||
["Cursor Follow"] = "Cursor Folgen",
|
||||
["Health/Status Bar"] = "Leben/Status Leiste",
|
||||
["Unit Frame Update Rate"] = "Einheiten Frame Aktualisierungsrate",
|
||||
["Raid/Party Frames"] = "Raid/Gruppe Frames",
|
||||
["Player Frame"] = "Spieler Frame",
|
||||
["Chat Tab Hover Check"] = "Chat Tab Hover Prüfung",
|
||||
["Heal Prediction Cleanup"] = "Heilvorhersage Bereinigung",
|
||||
["Panel Alignment Check"] = "Panel Ausrichtungsprüfung",
|
||||
["Custom FPS"] = "Benutzerdefiniert FPS",
|
||||
["Very Slow"] = "Sehr Langsam",
|
||||
["Slow"] = "Langsam",
|
||||
["Normal"] = "Normal",
|
||||
["Fast"] = "Schnell",
|
||||
["Very Fast"] = "Sehr Schnell",
|
||||
["Fastest"] = "Schnellste",
|
||||
["Reset to Defaults"] = "Auf Standard zurücksetzen",
|
||||
["Target/Casting"] = "Ziel/Cast",
|
||||
["Normal"] = "Normal",
|
||||
["Mass"] = "Masse",
|
||||
}
|
||||
|
||||
Vendored
+32
@@ -878,4 +878,36 @@ pfUI_translation["enUS"] = {
|
||||
["Zonetime"] = nil,
|
||||
["Zoom & Fade"] = nil,
|
||||
["Zoom Target Nameplate"] = nil,
|
||||
|
||||
-- Throttling translations
|
||||
["Throttling"] = nil,
|
||||
["Nameplates"] = nil,
|
||||
["Tooltips"] = nil,
|
||||
["Chat Tab"] = nil,
|
||||
["Libpredict"] = nil,
|
||||
["Panel Alignment"] = nil,
|
||||
["Nameplate Update Rate"] = nil,
|
||||
["Target/Casting Plates"] = nil,
|
||||
["Normal Plates"] = nil,
|
||||
["Mass Pulls (20+ Plates)"] = nil,
|
||||
["Tooltip Update Rate"] = nil,
|
||||
["Cursor Follow"] = nil,
|
||||
["Health/Status Bar"] = nil,
|
||||
["Unit Frame Update Rate"] = nil,
|
||||
["Raid/Party Frames"] = nil,
|
||||
["Player Frame"] = nil,
|
||||
["Chat Tab Hover Check"] = nil,
|
||||
["Heal Prediction Cleanup"] = nil,
|
||||
["Panel Alignment Check"] = nil,
|
||||
["Custom FPS"] = nil,
|
||||
["Very Slow"] = nil,
|
||||
["Slow"] = nil,
|
||||
["Normal"] = nil,
|
||||
["Fast"] = nil,
|
||||
["Very Fast"] = nil,
|
||||
["Fastest"] = nil,
|
||||
["Reset to Defaults"] = nil,
|
||||
["Target/Casting"] = nil,
|
||||
["Normal"] = nil,
|
||||
["Mass"] = nil,
|
||||
}
|
||||
|
||||
@@ -8,5 +8,6 @@
|
||||
<Include file="..\libs\libtooltip.lua"/>
|
||||
<Include file="..\libs\libhealth.lua"/>
|
||||
<Include file="..\libs\libtotem.lua"/>
|
||||
<Include file="..\libs\libthrottle.lua"/>
|
||||
<Include file="..\libs\libpredict.lua"/>
|
||||
</Ui>
|
||||
|
||||
+2
-2
@@ -240,10 +240,10 @@ libpredict:SetScript("OnEvent", function()
|
||||
end)
|
||||
|
||||
libpredict:SetScript("OnUpdate", function()
|
||||
-- throttle cleanup to 0.1s - no need to check every frame
|
||||
-- throttle cleanup - no need to check every frame
|
||||
local now = pfUI.uf.now or GetTime()
|
||||
if (this.tick or 0) > now then return end
|
||||
this.tick = now + 0.1
|
||||
this.tick = now + 0.1 -- Default: 10 FPS
|
||||
|
||||
-- update on timeout events
|
||||
for timestamp, targets in pairs(events) do
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
-- load pfUI environment
|
||||
setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
-- return instantly when another libthrottle is already active
|
||||
if pfUI.api.libthrottle then return end
|
||||
|
||||
-- Create libthrottle namespace
|
||||
local libthrottle = CreateFrame("Frame", "pfLibThrottle")
|
||||
pfUI.api.libthrottle = libthrottle
|
||||
|
||||
-- Preset definitions (FPS -> seconds)
|
||||
libthrottle.presets = {
|
||||
["very_slow"] = { fps = 2, delay = 0.5 },
|
||||
["slow"] = { fps = 5, delay = 0.2 },
|
||||
["normal"] = { fps = 10, delay = 0.1 },
|
||||
["fast"] = { fps = 20, delay = 0.05 },
|
||||
["very_fast"] = { fps = 30, delay = 0.033 },
|
||||
["fastest"] = { fps = 50, delay = 0.02 },
|
||||
}
|
||||
|
||||
-- Localized preset names
|
||||
libthrottle.presetNames = {
|
||||
["very_slow"] = "Very Slow (2 FPS)",
|
||||
["slow"] = "Slow (5 FPS)",
|
||||
["normal"] = "Normal (10 FPS)",
|
||||
["fast"] = "Fast (20 FPS)",
|
||||
["very_fast"] = "Very Fast (30 FPS)",
|
||||
["fastest"] = "Fastest (50 FPS)",
|
||||
["custom"] = "Custom",
|
||||
}
|
||||
|
||||
-- Default throttle categories
|
||||
libthrottle.defaults = {
|
||||
nameplates = "custom",
|
||||
nameplates_target = "custom",
|
||||
nameplates_mass = "custom",
|
||||
tooltip_cursor = "custom",
|
||||
chat_tab = "custom",
|
||||
}
|
||||
|
||||
-- Convert FPS to throttle delay in seconds
|
||||
function libthrottle:FpsToDelay(fps)
|
||||
if not fps or fps <= 0 then return 0.1 end
|
||||
return 1 / fps
|
||||
end
|
||||
|
||||
-- Convert delay to FPS
|
||||
function libthrottle:DelayToFps(delay)
|
||||
if not delay or delay <= 0 then return 10 end
|
||||
return math.floor(1 / delay)
|
||||
end
|
||||
|
||||
-- Get throttle delay for a category
|
||||
-- Returns: delay in seconds
|
||||
function libthrottle:Get(category)
|
||||
local configValue = _G.pfUI_throttle and _G.pfUI_throttle[category]
|
||||
if not configValue then
|
||||
configValue = self.defaults[category] or "normal"
|
||||
end
|
||||
|
||||
-- Check if it's a preset name
|
||||
local preset = self.presets[configValue]
|
||||
if preset then
|
||||
return preset.delay
|
||||
end
|
||||
|
||||
-- If it's "custom", read from the _custom field
|
||||
if configValue == "custom" then
|
||||
local customFps = tonumber(_G.pfUI_throttle[category .. "_custom"])
|
||||
if customFps then
|
||||
return self:FpsToDelay(customFps)
|
||||
end
|
||||
end
|
||||
|
||||
-- Fallback to normal preset
|
||||
return self.presets["normal"].delay
|
||||
end
|
||||
|
||||
-- Get FPS value for a category (for display purposes)
|
||||
function libthrottle:GetFps(category)
|
||||
local delay = self:Get(category)
|
||||
return self:DelayToFps(delay)
|
||||
end
|
||||
|
||||
-- Get preset name for a category
|
||||
function libthrottle:GetPreset(category)
|
||||
local configValue = _G.pfUI_throttle and _G.pfUI_throttle[category]
|
||||
if not configValue then
|
||||
return self.defaults[category] or "normal"
|
||||
end
|
||||
|
||||
-- Check if it's a known preset
|
||||
if self.presets[configValue] then
|
||||
return configValue
|
||||
end
|
||||
|
||||
-- Must be a custom value
|
||||
return "custom"
|
||||
end
|
||||
|
||||
-- Check if a category is using custom FPS
|
||||
function libthrottle:IsCustom(category)
|
||||
return self:GetPreset(category) == "custom"
|
||||
end
|
||||
|
||||
-- Set throttle for a category
|
||||
function libthrottle:Set(category, value)
|
||||
if not _G.pfUI_throttle then _G.pfUI_throttle = {} end
|
||||
|
||||
-- Validate preset
|
||||
if type(value) == "string" and self.presets[value] then
|
||||
_G.pfUI_throttle[category] = value
|
||||
return true
|
||||
end
|
||||
|
||||
-- If it's "custom", keep it
|
||||
if value == "custom" then
|
||||
_G.pfUI_throttle[category] = value
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- Reset a category to its default value
|
||||
function libthrottle:ResetToDefault(category)
|
||||
local default = self.defaults[category]
|
||||
if default then
|
||||
if not _G.pfUI_throttle then _G.pfUI_throttle = {} end
|
||||
_G.pfUI_throttle[category] = default
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Reset all categories to defaults
|
||||
function libthrottle:ResetAllToDefaults()
|
||||
if not _G.pfUI_throttle then _G.pfUI_throttle = {} end
|
||||
for category, default in pairs(self.defaults) do
|
||||
_G.pfUI_throttle[category] = default
|
||||
end
|
||||
end
|
||||
|
||||
-- Initialize - set defaults if config doesn't exist
|
||||
libthrottle:SetScript("OnEvent", function()
|
||||
if event == "PLAYER_ENTERING_WORLD" then
|
||||
if not _G.pfUI_throttle then
|
||||
_G.pfUI_throttle = {}
|
||||
end
|
||||
|
||||
-- Set defaults for any missing categories
|
||||
for category, default in pairs(libthrottle.defaults) do
|
||||
if not _G.pfUI_throttle[category] then
|
||||
_G.pfUI_throttle[category] = default
|
||||
end
|
||||
end
|
||||
|
||||
-- Set defaults for custom fields if missing
|
||||
if not _G.pfUI_throttle.nameplates_target_custom then _G.pfUI_throttle.nameplates_target_custom = "50" end
|
||||
if not _G.pfUI_throttle.nameplates_custom then _G.pfUI_throttle.nameplates_custom = "10" end
|
||||
if not _G.pfUI_throttle.nameplates_mass_custom then _G.pfUI_throttle.nameplates_mass_custom = "7" end
|
||||
if not _G.pfUI_throttle.tooltip_cursor_custom then _G.pfUI_throttle.tooltip_cursor_custom = "10" end
|
||||
if not _G.pfUI_throttle.chat_tab_custom then _G.pfUI_throttle.chat_tab_custom = "10" end
|
||||
|
||||
this:UnregisterEvent("PLAYER_ENTERING_WORLD")
|
||||
end
|
||||
end)
|
||||
|
||||
libthrottle:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
|
||||
-- Export to pfUI namespace for easier access
|
||||
pfUI.throttle = libthrottle
|
||||
+2
-2
@@ -455,8 +455,8 @@ pfUI:RegisterModule("chat", "vanilla:tbc", function ()
|
||||
if C.chat.global.tabmouse == "1" then
|
||||
pfUI.chat.mouseovertab = CreateFrame("Frame")
|
||||
pfUI.chat.mouseovertab:SetScript("OnUpdate", function()
|
||||
-- throttle to 0.1s
|
||||
if ( this.tick or .1) > GetTime() then return else this.tick = GetTime() + .1 end
|
||||
-- throttle
|
||||
if ( this.tick or .1) > GetTime() then return else this.tick = GetTime() + pfUI.throttle:Get("chat_tab") end -- Default: Normal (10 FPS)
|
||||
|
||||
if pfUI.chat.hideLock then return end
|
||||
|
||||
|
||||
+317
-2
@@ -351,13 +351,13 @@ pfUI:RegisterModule("gui", "vanilla:tbc", function ()
|
||||
|
||||
entry.text = text
|
||||
entry.func = function()
|
||||
if category[config] ~= value then
|
||||
if category and category[config] ~= value then
|
||||
category[config] = value
|
||||
if ufunc then ufunc() else pfUI.gui.settingChanged = true end
|
||||
end
|
||||
end
|
||||
|
||||
if category[config] == value then
|
||||
if category and category[config] == value then
|
||||
frame.input.current = i
|
||||
end
|
||||
|
||||
@@ -1625,6 +1625,321 @@ pfUI:RegisterModule("gui", "vanilla:tbc", function ()
|
||||
CreateConfig(nil, T["Selected Core"], C.gm, "server", "dropdown", pfUI.gui.dropdowns.gmserver_text)
|
||||
end)
|
||||
|
||||
-- Throttling Menu
|
||||
CreateGUIEntry(T["Throttling"], T["Nameplates"], function()
|
||||
local header = CreateConfig(nil, T["Nameplate Update Rate"], nil, nil, "header")
|
||||
header:GetParent().objectCount = header:GetParent().objectCount - 1
|
||||
header:SetHeight(20)
|
||||
|
||||
local targetCustom -- declare first so callback can use it
|
||||
|
||||
CreateConfig(function()
|
||||
-- Callback when dropdown changes - update custom field immediately
|
||||
if targetCustom and targetCustom.input then
|
||||
local isCustom = pfUI.throttle:IsCustom("nameplates_target")
|
||||
if not isCustom then
|
||||
-- Preset selected - show FPS from preset, make readonly
|
||||
targetCustom.input:EnableMouse(false)
|
||||
targetCustom.input:EnableKeyboard(false)
|
||||
targetCustom.input:ClearFocus()
|
||||
targetCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
targetCustom.input:SetText(tostring(pfUI.throttle:GetFps("nameplates_target")))
|
||||
else
|
||||
-- Custom selected - make editable
|
||||
targetCustom.input:EnableMouse(true)
|
||||
targetCustom.input:EnableKeyboard(true)
|
||||
targetCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.nameplates_target_custom then
|
||||
targetCustom.input:SetText(_G.pfUI_throttle.nameplates_target_custom)
|
||||
end
|
||||
end
|
||||
end
|
||||
end, T["Target/Casting Plates"], _G.pfUI_throttle, "nameplates_target", "dropdown", {
|
||||
"very_slow:" .. T["Very Slow"] .. " (2 FPS)",
|
||||
"slow:" .. T["Slow"] .. " (5 FPS)",
|
||||
"normal:" .. T["Normal"] .. " (10 FPS)",
|
||||
"fast:" .. T["Fast"] .. " (20 FPS)",
|
||||
"very_fast:" .. T["Very Fast"] .. " (30 FPS)",
|
||||
"fastest:" .. T["Fastest"] .. " (50 FPS)",
|
||||
"custom:" .. T["Custom"],
|
||||
})
|
||||
|
||||
-- Now create custom field AFTER dropdown
|
||||
targetCustom = CreateConfig(nil, T["Custom FPS"], _G.pfUI_throttle, "nameplates_target_custom")
|
||||
|
||||
-- Set initial state
|
||||
local isCustom = pfUI.throttle:IsCustom("nameplates_target")
|
||||
if not isCustom then
|
||||
targetCustom.input:EnableMouse(false)
|
||||
targetCustom.input:EnableKeyboard(false)
|
||||
targetCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
targetCustom.input:SetText(tostring(pfUI.throttle:GetFps("nameplates_target")))
|
||||
else
|
||||
targetCustom.input:EnableMouse(true)
|
||||
targetCustom.input:EnableKeyboard(true)
|
||||
targetCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.nameplates_target_custom then
|
||||
targetCustom.input:SetText(_G.pfUI_throttle.nameplates_target_custom)
|
||||
end
|
||||
end
|
||||
|
||||
-- Spacer after custom field
|
||||
local spacer1 = CreateConfig(nil, " ", nil, nil, "header")
|
||||
spacer1:GetParent().objectCount = spacer1:GetParent().objectCount - 1
|
||||
spacer1:SetHeight(5)
|
||||
|
||||
local normalCustom
|
||||
|
||||
CreateConfig(function()
|
||||
if normalCustom and normalCustom.input then
|
||||
local isCustom = pfUI.throttle:IsCustom("nameplates")
|
||||
if not isCustom then
|
||||
normalCustom.input:EnableMouse(false)
|
||||
normalCustom.input:EnableKeyboard(false)
|
||||
normalCustom.input:ClearFocus()
|
||||
normalCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
normalCustom.input:SetText(tostring(pfUI.throttle:GetFps("nameplates")))
|
||||
else
|
||||
normalCustom.input:EnableMouse(true)
|
||||
normalCustom.input:EnableKeyboard(true)
|
||||
normalCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.nameplates_custom then
|
||||
normalCustom.input:SetText(_G.pfUI_throttle.nameplates_custom)
|
||||
end
|
||||
end
|
||||
end
|
||||
end, T["Normal Plates"], _G.pfUI_throttle, "nameplates", "dropdown", {
|
||||
"very_slow:" .. T["Very Slow"] .. " (2 FPS)",
|
||||
"slow:" .. T["Slow"] .. " (5 FPS)",
|
||||
"normal:" .. T["Normal"] .. " (10 FPS)",
|
||||
"fast:" .. T["Fast"] .. " (20 FPS)",
|
||||
"very_fast:" .. T["Very Fast"] .. " (30 FPS)",
|
||||
"fastest:" .. T["Fastest"] .. " (50 FPS)",
|
||||
"custom:" .. T["Custom"],
|
||||
})
|
||||
|
||||
normalCustom = CreateConfig(nil, T["Custom FPS"], _G.pfUI_throttle, "nameplates_custom")
|
||||
|
||||
local isCustom2 = pfUI.throttle:IsCustom("nameplates")
|
||||
if not isCustom2 then
|
||||
normalCustom.input:EnableMouse(false)
|
||||
normalCustom.input:EnableKeyboard(false)
|
||||
normalCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
normalCustom.input:SetText(tostring(pfUI.throttle:GetFps("nameplates")))
|
||||
else
|
||||
normalCustom.input:EnableMouse(true)
|
||||
normalCustom.input:EnableKeyboard(true)
|
||||
normalCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.nameplates_custom then
|
||||
normalCustom.input:SetText(_G.pfUI_throttle.nameplates_custom)
|
||||
end
|
||||
end
|
||||
|
||||
-- Spacer after custom field
|
||||
local spacer2 = CreateConfig(nil, " ", nil, nil, "header")
|
||||
spacer2:GetParent().objectCount = spacer2:GetParent().objectCount - 1
|
||||
spacer2:SetHeight(5)
|
||||
|
||||
local massCustom
|
||||
|
||||
CreateConfig(function()
|
||||
if massCustom and massCustom.input then
|
||||
local isCustom = pfUI.throttle:IsCustom("nameplates_mass")
|
||||
if not isCustom then
|
||||
massCustom.input:EnableMouse(false)
|
||||
massCustom.input:EnableKeyboard(false)
|
||||
massCustom.input:ClearFocus()
|
||||
massCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
massCustom.input:SetText(tostring(pfUI.throttle:GetFps("nameplates_mass")))
|
||||
else
|
||||
massCustom.input:EnableMouse(true)
|
||||
massCustom.input:EnableKeyboard(true)
|
||||
massCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.nameplates_mass_custom then
|
||||
massCustom.input:SetText(_G.pfUI_throttle.nameplates_mass_custom)
|
||||
end
|
||||
end
|
||||
end
|
||||
end, T["Mass Pulls (20+ Plates)"], _G.pfUI_throttle, "nameplates_mass", "dropdown", {
|
||||
"very_slow:" .. T["Very Slow"] .. " (2 FPS)",
|
||||
"slow:" .. T["Slow"] .. " (5 FPS)",
|
||||
"normal:" .. T["Normal"] .. " (10 FPS)",
|
||||
"fast:" .. T["Fast"] .. " (20 FPS)",
|
||||
"very_fast:" .. T["Very Fast"] .. " (30 FPS)",
|
||||
"fastest:" .. T["Fastest"] .. " (50 FPS)",
|
||||
"custom:" .. T["Custom"],
|
||||
})
|
||||
|
||||
massCustom = CreateConfig(nil, T["Custom FPS"], _G.pfUI_throttle, "nameplates_mass_custom")
|
||||
|
||||
local isCustom3 = pfUI.throttle:IsCustom("nameplates_mass")
|
||||
if not isCustom3 then
|
||||
massCustom.input:EnableMouse(false)
|
||||
massCustom.input:EnableKeyboard(false)
|
||||
massCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
massCustom.input:SetText(tostring(pfUI.throttle:GetFps("nameplates_mass")))
|
||||
else
|
||||
massCustom.input:EnableMouse(true)
|
||||
massCustom.input:EnableKeyboard(true)
|
||||
massCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.nameplates_mass_custom then
|
||||
massCustom.input:SetText(_G.pfUI_throttle.nameplates_mass_custom)
|
||||
end
|
||||
end
|
||||
|
||||
-- Spacer before reset button
|
||||
local spacer = CreateConfig(nil, " ", nil, nil, "header")
|
||||
spacer:GetParent().objectCount = spacer:GetParent().objectCount - 1
|
||||
spacer:SetHeight(10)
|
||||
|
||||
-- Reset to defaults button
|
||||
CreateConfig(nil, T["Reset to Defaults"], nil, nil, "button", function()
|
||||
pfUI.throttle:ResetToDefault("nameplates_target")
|
||||
pfUI.throttle:ResetToDefault("nameplates")
|
||||
pfUI.throttle:ResetToDefault("nameplates_mass")
|
||||
-- Also reset custom fields to their default FPS values
|
||||
_G.pfUI_throttle.nameplates_target_custom = "50"
|
||||
_G.pfUI_throttle.nameplates_custom = "10"
|
||||
_G.pfUI_throttle.nameplates_mass_custom = "7"
|
||||
Reload()
|
||||
end, true)
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Throttling"], T["Tooltips"], function()
|
||||
local header = CreateConfig(nil, T["Tooltip Update Rate"], nil, nil, "header")
|
||||
header:GetParent().objectCount = header:GetParent().objectCount - 1
|
||||
header:SetHeight(20)
|
||||
|
||||
local cursorCustom
|
||||
|
||||
CreateConfig(function()
|
||||
if cursorCustom and cursorCustom.input then
|
||||
local isCustom = pfUI.throttle:IsCustom("tooltip_cursor")
|
||||
if not isCustom then
|
||||
cursorCustom.input:EnableMouse(false)
|
||||
cursorCustom.input:EnableKeyboard(false)
|
||||
cursorCustom.input:ClearFocus()
|
||||
cursorCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
cursorCustom.input:SetText(tostring(pfUI.throttle:GetFps("tooltip_cursor")))
|
||||
else
|
||||
cursorCustom.input:EnableMouse(true)
|
||||
cursorCustom.input:EnableKeyboard(true)
|
||||
cursorCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.tooltip_cursor_custom then
|
||||
cursorCustom.input:SetText(_G.pfUI_throttle.tooltip_cursor_custom)
|
||||
end
|
||||
end
|
||||
end
|
||||
end, T["Cursor Follow"], _G.pfUI_throttle, "tooltip_cursor", "dropdown", {
|
||||
"very_slow:" .. T["Very Slow"] .. " (2 FPS)",
|
||||
"slow:" .. T["Slow"] .. " (5 FPS)",
|
||||
"normal:" .. T["Normal"] .. " (10 FPS)",
|
||||
"fast:" .. T["Fast"] .. " (20 FPS)",
|
||||
"very_fast:" .. T["Very Fast"] .. " (30 FPS)",
|
||||
"fastest:" .. T["Fastest"] .. " (50 FPS)",
|
||||
"custom:" .. T["Custom"],
|
||||
})
|
||||
|
||||
cursorCustom = CreateConfig(nil, T["Custom FPS"], _G.pfUI_throttle, "tooltip_cursor_custom")
|
||||
|
||||
local isCustom = pfUI.throttle:IsCustom("tooltip_cursor")
|
||||
if not isCustom then
|
||||
cursorCustom.input:EnableMouse(false)
|
||||
cursorCustom.input:EnableKeyboard(false)
|
||||
cursorCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
cursorCustom.input:SetText(tostring(pfUI.throttle:GetFps("tooltip_cursor")))
|
||||
else
|
||||
cursorCustom.input:EnableMouse(true)
|
||||
cursorCustom.input:EnableKeyboard(true)
|
||||
cursorCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.tooltip_cursor_custom then
|
||||
cursorCustom.input:SetText(_G.pfUI_throttle.tooltip_cursor_custom)
|
||||
end
|
||||
end
|
||||
|
||||
-- Small spacer
|
||||
local spacer1 = CreateConfig(nil, " ", nil, nil, "header")
|
||||
spacer1:GetParent().objectCount = spacer1:GetParent().objectCount - 1
|
||||
spacer1:SetHeight(5)
|
||||
|
||||
-- Info note about Native mode
|
||||
local infoText = CreateConfig(nil, T["Note: Only works when Cursor Align is NOT 'Native'"], nil, nil, "header")
|
||||
infoText:GetParent().objectCount = infoText:GetParent().objectCount - 1
|
||||
infoText:SetHeight(25)
|
||||
|
||||
-- Spacer before reset button
|
||||
local spacer = CreateConfig(nil, " ", nil, nil, "header")
|
||||
spacer:GetParent().objectCount = spacer:GetParent().objectCount - 1
|
||||
spacer:SetHeight(5)
|
||||
|
||||
-- Reset to defaults button
|
||||
CreateConfig(nil, T["Reset to Defaults"], nil, nil, "button", function()
|
||||
pfUI.throttle:ResetToDefault("tooltip_cursor")
|
||||
_G.pfUI_throttle.tooltip_cursor_custom = "10"
|
||||
Reload()
|
||||
end, true)
|
||||
end)
|
||||
CreateGUIEntry(T["Throttling"], T["Chat Tab"], function()
|
||||
local chatCustom
|
||||
|
||||
CreateConfig(function()
|
||||
if chatCustom and chatCustom.input then
|
||||
local isCustom = pfUI.throttle:IsCustom("chat_tab")
|
||||
if not isCustom then
|
||||
chatCustom.input:EnableMouse(false)
|
||||
chatCustom.input:EnableKeyboard(false)
|
||||
chatCustom.input:ClearFocus()
|
||||
chatCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
chatCustom.input:SetText(tostring(pfUI.throttle:GetFps("chat_tab")))
|
||||
else
|
||||
chatCustom.input:EnableMouse(true)
|
||||
chatCustom.input:EnableKeyboard(true)
|
||||
chatCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.chat_tab_custom then
|
||||
chatCustom.input:SetText(_G.pfUI_throttle.chat_tab_custom)
|
||||
end
|
||||
end
|
||||
end
|
||||
end, T["Chat Tab Hover Check"], _G.pfUI_throttle, "chat_tab", "dropdown", {
|
||||
"very_slow:" .. T["Very Slow"] .. " (2 FPS)",
|
||||
"slow:" .. T["Slow"] .. " (5 FPS)",
|
||||
"normal:" .. T["Normal"] .. " (10 FPS)",
|
||||
"fast:" .. T["Fast"] .. " (20 FPS)",
|
||||
"very_fast:" .. T["Very Fast"] .. " (30 FPS)",
|
||||
"fastest:" .. T["Fastest"] .. " (50 FPS)",
|
||||
"custom:" .. T["Custom"],
|
||||
})
|
||||
|
||||
chatCustom = CreateConfig(nil, T["Custom FPS"], _G.pfUI_throttle, "chat_tab_custom")
|
||||
|
||||
local isCustom = pfUI.throttle:IsCustom("chat_tab")
|
||||
if not isCustom then
|
||||
chatCustom.input:EnableMouse(false)
|
||||
chatCustom.input:EnableKeyboard(false)
|
||||
chatCustom.input:SetTextColor(.5,.5,.5,1)
|
||||
chatCustom.input:SetText(tostring(pfUI.throttle:GetFps("chat_tab")))
|
||||
else
|
||||
chatCustom.input:EnableMouse(true)
|
||||
chatCustom.input:EnableKeyboard(true)
|
||||
chatCustom.input:SetTextColor(.2,1,.8,1)
|
||||
if _G.pfUI_throttle.chat_tab_custom then
|
||||
chatCustom.input:SetText(_G.pfUI_throttle.chat_tab_custom)
|
||||
end
|
||||
end
|
||||
|
||||
-- Spacer before reset button
|
||||
local spacer = CreateConfig(nil, " ", nil, nil, "header")
|
||||
spacer:GetParent().objectCount = spacer:GetParent().objectCount - 1
|
||||
spacer:SetHeight(10)
|
||||
|
||||
-- Reset to defaults button
|
||||
CreateConfig(nil, T["Reset to Defaults"], nil, nil, "button", function()
|
||||
pfUI.throttle:ResetToDefault("chat_tab")
|
||||
_G.pfUI_throttle.chat_tab_custom = "10"
|
||||
Reload()
|
||||
end, true)
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Unit Frames"], T["General"], function()
|
||||
CreateConfig(nil, T["Disable pfUI Unit Frames"], C.unitframes, "disable", "checkbox")
|
||||
CreateConfig(nil, T["Healthbar Animation Speed"], C.unitframes, "animation_speed", "dropdown", pfUI.gui.dropdowns.uf_animationspeed)
|
||||
|
||||
@@ -1263,11 +1263,11 @@ nameplates:RegisterEvent("ZONE_CHANGED_NEW_AREA")
|
||||
|
||||
local throttle
|
||||
if target or isCasting then
|
||||
throttle = 0.02 -- 50 FPS for target OR active castbar
|
||||
throttle = pfUI.throttle:Get("nameplates_target") -- Default: Fast (20 FPS)
|
||||
elseif visiblePlateCount > 20 then
|
||||
throttle = 0.15 -- ~7 FPS for mass pulls (20+ plates)
|
||||
throttle = pfUI.throttle:Get("nameplates_mass") -- Default: Slow (5 FPS) for mass pulls
|
||||
else
|
||||
throttle = 0.1 -- 10 FPS for others (healthbar updates)
|
||||
throttle = pfUI.throttle:Get("nameplates") -- Default: Normal (10 FPS)
|
||||
end
|
||||
|
||||
-- Check for pending event updates (these bypass throttle for immediate response)
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ pfUI:RegisterModule("player", "vanilla:tbc", function ()
|
||||
local originalOnUpdate = pfUI.uf.player:GetScript("OnUpdate")
|
||||
pfUI.uf.player:SetScript("OnUpdate", function()
|
||||
if (this.throttleTick or 0) > GetTime() then return end
|
||||
this.throttleTick = GetTime() + 0.1
|
||||
this.throttleTick = GetTime() + 0.1 -- Default: 10 FPS
|
||||
originalOnUpdate()
|
||||
end)
|
||||
end
|
||||
|
||||
+2
-2
@@ -33,9 +33,9 @@ pfUI:RegisterModule("tooltip", "vanilla", function ()
|
||||
tooltip.cursor:SetWidth(tonumber(C.tooltip.cursoroffset) * 2)
|
||||
tooltip.cursor:SetHeight(tonumber(C.tooltip.cursoroffset) * 2)
|
||||
tooltip.cursor:SetScript("OnUpdate", function()
|
||||
-- throttle to 0.1s - cursor following doesn't need to be every frame
|
||||
-- throttle - cursor following doesn't need to be every frame
|
||||
if (this.tick or 0) > GetTime() then return end
|
||||
this.tick = GetTime() + 0.1
|
||||
this.tick = GetTime() + (pfUI.throttle and pfUI.throttle:Get("tooltip_cursor") or 0.1)
|
||||
|
||||
local scale = UIParent:GetScale()
|
||||
local x, y = GetCursorPosition()
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
## Notes: A complete user interface replacement.
|
||||
## Notes-ruRU: Полная замена пользовательского интерфейса.
|
||||
## Version: 7.6.0 (experiment version)
|
||||
## SavedVariables: pfUI_profiles, pfUI_addon_profiles, pfUI_cache
|
||||
## SavedVariables: pfUI_profiles, pfUI_addon_profiles, pfUI_cache, pfUI_throttle
|
||||
## SavedVariablesPerCharacter: pfUI_config, pfUI_init, pfUI_playerDB
|
||||
|
||||
pfUI.lua
|
||||
|
||||
@@ -30,6 +30,7 @@ pfUI_init = {}
|
||||
pfUI_profiles = {}
|
||||
pfUI_addon_profiles = {}
|
||||
pfUI_cache = {}
|
||||
pfUI_throttle = {}
|
||||
|
||||
-- localization
|
||||
pfUI_locale = {}
|
||||
@@ -241,6 +242,7 @@ function pfUI:GetEnvironment()
|
||||
|
||||
pfUI.env._G = getfenv(0)
|
||||
pfUI.env.C = pfUI_config
|
||||
pfUI.env.pfUI_throttle = _G.pfUI_throttle
|
||||
pfUI.env.L = (pfUI_locale[GetLocale()] or pfUI_locale["enUS"])
|
||||
|
||||
return pfUI.env
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
## Notes: A complete user interface replacement.
|
||||
## Notes-ruRU: Полная замена пользовательского интерфейса.
|
||||
## Version: 7.6.0 (experiment version)
|
||||
## SavedVariables: pfUI_profiles, pfUI_addon_profiles, pfUI_cache
|
||||
## SavedVariables: pfUI_profiles, pfUI_addon_profiles, pfUI_cache, pfUI_throttle
|
||||
## SavedVariablesPerCharacter: pfUI_config, pfUI_init, pfUI_playerDB
|
||||
|
||||
pfUI.lua
|
||||
|
||||
Reference in New Issue
Block a user