dedupe some nameplate logic

This commit is contained in:
Reid 2025-03-10 20:26:13 -07:00
parent d9297245a7
commit 5406acc987
Signed by: reidlab
GPG key ID: 6C9EAA3364F962C8

View file

@ -6,15 +6,10 @@ local g = require("scripts.libs.gradient")
---@param name string
---@param gradient Gradient
---@param nameplates Nameplate | Nameplate[] where to use the animated name
---@param count number number of gradients to be present in the span
---@param phase_shift_rate number how fast to shift the gradient
---@returns fun():void # function to unregister
local function animate_gradient_name(name, gradient, nameplates, count, phase_shift_rate)
if type(nameplates) ~= "table" then
nameplates = {nameplates}
end
---@param phase_shift number shift of the gradient
---@returns string
local function render_gradient_name(name, gradient, count, phase_shift)
local string_width = client.getTextWidth(name) / count;
local string_width_chars = {};
for i = 1, #name do
@ -24,12 +19,6 @@ local function animate_gradient_name(name, gradient, nameplates, count, phase_sh
---@type ColoredText[]
local result = {}
local phase_shift = 0;
local function render()
if client.isPaused() then
return
end
local acc = 0;
for i = 1, #name do
local offset = acc + string_width_chars[i];
@ -42,11 +31,31 @@ local function animate_gradient_name(name, gradient, nameplates, count, phase_sh
}
end
return toJson(result)
end
---@param name string
---@param gradient Gradient
---@param nameplates Nameplate | Nameplate[] where to use the animated name
---@param count number number of gradients to be present in the span
---@param phase_shift_rate number how fast to shift the gradient
---@returns fun():void # function to unregister
local function animate_gradient_name(name, gradient, nameplates, count, phase_shift_rate)
if type(nameplates) ~= "table" then
nameplates = {nameplates}
end
local phase_shift = 0;
local function render()
if client.isPaused() then
return
end
phase_shift = phase_shift + phase_shift_rate
local json = toJson(result);
local result = render_gradient_name(name, gradient, count, phase_shift)
for _, nameplate in pairs(nameplates) do
nameplate:setText(json)
nameplate:setText(result)
end
end
@ -66,30 +75,9 @@ local function static_gradient_name(name, gradient, nameplates, count, phase_shi
nameplates = {nameplates}
end
local string_width = client.getTextWidth(name) / count;
local string_width_chars = {};
for i = 1, #name do
string_width_chars[i] = client.getTextWidth(name:sub(i, i))
end
---@type ColoredText[]
local result = {}
local acc = 0;
for i = 1, #name do
local offset = acc + string_width_chars[i];
local color = gradient:at((offset / string_width) + phase_shift);
acc = offset
result[i] = {
text = name:sub(i, i),
color = color:toHex(true, false)
}
end
local json = toJson(result);
local result = render_gradient_name(name, gradient, count, phase_shift);
for _, nameplate in pairs(nameplates) do
nameplate:setText(json)
nameplate:setText(result)
end
end