balatro-mods/HandyBalatro/config_ui.lua
2025-01-19 15:01:49 +08:00

552 lines
13 KiB
Lua

Handy.UI.PARTS = {
create_module_checkbox = function(module, label, text_prefix, text_lines, skip_keybinds)
local desc_lines = {
{ n = G.UIT.R, config = { minw = 5.25 } },
}
if skip_keybinds then
table.insert(desc_lines, {
n = G.UIT.R,
config = { padding = 0.025 },
nodes = {
{
n = G.UIT.T,
config = {
text = text_prefix .. " " .. text_lines[1],
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
},
})
else
local key_desc = module.key_2
and {
{
n = G.UIT.T,
config = {
text = text_prefix .. " [",
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
{
n = G.UIT.T,
config = {
ref_table = module,
ref_value = "key_1",
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
{
n = G.UIT.T,
config = {
text = "] or [",
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
{
n = G.UIT.T,
config = {
ref_table = module,
ref_value = "key_2",
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
{
n = G.UIT.T,
config = {
text = "] " .. text_lines[1],
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
}
or {
{
n = G.UIT.T,
config = {
text = text_prefix .. " [",
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
{
n = G.UIT.T,
config = {
ref_table = module,
ref_value = "key_1",
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
{
n = G.UIT.T,
config = {
text = "] " .. text_lines[1],
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
}
table.insert(desc_lines, {
n = G.UIT.R,
config = { padding = 0.025 },
nodes = key_desc,
})
end
for i = 2, #text_lines do
table.insert(desc_lines, {
n = G.UIT.R,
config = { padding = 0.025 },
nodes = {
{
n = G.UIT.T,
config = {
text = text_lines[i],
scale = 0.3,
colour = G.C.TEXT_LIGHT,
},
},
},
})
end
local label_lines = {}
if type(label) == "string" then
label = { label }
end
for i = 1, #label do
table.insert(label_lines, {
n = G.UIT.R,
config = { minw = 2.75 },
nodes = {
{
n = G.UIT.T,
config = {
text = label[i],
scale = 0.4,
colour = G.C.WHITE,
},
},
},
})
end
return {
n = G.UIT.R,
config = { align = "cm" },
nodes = {
{
n = G.UIT.C,
config = { align = "cm" },
nodes = label_lines,
},
{
n = G.UIT.C,
config = { align = "cm" },
nodes = {
create_toggle({
callback = function(b)
return G.FUNCS.handy_toggle_module_enabled(b, module)
end,
label_scale = 0.4,
label = "",
ref_table = module,
ref_value = "enabled",
w = 0,
}),
},
},
{
n = G.UIT.C,
config = { minw = 0.1 },
},
{
n = G.UIT.C,
config = { align = "cm" },
nodes = desc_lines,
},
},
}
end,
create_module_section = function(label)
return {
n = G.UIT.R,
config = { align = "cm", padding = 0.1 },
nodes = {
{
n = G.UIT.T,
config = { text = label, colour = G.C.WHITE, scale = 0.4, align = "cm" },
},
},
}
end,
create_module_keybind = function(module, label, plus, dangerous)
return {
n = G.UIT.R,
config = { align = "cm", padding = 0.05 },
nodes = {
{
n = G.UIT.C,
config = { align = "c", minw = 4 },
nodes = {
{
n = G.UIT.T,
config = { text = label, colour = G.C.WHITE, scale = 0.35 },
},
},
},
{
n = G.UIT.C,
config = { align = "cm", minw = 0.75 },
},
UIBox_button({
label = { module.key_1 or "None" },
col = true,
colour = dangerous and G.C.MULT or G.C.CHIPS,
scale = 0.35,
minw = 2.75,
minh = 0.45,
ref_table = {
module = module,
key = "key_1",
},
button = "handy_init_keybind_change",
}),
{
n = G.UIT.C,
config = { align = "cm", minw = 0.6 },
nodes = {
{
n = G.UIT.T,
config = { text = plus and "+" or "or", colour = G.C.WHITE, scale = 0.3 },
},
},
},
UIBox_button({
label = { module.key_2 or "None" },
col = true,
colour = dangerous and G.C.MULT or G.C.CHIPS,
scale = 0.35,
minw = 2.75,
minh = 0.45,
ref_table = {
module = module,
key = "key_2",
},
button = "handy_init_keybind_change",
}),
},
}
end,
}
Handy.UI.get_config_tab_overall = function()
return {
{
n = G.UIT.R,
config = { padding = 0.05, align = "cm" },
nodes = {
create_option_cycle({
minw = 3,
label = "Notifications level",
scale = 0.8,
options = {
"None",
"Dangerous",
"Game state",
"All",
},
opt_callback = "handy_change_notifications_level",
current_option = Handy.config.current.notifications_level,
}),
},
},
{ n = G.UIT.R, config = { padding = 0.05 }, nodes = {} },
{
n = G.UIT.R,
nodes = {
{
n = G.UIT.C,
nodes = {
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.insta_highlight,
"Quick Highlight",
"Hold [Left Mouse]",
{
"and",
"hover cards in hand to highlight",
},
true
),
{ n = G.UIT.R, config = { minh = 0.25 } },
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.insta_buy_or_sell,
"Quick Buy/Sell",
"Hold",
{
"to",
"buy or sell card on Left-Click",
"instead of selection",
}
),
{ n = G.UIT.R, config = { minh = 0.25 } },
Handy.UI.PARTS.create_module_checkbox(Handy.config.current.insta_use, "Quick use", "Hold", {
"to",
"use (if possible) card on Left-Click",
"instead of selection",
"(overrides Quick Buy/Sell)",
}),
{ n = G.UIT.R, config = { minh = 0.25 } },
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.move_highlight,
"Move highlight",
"Press",
{
"["
.. tostring(Handy.config.current.move_highlight.dx.one_left.key_1)
.. "] or ["
.. tostring(Handy.config.current.move_highlight.dx.one_right.key_1)
.. "]",
"to move highlight in card area.",
"Hold ["
.. tostring(Handy.config.current.move_highlight.swap.key_1)
.. "] to move card instead.",
"Hold ["
.. tostring(Handy.config.current.move_highlight.to_end.key_1)
.. "] to move to first/last card",
},
true
),
},
},
{
n = G.UIT.C,
config = { minw = 4 },
nodes = {
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.insta_cash_out,
"Quick Cash Out",
"Press",
{
"to",
"speedup animation and",
"skip Cash Out stage",
}
),
{ n = G.UIT.R, config = { minh = 0.25 } },
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.insta_booster_skip,
{ "Quick skip", "Booster Packs" },
"Hold",
{
"to",
"skip booster pack",
}
),
{ n = G.UIT.R, config = { minh = 0.25 } },
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.speed_multiplier,
"Speed Multiplier",
"Hold",
{
"and",
"[Wheel Up] to multiply or",
"[Wheel Down] to divide game speed",
}
),
{ n = G.UIT.R, config = { minh = 0.25 } },
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.shop_reroll,
"Shop Reroll",
"Press",
{
"to",
"reroll a shop",
}
),
{ n = G.UIT.R, config = { minh = 0.25 } },
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.play_and_discard,
"Play/Discard",
"Press",
{
"[" .. tostring(Handy.config.current.play_and_discard.play.key_1) .. "] to play a hand",
"or ["
.. tostring(Handy.config.current.play_and_discard.discard.key_1)
.. "] to discard",
},
true
),
},
},
},
},
}
end
Handy.UI.get_config_tab_interactions = function()
return {
{
n = G.UIT.R,
nodes = {
{
n = G.UIT.C,
nodes = {
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.nopeus_interaction,
{ "Nopeus:", "fast-forward" },
"Hold",
{
"and",
"[Wheel Up] to increase or",
"[Wheel Down] to decrease",
"fast-forward setting",
}
),
{
n = G.UIT.R,
config = { minh = 0.25 },
},
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.not_just_yet_interaction,
{ "NotJustYet:", "End round" },
"Press",
{
"to",
"end round",
}
),
},
},
},
},
}
end
Handy.UI.get_config_tab_dangerous = function()
return {
-- {
-- n = G.UIT.R,
-- config = { padding = 0.05, align = "cm" },
-- nodes = {
-- },
-- },
-- { n = G.UIT.R, config = { padding = 0.05 }, nodes = {} },
{
n = G.UIT.R,
nodes = {
{
n = G.UIT.C,
nodes = {
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.dangerous_actions,
{ "Dangerous", "actions" },
"Enable",
{
"unsafe controls. They're",
"designed to be speed-first,",
"which can cause bugs or crashes",
},
true
),
{ n = G.UIT.R, config = { minh = 0.5 } },
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.dangerous_actions.immediate_buy_and_sell,
"Instant Sell",
"Hold",
{
"to",
"sell card on hover",
"very fast",
}
),
{ n = G.UIT.R, config = { minh = 0.1 } },
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.dangerous_actions.immediate_buy_and_sell.queue,
"Sell Queue",
"Start",
{
"selling cards only when",
"keybind was released",
},
true
),
{ n = G.UIT.R, config = { minh = 0.25 } },
Handy.UI.PARTS.create_module_checkbox(
Handy.config.current.dangerous_actions.nopeus_unsafe,
{ "Nopeus: Unsafe", "fast-forward" },
"Allow",
{
"increase fast-forward",
'setting to "Unsafe"',
},
true
),
},
},
},
},
}
end
Handy.UI.get_config_tab_keybinds = function()
return {
Handy.UI.PARTS.create_module_section("Quick Actions"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.insta_buy_or_sell, "Quick Buy/Sell"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.insta_use, "Quick Use"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.insta_cash_out, "Quick Cash Out"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.insta_booster_skip, "Quick skip Booster Packs"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.shop_reroll, "Shop reroll"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.play_and_discard.play, "Play hand"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.play_and_discard.discard, "Discard"),
Handy.UI.PARTS.create_module_keybind(
Handy.config.current.dangerous_actions.immediate_buy_and_sell,
"Instant Buy/Sell",
false,
true
),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.not_just_yet_interaction, "NotJustYet: End round"),
}
end
Handy.UI.get_config_tab_keybinds_2 = function()
return {
Handy.UI.PARTS.create_module_section("Game state"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.speed_multiplier, "Speed Multiplier"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.nopeus_interaction, "Nopeus: fast-forward"),
Handy.UI.PARTS.create_module_section("Move highlight"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.move_highlight.dx.one_left, "Move one left"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.move_highlight.dx.one_right, "Move one right"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.move_highlight.swap, "Move card"),
Handy.UI.PARTS.create_module_keybind(Handy.config.current.move_highlight.to_end, "Move to end"),
}
end
Handy.UI.get_config_tab = function(_tab)
local result = {
n = G.UIT.ROOT,
config = { align = "cm", padding = 0.05, colour = G.C.CLEAR, minh = 5, minw = 5 },
nodes = {},
}
if _tab == "Overall" then
result.nodes = Handy.UI.get_config_tab_overall()
elseif _tab == "Interactions" then
result.nodes = Handy.UI.get_config_tab_interactions()
elseif _tab == "Dangerous" then
result.nodes = Handy.UI.get_config_tab_dangerous()
elseif _tab == "Keybinds" then
result.nodes = Handy.UI.get_config_tab_keybinds()
elseif _tab == "Keybinds 2" then
result.nodes = Handy.UI.get_config_tab_keybinds_2()
end
return result
end