Give up on the frames

This commit is contained in:
2025-01-27 00:01:14 +01:00
parent 054d8ab7ef
commit fdcd816235
3 changed files with 190 additions and 102 deletions

View File

@@ -260,11 +260,12 @@ local function init()
---@class HeimdallAchievementSnifferConfig
---@field enabled boolean
---@field debug boolean
---@field texture string
---@field offsetX number
---@field offsetY number
-----@field texture string
-----@field offsetX number
-----@field offsetY number
---@field rescan boolean
---@field scanInterval number
-----@field iconScale number
--- Data ---
---@class HeimdallMessengerData
@@ -519,11 +520,12 @@ local function init()
achievementSniffer = {
enabled = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "enabled" }, false),
debug = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "debug" }, false),
texture = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "texture" }, "Aura53.tga"),
offsetX = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "offsetX" }, 0),
offsetY = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "offsetY" }, 0),
--texture = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "texture" }, "Aura53.tga"),
--offsetX = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "offsetX" }, 0),
--offsetY = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "offsetY" }, 0),
rescan = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "rescan" }, false),
scanInterval = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "scanInterval" }, 1),
--iconScale = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "iconScale" }, 1),
},
addonPrefix = shared.GetOrDefault(Heimdall_Data, { "config", "addonPrefix" }, "HEIMDALL"),
channelLocale = shared.GetOrDefault(Heimdall_Data, { "config", "channelLocale" }, {}),

View File

