mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-22 13:52:31 +01:00
Better chest color button layout
Where possible (which it currently is for the gold chest), don't break the centering of the player inventory in the chest formspec because of the color buttons. Where the color buttons don't fit next to a perfectly centered player inventory (which doesn't currently occur for any technic chest), move the player inventory only as much as necessary to accommodate the color buttons.
This commit is contained in:
parent
1d7cb74053
commit
1bf52c2d5a
@ -31,13 +31,13 @@ local function colorid_to_postfix(id)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function get_color_buttons(loleft, lotop)
|
local function get_color_buttons(coleft, lotop)
|
||||||
local buttons_string = ""
|
local buttons_string = ""
|
||||||
for y = 0, 3 do
|
for y = 0, 3 do
|
||||||
for x = 0, 3 do
|
for x = 0, 3 do
|
||||||
local file_name = "technic_colorbutton"..(y * 4 + x)..".png"
|
local file_name = "technic_colorbutton"..(y * 4 + x)..".png"
|
||||||
buttons_string = buttons_string.."image_button["
|
buttons_string = buttons_string.."image_button["
|
||||||
..(loleft + 8.1 + x * 0.7)..","..(lotop + 0.1 + y * 0.7)
|
..(coleft + 0.1 + x * 0.7)..","..(lotop + 0.1 + y * 0.7)
|
||||||
..";0.8,0.8;"..file_name..";color_button"
|
..";0.8,0.8;"..file_name..";color_button"
|
||||||
..(y * 4 + x + 1)..";]"
|
..(y * 4 + x + 1)..";]"
|
||||||
end
|
end
|
||||||
@ -59,26 +59,21 @@ end
|
|||||||
local function set_formspec(pos, data, page)
|
local function set_formspec(pos, data, page)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
local formspec = data.formspec
|
local formspec = data.base_formspec
|
||||||
local lowidth = data.color and 11 or 8
|
|
||||||
local ovwidth = math.max(lowidth, data.width)
|
|
||||||
local hileft = (ovwidth - data.width) / 2
|
|
||||||
local loleft = (ovwidth - lowidth) / 2
|
|
||||||
local lotop = data.height + 2
|
|
||||||
if data.autosort then
|
if data.autosort then
|
||||||
local status = meta:get_int("autosort")
|
local status = meta:get_int("autosort")
|
||||||
formspec = formspec.."button["..(hileft+2)..","..(data.height+1.1)..";3,0.8;autosort_to_"..(1-status)..";"..S("Auto-sort is %s"):format(status == 1 and S("On") or S("Off")).."]"
|
formspec = formspec.."button["..(data.hileft+2)..","..(data.height+1.1)..";3,0.8;autosort_to_"..(1-status)..";"..S("Auto-sort is %s"):format(status == 1 and S("On") or S("Off")).."]"
|
||||||
end
|
end
|
||||||
if data.infotext then
|
if data.infotext then
|
||||||
local formspec_infotext = minetest.formspec_escape(meta:get_string("infotext"))
|
local formspec_infotext = minetest.formspec_escape(meta:get_string("infotext"))
|
||||||
if page == "main" then
|
if page == "main" then
|
||||||
formspec = formspec.."image_button["..(hileft+2.1)..",0.1;0.8,0.8;"
|
formspec = formspec.."image_button["..(data.hileft+2.1)..",0.1;0.8,0.8;"
|
||||||
.."technic_pencil_icon.png;edit_infotext;]"
|
.."technic_pencil_icon.png;edit_infotext;]"
|
||||||
.."label["..(hileft+3)..",0;"..formspec_infotext.."]"
|
.."label["..(data.hileft+3)..",0;"..formspec_infotext.."]"
|
||||||
elseif page == "edit_infotext" then
|
elseif page == "edit_infotext" then
|
||||||
formspec = formspec.."image_button["..(hileft+2.1)..",0.1;0.8,0.8;"
|
formspec = formspec.."image_button["..(data.hileft+2.1)..",0.1;0.8,0.8;"
|
||||||
.."technic_checkmark_icon.png;save_infotext;]"
|
.."technic_checkmark_icon.png;save_infotext;]"
|
||||||
.."field["..(hileft+3.3)..",0.2;4.8,1;"
|
.."field["..(data.hileft+3.3)..",0.2;4.8,1;"
|
||||||
.."infotext_box;"..S("Edit chest description:")..";"
|
.."infotext_box;"..S("Edit chest description:")..";"
|
||||||
..formspec_infotext.."]"
|
..formspec_infotext.."]"
|
||||||
end
|
end
|
||||||
@ -91,7 +86,7 @@ local function set_formspec(pos, data, page)
|
|||||||
else
|
else
|
||||||
colorName = S("None")
|
colorName = S("None")
|
||||||
end
|
end
|
||||||
formspec = formspec.."label["..(loleft+8.2)..","..(lotop+3)..";"..S("Color Filter: %s"):format(colorName).."]"
|
formspec = formspec.."label["..(data.coleft+0.2)..","..(data.lotop+3)..";"..S("Color Filter: %s"):format(colorName).."]"
|
||||||
end
|
end
|
||||||
meta:set_string("formspec", formspec)
|
meta:set_string("formspec", formspec)
|
||||||
end
|
end
|
||||||
@ -171,28 +166,43 @@ end
|
|||||||
function technic.chests:definition(name, data)
|
function technic.chests:definition(name, data)
|
||||||
local lname = name:lower()
|
local lname = name:lower()
|
||||||
name = S(name)
|
name = S(name)
|
||||||
|
local d = {}
|
||||||
|
for k, v in pairs(data) do d[k] = v end
|
||||||
|
data = d
|
||||||
|
|
||||||
local lowidth = data.color and 11 or 8
|
data.lowidth = 8
|
||||||
local ovwidth = math.max(lowidth, data.width)
|
data.ovwidth = math.max(data.lowidth, data.width)
|
||||||
local hileft = (ovwidth - data.width) / 2
|
data.hileft = (data.ovwidth - data.width) / 2
|
||||||
local loleft = (ovwidth - lowidth) / 2
|
data.loleft = (data.ovwidth - data.lowidth) / 2
|
||||||
local lotop = data.height + 2
|
if data.color then
|
||||||
local ovheight = lotop + 4
|
if data.lowidth + 3 <= data.ovwidth then
|
||||||
|
data.coleft = data.ovwidth - 3
|
||||||
|
if data.loleft + data.lowidth > data.coleft then
|
||||||
|
data.loleft = data.coleft - data.lowidth
|
||||||
|
end
|
||||||
|
else
|
||||||
|
data.loleft = 0
|
||||||
|
data.coleft = data.lowidth
|
||||||
|
data.ovwidth = data.lowidth + 3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
data.lotop = data.height + 2
|
||||||
|
data.ovheight = data.lotop + 4
|
||||||
|
|
||||||
local locked_after_place = nil
|
local locked_after_place = nil
|
||||||
local front = {"technic_"..lname.."_chest_front.png"}
|
local front = {"technic_"..lname.."_chest_front.png"}
|
||||||
data.formspec = "invsize["..ovwidth..","..ovheight..";]"..
|
data.base_formspec = "invsize["..data.ovwidth..","..data.ovheight..";]"..
|
||||||
"label[0,0;"..S("%s Chest"):format(name).."]"..
|
"label[0,0;"..S("%s Chest"):format(name).."]"..
|
||||||
"list[current_name;main;"..hileft..",1;"..data.width..","..data.height..";]"..
|
"list[current_name;main;"..data.hileft..",1;"..data.width..","..data.height..";]"..
|
||||||
"list[current_player;main;"..loleft..","..lotop..";8,4;]"..
|
"list[current_player;main;"..data.loleft..","..data.lotop..";8,4;]"..
|
||||||
"background[-0.19,-0.25;"..(ovwidth+0.4)..","..(ovheight+0.75)..";ui_form_bg.png]"..
|
"background[-0.19,-0.25;"..(data.ovwidth+0.4)..","..(data.ovheight+0.75)..";ui_form_bg.png]"..
|
||||||
"background["..hileft..",1;"..data.width..","..data.height..";technic_"..lname.."_chest_inventory.png]"..
|
"background["..data.hileft..",1;"..data.width..","..data.height..";technic_"..lname.."_chest_inventory.png]"..
|
||||||
"background["..loleft..","..lotop..";8,4;ui_main_inventory.png]"
|
"background["..data.loleft..","..data.lotop..";8,4;ui_main_inventory.png]"
|
||||||
if data.sort then
|
if data.sort then
|
||||||
data.formspec = data.formspec.."button["..hileft..","..(data.height+1.1)..";1,0.8;sort;"..S("Sort").."]"
|
data.base_formspec = data.base_formspec.."button["..data.hileft..","..(data.height+1.1)..";1,0.8;sort;"..S("Sort").."]"
|
||||||
end
|
end
|
||||||
if data.color then
|
if data.color then
|
||||||
data.formspec = data.formspec..get_color_buttons(loleft, lotop)
|
data.base_formspec = data.base_formspec..get_color_buttons(data.coleft, data.lotop)
|
||||||
end
|
end
|
||||||
|
|
||||||
if data.locked then
|
if data.locked then
|
||||||
|
Loading…
Reference in New Issue
Block a user