mirror of
https://github.com/minetest-mods/craftguide.git
synced 2024-11-22 19:03:43 +01:00
Fine-tune items positioning + Remove zoom in/out features
This commit is contained in:
parent
cb0200a222
commit
337ac898cd
110
init.lua
110
init.lua
@ -44,11 +44,10 @@ local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil
|
|||||||
local pairs, next = pairs, next
|
local pairs, next = pairs, next
|
||||||
local vec_add, vec_mul = vector.add, vector.multiply
|
local vec_add, vec_mul = vector.add, vector.multiply
|
||||||
|
|
||||||
local DEFAULT_SIZE = 10
|
local ROWS = sfinv_only and 9 or 11
|
||||||
local MIN_LIMIT, MAX_LIMIT = 10, 12
|
local LINES = 5
|
||||||
DEFAULT_SIZE = min(MAX_LIMIT, max(MIN_LIMIT, DEFAULT_SIZE))
|
local IPP = ROWS * LINES
|
||||||
|
local GRID_LIMIT = 8
|
||||||
local GRID_LIMIT = 6
|
|
||||||
|
|
||||||
local FMT = {
|
local FMT = {
|
||||||
box = "box[%f,%f;%f,%f;%s]",
|
box = "box[%f,%f;%f,%f;%s]",
|
||||||
@ -412,11 +411,11 @@ local function get_tooltip(item, groups, cooktime, burntime)
|
|||||||
return fmt("tooltip[%s;%s]", item, ESC(tooltip))
|
return fmt("tooltip[%s;%s]", item, ESC(tooltip))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_recipe_fs(data, iY)
|
local function get_recipe_fs(data)
|
||||||
local fs = {}
|
local fs = {}
|
||||||
local recipe = data.recipes[data.rnum]
|
local recipe = data.recipes[data.rnum]
|
||||||
local width = recipe.width
|
local width = recipe.width
|
||||||
local xoffset = data.iX / 2.15
|
local xoffset = sfinv_only and 4 or 4.92
|
||||||
local cooktime, shapeless
|
local cooktime, shapeless
|
||||||
|
|
||||||
if recipe.type == "cooking" then
|
if recipe.type == "cooking" then
|
||||||
@ -435,8 +434,8 @@ local function get_recipe_fs(data, iY)
|
|||||||
ESC(S("Recipe @1 of @2", data.rnum, #data.recipes))
|
ESC(S("Recipe @1 of @2", data.rnum, #data.recipes))
|
||||||
|
|
||||||
fs[#fs + 1] = fmt(FMT.button,
|
fs[#fs + 1] = fmt(FMT.button,
|
||||||
sfinv_only and 5.8 or data.iX - 2.6,
|
sfinv_only and 5.8 or 7.4,
|
||||||
sfinv_only and 7.9 or iY + 3.3,
|
sfinv_only and 8 or 8.4,
|
||||||
2.2,
|
2.2,
|
||||||
1,
|
1,
|
||||||
"alternate",
|
"alternate",
|
||||||
@ -444,8 +443,8 @@ local function get_recipe_fs(data, iY)
|
|||||||
|
|
||||||
if width > GRID_LIMIT or rows > GRID_LIMIT then
|
if width > GRID_LIMIT or rows > GRID_LIMIT then
|
||||||
fs[#fs + 1] = fmt(FMT.label,
|
fs[#fs + 1] = fmt(FMT.label,
|
||||||
(data.iX / 2) - 2,
|
sfinv_only and 2 or 3,
|
||||||
iY + 2.2,
|
7,
|
||||||
ESC(S("Recipe is too big to be displayed (@1x@2)", width, rows)))
|
ESC(S("Recipe is too big to be displayed (@1x@2)", width, rows)))
|
||||||
|
|
||||||
return concat(fs)
|
return concat(fs)
|
||||||
@ -453,9 +452,9 @@ local function get_recipe_fs(data, iY)
|
|||||||
|
|
||||||
for i = 1, width * rows do
|
for i = 1, width * rows do
|
||||||
local item = recipe.items[i] or ""
|
local item = recipe.items[i] or ""
|
||||||
local X = ceil((i - 1) % width + xoffset - width) -
|
local X = ceil((i - 1) % width - width) + xoffset -
|
||||||
(sfinv_only and 0 or 0.2)
|
(sfinv_only and 0 or 0.2)
|
||||||
local Y = ceil(i / width + (iY + 2) - min(2, rows))
|
local Y = ceil(i / width + (sfinv_only and 6 or 7) - min(2, rows))
|
||||||
|
|
||||||
if width > 3 or rows > 3 then
|
if width > 3 or rows > 3 then
|
||||||
local xof = 1 - 4 / width
|
local xof = 1 - 4 / width
|
||||||
@ -466,9 +465,10 @@ local function get_recipe_fs(data, iY)
|
|||||||
(3.5 + (xof * 2)) / width or (3.5 + (yof * 2)) / rows
|
(3.5 + (xof * 2)) / width or (3.5 + (yof * 2)) / rows
|
||||||
s_btn_size = btn_size
|
s_btn_size = btn_size
|
||||||
|
|
||||||
X = (btn_size * ((i - 1) % width) + xoffset - 2.49) * (0.83 - (x_y / 5))
|
X = (btn_size * ((i - 1) % width) + xoffset -
|
||||||
Y = (btn_size * floor((i - 1) / width) + (iY + (1.98 + (x_y * 1.2)))) *
|
(sfinv_only and 2.8 or 2.84)) * (0.83 - (x_y / 5))
|
||||||
(0.86 - (x_y / 5))
|
Y = (btn_size * floor((i - 1) / width) +
|
||||||
|
(5 + ((sfinv_only and 0.81 or 1.97) + x_y))) * (0.86 - (x_y / 5))
|
||||||
end
|
end
|
||||||
|
|
||||||
if X > rightest then
|
if X > rightest then
|
||||||
@ -486,7 +486,7 @@ local function get_recipe_fs(data, iY)
|
|||||||
|
|
||||||
fs[#fs + 1] = fmt(FMT.item_image_button,
|
fs[#fs + 1] = fmt(FMT.item_image_button,
|
||||||
X,
|
X,
|
||||||
Y + (sfinv_only and 0.7 or 0.2),
|
Y + (sfinv_only and 0.7 or 0),
|
||||||
btn_size,
|
btn_size,
|
||||||
btn_size,
|
btn_size,
|
||||||
item,
|
item,
|
||||||
@ -512,7 +512,7 @@ local function get_recipe_fs(data, iY)
|
|||||||
|
|
||||||
fs[#fs + 1] = fmt(FMT.image,
|
fs[#fs + 1] = fmt(FMT.image,
|
||||||
min(3.9, rightest) + 1.2,
|
min(3.9, rightest) + 1.2,
|
||||||
sfinv_only and 6.2 or iY + 1.7,
|
sfinv_only and 6.2 or 6.55,
|
||||||
0.5,
|
0.5,
|
||||||
0.5,
|
0.5,
|
||||||
icon)
|
icon)
|
||||||
@ -522,7 +522,7 @@ local function get_recipe_fs(data, iY)
|
|||||||
|
|
||||||
fs[#fs + 1] = fmt("tooltip[%f,%f;%f,%f;%s]",
|
fs[#fs + 1] = fmt("tooltip[%f,%f;%f,%f;%s]",
|
||||||
rightest + 1.2,
|
rightest + 1.2,
|
||||||
sfinv_only and 6.2 or iY + 1.7,
|
sfinv_only and 6.2 or 6.55,
|
||||||
0.5,
|
0.5,
|
||||||
0.5,
|
0.5,
|
||||||
ESC(tooltip))
|
ESC(tooltip))
|
||||||
@ -533,7 +533,7 @@ local function get_recipe_fs(data, iY)
|
|||||||
|
|
||||||
fs[#fs + 1] = fmt(FMT.image,
|
fs[#fs + 1] = fmt(FMT.image,
|
||||||
arrow_X,
|
arrow_X,
|
||||||
sfinv_only and 6.85 or iY + 2.35,
|
sfinv_only and 6.85 or 7.2,
|
||||||
0.9,
|
0.9,
|
||||||
0.7,
|
0.7,
|
||||||
"craftguide_arrow.png")
|
"craftguide_arrow.png")
|
||||||
@ -541,7 +541,7 @@ local function get_recipe_fs(data, iY)
|
|||||||
if recipe.type == "fuel" then
|
if recipe.type == "fuel" then
|
||||||
fs[#fs + 1] = fmt(FMT.image,
|
fs[#fs + 1] = fmt(FMT.image,
|
||||||
output_X,
|
output_X,
|
||||||
sfinv_only and 6.68 or iY + 2.18,
|
sfinv_only and 6.68 or 7,
|
||||||
1.1,
|
1.1,
|
||||||
1.1,
|
1.1,
|
||||||
"craftguide_fire.png")
|
"craftguide_fire.png")
|
||||||
@ -551,7 +551,7 @@ local function get_recipe_fs(data, iY)
|
|||||||
|
|
||||||
fs[#fs + 1] = fmt(FMT.item_image_button,
|
fs[#fs + 1] = fmt(FMT.item_image_button,
|
||||||
output_X,
|
output_X,
|
||||||
sfinv_only and 6.7 or iY + 2.2,
|
sfinv_only and 6.7 or 7,
|
||||||
1.1,
|
1.1,
|
||||||
1.1,
|
1.1,
|
||||||
recipe.output,
|
recipe.output,
|
||||||
@ -563,14 +563,14 @@ local function get_recipe_fs(data, iY)
|
|||||||
|
|
||||||
fs[#fs + 1] = fmt(FMT.image,
|
fs[#fs + 1] = fmt(FMT.image,
|
||||||
output_X + 1,
|
output_X + 1,
|
||||||
sfinv_only and 6.83 or iY + 2.33,
|
sfinv_only and 6.83 or 7.1,
|
||||||
0.6,
|
0.6,
|
||||||
0.4,
|
0.4,
|
||||||
"craftguide_arrow.png")
|
"craftguide_arrow.png")
|
||||||
|
|
||||||
fs[#fs + 1] = fmt(FMT.image,
|
fs[#fs + 1] = fmt(FMT.image,
|
||||||
output_X + 1.6,
|
output_X + 1.6,
|
||||||
sfinv_only and 6.68 or iY + 2.18,
|
sfinv_only and 6.68 or 6.95,
|
||||||
0.6,
|
0.6,
|
||||||
0.6,
|
0.6,
|
||||||
"craftguide_fire.png")
|
"craftguide_fire.png")
|
||||||
@ -582,39 +582,33 @@ end
|
|||||||
|
|
||||||
local function make_formspec(name)
|
local function make_formspec(name)
|
||||||
local data = pdata[name]
|
local data = pdata[name]
|
||||||
local iY = sfinv_only and 4 or data.iX - 5
|
data.pagemax = max(1, ceil(#data.items / IPP))
|
||||||
local ipp = data.iX * iY
|
|
||||||
|
|
||||||
data.pagemax = max(1, ceil(#data.items / ipp))
|
|
||||||
|
|
||||||
local fs = {}
|
local fs = {}
|
||||||
|
|
||||||
if not sfinv_only then
|
if not sfinv_only then
|
||||||
fs[#fs + 1] = fmt("size[%f,%f;]", data.iX - 0.35, iY + 4)
|
fs[#fs + 1] = fmt("size[%f,%f;]", 9.62, 9)
|
||||||
|
|
||||||
fs[#fs + 1] = [[
|
fs[#fs + 1] = [[
|
||||||
no_prepend[]
|
no_prepend[]
|
||||||
background[1,1;1,1;craftguide_bg.png;true]
|
background[1,1;1,1;craftguide_bg.png;true]
|
||||||
]]
|
]]
|
||||||
|
|
||||||
fs[#fs + 1] = fmt([[
|
|
||||||
image_button[%f,0.12;0.8,0.8;craftguide_zoomin_icon.png;size_inc;]
|
|
||||||
image_button[%f,0.12;0.8,0.8;craftguide_zoomout_icon.png;size_dec;]
|
|
||||||
]],
|
|
||||||
data.iX * 0.47,
|
|
||||||
data.iX * 0.47 + 0.6)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
fs[#fs + 1] = fmt("field[0.3,0.33;2.5,1;filter;;%s]", ESC(data.filter))
|
fs[#fs + 1] = fmt("field[0.3,0.33;%f,1;filter;;%s]",
|
||||||
|
sfinv_only and 2.75 or 2.72,
|
||||||
|
ESC(data.filter))
|
||||||
|
|
||||||
fs[#fs + 1] = [[
|
fs[#fs + 1] = fmt([[
|
||||||
image_button[2.4,0.12;0.8,0.8;craftguide_search_icon.png;search;]
|
image_button[%f,0.09;0.85,0.85;craftguide_search_icon.png;search;]
|
||||||
image_button[3.05,0.12;0.8,0.8;craftguide_clear_icon.png;clear;]
|
image_button[%f,0.09;0.85,0.85;craftguide_clear_icon.png;clear;]
|
||||||
field_close_on_enter[filter;false]
|
field_close_on_enter[filter;false]
|
||||||
]]
|
]],
|
||||||
|
sfinv_only and 2.65 or 2.6,
|
||||||
|
sfinv_only and 3.35 or 3.3)
|
||||||
|
|
||||||
fs[#fs + 1] = fmt("label[%f,%f;%s / %u]",
|
fs[#fs + 1] = fmt("label[%f,%f;%s / %u]",
|
||||||
sfinv_only and 6.3 or data.iX - 2.2,
|
sfinv_only and 6.3 or 7.8,
|
||||||
0.22,
|
0.22,
|
||||||
colorize("yellow", data.pagenum),
|
colorize("yellow", data.pagenum),
|
||||||
data.pagemax)
|
data.pagemax)
|
||||||
@ -623,12 +617,12 @@ local function make_formspec(name)
|
|||||||
image_button[%f,0.12;0.8,0.8;craftguide_prev_icon.png;prev;]
|
image_button[%f,0.12;0.8,0.8;craftguide_prev_icon.png;prev;]
|
||||||
image_button[%f,0.12;0.8,0.8;craftguide_next_icon.png;next;]
|
image_button[%f,0.12;0.8,0.8;craftguide_next_icon.png;next;]
|
||||||
]],
|
]],
|
||||||
sfinv_only and 5.5 or data.iX - 3.1,
|
sfinv_only and 5.5 or 6.88,
|
||||||
sfinv_only and 7.3 or (data.iX - 1.2) - (data.iX >= 11 and 0.08 or 0))
|
sfinv_only and 7.25 or 8.8)
|
||||||
|
|
||||||
if #data.items == 0 then
|
if #data.items == 0 then
|
||||||
local no_item = S("No item to show")
|
local no_item = S("No item to show")
|
||||||
local pos = (data.iX / 2) - 1
|
local pos = sfinv_only and 3 or 3.8
|
||||||
|
|
||||||
if next(recipe_filters) and #init_items > 0 and data.filter == "" then
|
if next(recipe_filters) and #init_items > 0 and data.filter == "" then
|
||||||
no_item = S("Collect items to reveal more recipes")
|
no_item = S("Collect items to reveal more recipes")
|
||||||
@ -638,25 +632,25 @@ local function make_formspec(name)
|
|||||||
fs[#fs + 1] = fmt(FMT.label, pos, 2, ESC(no_item))
|
fs[#fs + 1] = fmt(FMT.label, pos, 2, ESC(no_item))
|
||||||
end
|
end
|
||||||
|
|
||||||
local first_item = (data.pagenum - 1) * ipp
|
local first_item = (data.pagenum - 1) * IPP
|
||||||
for i = first_item, first_item + ipp - 1 do
|
for i = first_item, first_item + IPP - 1 do
|
||||||
local item = data.items[i + 1]
|
local item = data.items[i + 1]
|
||||||
if not item then break end
|
if not item then break end
|
||||||
|
|
||||||
local X = i % data.iX
|
local X = i % ROWS
|
||||||
local Y = (i % ipp - X) / data.iX + 1
|
local Y = (i % IPP - X) / ROWS + 1
|
||||||
|
|
||||||
fs[#fs + 1] = fmt("item_image_button[%f,%f;%f,%f;%s;%s_inv;]",
|
fs[#fs + 1] = fmt("item_image_button[%f,%f;%f,%f;%s;%s_inv;]",
|
||||||
X - (sfinv_only and 0 or (X * 0.05)),
|
X - (X * (sfinv_only and 0.12 or 0.14)),
|
||||||
Y,
|
Y - (Y * 0.1) + 0.1,
|
||||||
1.1,
|
1,
|
||||||
1.1,
|
1,
|
||||||
item,
|
item,
|
||||||
item)
|
item)
|
||||||
end
|
end
|
||||||
|
|
||||||
if data.recipes and #data.recipes > 0 then
|
if data.recipes and #data.recipes > 0 then
|
||||||
fs[#fs + 1] = get_recipe_fs(data, iY)
|
fs[#fs + 1] = get_recipe_fs(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
return concat(fs)
|
return concat(fs)
|
||||||
@ -747,7 +741,6 @@ local function init_data(name)
|
|||||||
pdata[name] = {
|
pdata[name] = {
|
||||||
filter = "",
|
filter = "",
|
||||||
pagenum = 1,
|
pagenum = 1,
|
||||||
iX = sfinv_only and 8 or DEFAULT_SIZE,
|
|
||||||
items = init_items,
|
items = init_items,
|
||||||
items_raw = init_items,
|
items_raw = init_items,
|
||||||
}
|
}
|
||||||
@ -838,13 +831,6 @@ local function _fields(player, fields)
|
|||||||
|
|
||||||
show_fs(player, name)
|
show_fs(player, name)
|
||||||
return true
|
return true
|
||||||
|
|
||||||
elseif (_f.size_inc and data.iX < MAX_LIMIT) or
|
|
||||||
(_f.size_dec and data.iX > MIN_LIMIT) then
|
|
||||||
data.pagenum = 1
|
|
||||||
data.iX = data.iX + (_f.size_inc and 1 or -1)
|
|
||||||
show_fs(player, name)
|
|
||||||
return true
|
|
||||||
else
|
else
|
||||||
local item
|
local item
|
||||||
for field in pairs(_f) do
|
for field in pairs(_f) do
|
||||||
|
Loading…
Reference in New Issue
Block a user