diff --git a/scripts/main.lua b/scripts/main.lua index ca69571..16bb087 100644 --- a/scripts/main.lua +++ b/scripts/main.lua @@ -3,4 +3,5 @@ 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 95cb7b4..6f9e9b6 100644 --- a/scripts/nameplate.lua +++ b/scripts/nameplate.lua @@ -6,66 +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 - - 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 -local function static_gradient_name(name, gradient, nameplates, count, phase_shift) - if type(nameplates) ~= "table" then - nameplates = {nameplates} - end - +---@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 @@ -87,9 +31,53 @@ local function static_gradient_name(name, gradient, nameplates, count, phase_shi } end - local json = toJson(result); + 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); for _, nameplate in pairs(nameplates) do - nameplate:setText(json) + nameplate:setText(result) end end diff --git a/scripts/wheels/main.lua b/scripts/wheels/main.lua new file mode 100644 index 0000000..678dcf2 --- /dev/null +++ b/scripts/wheels/main.lua @@ -0,0 +1,18 @@ +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 new file mode 100644 index 0000000..da9309f --- /dev/null +++ b/scripts/wheels/toggles.lua @@ -0,0 +1,14 @@ +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