@@ -196,14 +196,117 @@ function shared.AchievementSniffer.Init()
if not Heimdall_Achievements.players then Heimdall_Achievements.players = {} end
if not Heimdall_Achievements.alreadySeen then Heimdall_Achievements.alreadySeen = {} end
local framePool = {}
for i = 1, 40 do
local frame = CreateFrame("Frame")
frame.custom = { busy = false }
local texture = frame:CreateTexture(nil, "ARTWORK")
texture:SetAllPoints(frame)
texture:SetTexture(TextureRoot .. Heimdall_Data.config.achievementSniffer.texture)
table.insert(framePool, frame)
--local framePool = {}
--for i = 1, 40 do
-- local frame = CreateFrame("Frame", "HeimdallAchievementSnifferNameplate" .. i, UIParent)
-- local texture = frame:CreateTexture(nil, "ARTWORK")
-- texture:SetAllPoints(frame)
-- texture:SetTexture(TextureRoot .. Heimdall_Data.config.achievementSniffer.texture)
-- frame.texture = texture
-- frame:Hide()
-- table.insert(framePool, frame)
--end
---@param name string
---@return boolean
local function ShouldInspect(name)
local should = false
if not Heimdall_Achievements.players[name] then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Player %s does not have prior achievement data", ModuleName, name))
end
should = true
end
if Heimdall_Achievements.alreadySeen[name] then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Player %s has already been seen", ModuleName, name))
end
should = false
end
if Heimdall_Data.config.achievementSniffer.rescan then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Rescan is enabled", ModuleName))
end
should = true
end
return should
end
-- It's not working well AT ALL
-- I don't know how to do it better
-- It simply just does not work...
--local function UpdateFrames()
-- for i, frame in ipairs(framePool) do
-- local unit = "nameplate" .. i
-- if not UnitExists(unit) then
-- --if Heimdall_Data.config.achievementSniffer.debug then
-- -- print(string.format("[%s] Unit %s does not exist, hiding frame", ModuleName, unit))
-- --end
-- frame:Hide()
-- else
-- --local unitFrame = _G[string.format("ElvUI_NamePlate%dHealthBar", i)]
-- local unitFrame = _G[string.format("NamePlate%d", i)]
-- if unitFrame == nil then
-- if Heimdall_Data.config.achievementSniffer.debug then
-- print(string.format("[%s] Unit frame for %s not found", ModuleName, unit))
-- end
-- frame:Hide()
-- else
-- local unitName = UnitName(unit)
-- if Heimdall_Data.config.achievementSniffer.debug then
-- print(string.format("[%s] Unit frame found for %s (%s)", ModuleName, unit, unitName))
-- end
-- frame:Show()
-- frame:SetSize(32, 32)
-- frame:SetFrameStrata("HIGH")
-- frame:SetFrameLevel(100)
-- frame:SetScale(Heimdall_Data.config.achievementSniffer.iconScale)
-- frame.texture:SetTexture(TextureRoot .. Heimdall_Data.config.achievementSniffer.texture)
-- frame:SetPoint("CENTER", unitFrame, "CENTER",
-- Heimdall_Data.config.achievementSniffer.offsetX,
-- Heimdall_Data.config.achievementSniffer.offsetY)
-- frame:SetParent(unitFrame)
-- frame:SetAlpha(1)
-- local exists = ShouldInspect(unitName)
-- if exists then
-- frame.texture:SetVertexColor(1, 0, 0, 1)
-- else
-- frame.texture:SetVertexColor(0, 1, 0, 1)
-- end
-- if Heimdall_Data.config.achievementSniffer.debug then
-- print(string.format("[%s] Frame updated for %s", ModuleName, unitName))
-- end
-- end
-- end
-- end
--end
---@param unit string
local function TryInspect(unit)
local targetPlayer = UnitIsPlayer(unit)
if not targetPlayer then return end
local targetName = UnitName(unit)
local targetGuid = UnitGUID(unit)
guidMap[targetGuid] = targetName
if not ShouldInspect(targetName) then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Not inspecting player: %s", ModuleName, targetName))
end
return
end
local canInspect = CheckInteractDistance(unit, 1)
if canInspect then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Inspecting player: %s", ModuleName, targetName))
end
SetAchievementComparisonUnit(unit)
else
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Cannot inspect player (too far?): %s", ModuleName, targetName))
end
end
end
---@param name string
@@ -232,73 +335,27 @@ function shared.AchievementSniffer.Init()
Heimdall_Achievements.players[name][aid] = data
end
end
end
---@param unit string
local function TryInspect(unit)
local targetPlayer = UnitIsPlayer(unit)
if not targetPlayer then return end
local targetName = UnitName(unit)
local targetGuid = UnitGUID(unit)
guidMap[targetGuid] = targetName
local should = false
if not Heimdall_Achievements.players[targetName] then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Player %s does not have prior achievement data", ModuleName, targetName))
end
should = true
end
if Heimdall_Achievements.alreadySeen[targetName] then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Player %s has already been seen", ModuleName, targetName))
end
should = false
end
if Heimdall_Data.config.achievementSniffer.rescan then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Rescan is enabled", ModuleName))
end
should = true
end
if not should then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Not inspecting player: %s", ModuleName, targetName))
end
return
end
local canInspect = CheckInteractDistance(unit, 1)
if canInspect then
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Inspecting player: %s", ModuleName, targetName))
end
SetAchievementComparisonUnit(unit)
else
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Cannot inspect player (too far?): %s", ModuleName, targetName))
end
end
--UpdateFrames()
end
local nameplateFrame = CreateFrame("Frame")
nameplateFrame:RegisterEvent("NAME_PLATE_UNIT_ADDED")
nameplateFrame:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
nameplateFrame:SetScript("OnEvent", function(self, event, unit)
if not Heimdall_Data.config.achievementSniffer.enabled then return end
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Event triggered: %s for unit: %s", ModuleName, event, unit))
end
if event == "NAME_PLATE_UNIT_ADDED" then
TryInspect(unit)
elseif event == "NAME_PLATE_UNIT_REMOVED" then
print("NAME_PLATE_UNIT_REMOVED", unit)
end
--UpdateFrames()
end)
local inspectFrame = CreateFrame("Frame")
inspectFrame:RegisterEvent("INSPECT_ACHIEVEMENT_READY")
inspectFrame:SetScript("OnEvent", function(self, event, guid)
if not Heimdall_Data.config.achievementSniffer.enabled then return end
local name = guidMap[guid]
if not name then
if Heimdall_Data.config.achievementSniffer.debug then
@@ -312,7 +369,27 @@ function shared.AchievementSniffer.Init()
Scan(name)
end)
--local timer =
local function Tick()
C_Timer.NewTimer(Heimdall_Data.config.achievementSniffer.scanInterval, Tick)
if not Heimdall_Data.config.achievementSniffer.enabled then return end
if Heimdall_Data.config.achievementSniffer.debug then
print(string.format("[%s] Scanning achievements for everyone on screen", ModuleName))
end
for i = 1, 40 do
local unit = "nameplate" .. i
if UnitExists(unit) then
TryInspect(unit)
--else
-- if Heimdall_Data.config.achievementSniffer.debug then
-- print(string.format("[%s] Unit %s does not exist, nothing to inspect", ModuleName, unit))
-- end
end
end
--UpdateFrames()
end
Tick()
print("[Heimdall] AchievementSniffer loaded")
end

View File

