diff --git a/scripts/main.lua b/scripts/main.lua index 16bb087..ca69571 100644 --- a/scripts/main.lua +++ b/scripts/main.lua @@ -3,5 +3,4 @@ events.ENTITY_INIT:register(function () require("scripts.nameplate") require("scripts.soggy") require("scripts.physics") - require("scripts.wheels.main") end) diff --git a/scripts/nameplate.lua b/scripts/nameplate.lua index 6f9e9b6..95cb7b4 100644 --- a/scripts/nameplate.lua +++ b/scripts/nameplate.lua @@ -6,10 +6,66 @@ 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 + + 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 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]; + local color = gradient:at((offset / string_width) + phase_shift); + acc = offset + + result[i] = { + text = name:sub(i, i), + color = color:toHex(true, false) + } + end + + phase_shift = phase_shift + phase_shift_rate + + local json = toJson(result); + for _, nameplate in pairs(nameplates) do + nameplate:setText(json) + end + end + + events.render:register(render) + return function () + events.render:remove(render) + end +end + +---@param name string +---@param gradient Gradient +---@param nameplates Nameplate | Nameplate[] where to use the static name ---@param count number number of gradients to be present in the span ---@param phase_shift number shift of the gradient ----@returns string -local function render_gradient_name(name, gradient, count, phase_shift) +local function static_gradient_name(name, gradient, nameplates, count, phase_shift) + if type(nameplates) ~= "table" then + nameplates = {nameplates} + end + local string_width = client.getTextWidth(name) / count; local string_width_chars = {}; for i = 1, #name do @@ -31,53 +87,9 @@ local function render_gradient_name(name, gradient, count, phase_shift) } 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 result = render_gradient_name(name, gradient, count, phase_shift) - for _, nameplate in pairs(nameplates) do - nameplate:setText(result) - end - end - - events.render:register(render) - return function () - events.render:remove(render) - end -end - ----@param name string ----@param gradient Gradient ----@param nameplates Nameplate | Nameplate[] where to use the static name ----@param count number number of gradients to be present in the span ----@param phase_shift number shift of the gradient -local function static_gradient_name(name, gradient, nameplates, count, phase_shift) - if type(nameplates) ~= "table" then - nameplates = {nameplates} - end - - local result = render_gradient_name(name, gradient, count, phase_shift); + local json = toJson(result); for _, nameplate in pairs(nameplates) do - nameplate:setText(result) + nameplate:setText(json) end end diff --git a/scripts/wheels/main.lua b/scripts/wheels/main.lua deleted file mode 100644 index 678dcf2..0000000 --- a/scripts/wheels/main.lua +++ /dev/null @@ -1,18 +0,0 @@ -local toggles = require("scripts.wheels.toggles") - -local wheels = { - toggles -} - -for i, v in pairs(wheels) do - if i == 1 then action_wheel:setPage(v) end - if #wheels ~= 1 then - v:newAction() - :title("to next page") - :item("minecraft:arrow") - :onLeftClick(function () - local index = (i + 1) > #wheels and 1 or (i + 1) - action_wheel:setPage(wheels[index]) - end) - end -end diff --git a/scripts/wheels/toggles.lua b/scripts/wheels/toggles.lua deleted file mode 100644 index da9309f..0000000 --- a/scripts/wheels/toggles.lua +++ /dev/null @@ -1,14 +0,0 @@ -local toggles = action_wheel:newPage() - -function pings.toggleArmor(state) - vanilla_model.ARMOR:setVisible(state) -end - -local toggle_armor = toggles:newAction() - :setToggled(false) - :setOnToggle(pings.toggleArmor) - :title("toggle armor") - :item("red_wool") - :toggleItem("green_wool") - -return toggles