@@ -2021,44 +2021,44 @@ function shared.Config.Init()
enableButton:UpdateColor(Heimdall_Data.config.achievementSniffer.enabled)
achievementSnifferConfigFrame:Add(enableButton, 2, 3)
local texture = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigTexture",
achievementSnifferConfigFrame.frame, shared._L("texture", Heimdall_Data.config.locale),
Heimdall_Data.config.achievementSniffer.texture,
function(self)
local text = self:GetText()
Heimdall_Data.config.achievementSniffer.texture = text
end)
achievementSnifferConfigFrame:Add(texture, 2, 3)
--local texture = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigTexture",
-- achievementSnifferConfigFrame.frame, shared._L("texture", Heimdall_Data.config.locale),
-- Heimdall_Data.config.achievementSniffer.texture,
-- function(self)
-- local text = self:GetText()
-- Heimdall_Data.config.achievementSniffer.texture = text
-- end)
--achievementSnifferConfigFrame:Add(texture, 2, 3)
local offsetX = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigOffsetX",
achievementSnifferConfigFrame.frame, shared._L("offsetX", Heimdall_Data.config.locale),
tostring(Heimdall_Data.config.achievementSniffer.offsetX),
function(self)
local text = self:GetText()
if string.match(text, "%d+") then
Heimdall_Data.config.achievementSniffer.offsetX = tonumber(text)
print("Offset X set to", tostring(text))
else
print("Invalid offset X", text)
self:SetText(tostring(Heimdall_Data.config.achievementSniffer.offsetX))
end
end)
achievementSnifferConfigFrame:Add(offsetX, 2, 3)
--local offsetX = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigOffsetX",
-- achievementSnifferConfigFrame.frame, shared._L("offsetX", Heimdall_Data.config.locale),
-- tostring(Heimdall_Data.config.achievementSniffer.offsetX),
-- function(self)
-- local text = self:GetText()
-- if string.match(text, "%d+") then
-- Heimdall_Data.config.achievementSniffer.offsetX = tonumber(text)
-- print("Offset X set to", tostring(text))
-- else
-- print("Invalid offset X", text)
-- self:SetText(tostring(Heimdall_Data.config.achievementSniffer.offsetX))
-- end
-- end)
--achievementSnifferConfigFrame:Add(offsetX, 2, 3)
local offsetY = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigOffsetY",
achievementSnifferConfigFrame.frame, shared._L("offsetY", Heimdall_Data.config.locale),
tostring(Heimdall_Data.config.achievementSniffer.offsetY),
function(self)
local text = self:GetText()
if string.match(text, "%d+") then
Heimdall_Data.config.achievementSniffer.offsetY = tonumber(text)
print("Offset Y set to", tostring(text))
else
print("Invalid offset Y", text)
self:SetText(tostring(Heimdall_Data.config.achievementSniffer.offsetY))
end
end)
achievementSnifferConfigFrame:Add(offsetY, 2, 3)
--local offsetY = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigOffsetY",
-- achievementSnifferConfigFrame.frame, shared._L("offsetY", Heimdall_Data.config.locale),
-- tostring(Heimdall_Data.config.achievementSniffer.offsetY),
-- function(self)
-- local text = self:GetText()
-- if string.match(text, "%d+") then
-- Heimdall_Data.config.achievementSniffer.offsetY = tonumber(text)
-- print("Offset Y set to", tostring(text))
-- else
-- print("Invalid offset Y", text)
-- self:SetText(tostring(Heimdall_Data.config.achievementSniffer.offsetY))
-- end
-- end)
--achievementSnifferConfigFrame:Add(offsetY, 2, 3)
local rescan = CreateBasicButton("HeimdallAchievementSnifferConfigRescanButton",
achievementSnifferConfigFrame.frame, shared._L("rescan", Heimdall_Data.config.locale), function()
@@ -2076,6 +2076,15 @@ function shared.Config.Init()
Heimdall_Data.config.achievementSniffer.scanInterval = tonumber(text)
end)
achievementSnifferConfigFrame:Add(scanInterval, 2, 3)
--local iconScale = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigIconScale",
-- achievementSnifferConfigFrame.frame, shared._L("iconScale", Heimdall_Data.config.locale),
-- tostring(Heimdall_Data.config.achievementSniffer.iconScale),
-- function(self)
-- local text = self:GetText()
-- Heimdall_Data.config.achievementSniffer.iconScale = tonumber(text)
-- end)
--achievementSnifferConfigFrame:Add(iconScale, 2, 3)
end
-- Addon prefix