items.lua: Start formspec cleanup and refactor map description into a function

This commit is contained in:
Hugues Ross 2020-06-07 20:35:17 -04:00
parent 43c193279d
commit 93b6ab6ee8
3 changed files with 71 additions and 13 deletions

View File

@ -41,6 +41,18 @@ end
function gui.container(args) function gui.container(args)
local data = string.format("container[%f,%f]", args.x, args.y); local data = string.format("container[%f,%f]", args.x, args.y);
if args.bg then
data = data .. gui.bg9 {
x = 0,
y = 0,
w = args.w,
h = args.h,
skin = args.bg,
};
end
for _,element in ipairs(args) do for _,element in ipairs(args) do
data = data .. element; data = data .. element;
end end

View File

@ -56,7 +56,7 @@ cartographer.skin = loadfile(modpath .. "/skin_api.lua") ();
cartographer.gui = loadfile(modpath .. "/formspec.lua") (); cartographer.gui = loadfile(modpath .. "/formspec.lua") ();
loadfile(modpath .. "/scanner.lua") (map_data, chunk); loadfile(modpath .. "/scanner.lua") (map_data, chunk);
loadfile(modpath .. "/map_api.lua") (chunk); loadfile(modpath .. "/map_api.lua") (chunk);
loadfile(modpath .. "/items.lua") (chunk); loadfile(modpath .. "/items.lua") (chunk, cartographer.gui, cartographer.skin);
_cartographer.generate_marker_formspec = loadfile(modpath .. "/marker_formspec.lua") (_cartographer.marker_lookup, cartographer.gui); _cartographer.generate_marker_formspec = loadfile(modpath .. "/marker_formspec.lua") (_cartographer.marker_lookup, cartographer.gui);
loadfile(modpath .. "/map_formspec.lua") (map_data); loadfile(modpath .. "/map_formspec.lua") (map_data);
loadfile(modpath .. "/commands.lua") (); loadfile(modpath .. "/commands.lua") ();

View File

@ -1,4 +1,4 @@
local chunk = ... local chunk, gui, skin = ...
-- The list of players looking at maps, and the map IDs that they're looking at -- The list of players looking at maps, and the map IDs that they're looking at
local player_maps = {}; local player_maps = {};
@ -23,22 +23,64 @@ local function show_map_id_formspec(id, player_x, player_z, player_name, height_
player_x, player_z = cartographer.to_map_coordinates(map, player_x, player_z) player_x, player_z = cartographer.to_map_coordinates(map, player_x, player_z)
local formspec, formspec_width, _ = cartographer.get_map_formspec_map(map, player_x, player_z, height_mode); local formspec, formspec_width, _ = cartographer.get_map_formspec_map(map, player_x, player_z, height_mode);
if #_cartographer.marker_lookup > 0 then if #_cartographer.marker_lookup > 0 then
formspec = formspec .. string.format("style_type[button,image_button,label;noclip=true] container[%f,1.0]", formspec_width - 0.01) local height_button_texture;
.. _cartographer.generate_marker_formspec(cartographer.get_marker(map, player_x, player_z), map.detail, marker_page or 1, cartographer.skin.marker_bg, cartographer.skin.marker_button)
.. "container_end[]"
.. string.format("container[%f,0.125]", formspec_width - 0.01)
.. string.format("background9[0,0;0.75,0.75;%s.png;false;%s]", cartographer.skin.marker_bg.texture, tostring(cartographer.skin.marker_bg.radius));
if height_mode then if height_mode then
formspec = formspec .. string.format("image_button[0.125,0.125;0.5,0.5;%s.png;height_button;]", cartographer.skin.height_button_texture) height_button_texture = skin.height_button_texture .. ".png";
else else
formspec = formspec .. string.format("image_button[0.125,0.125;0.5,0.5;%s.png;height_button;]", cartographer.skin.flat_button_texture) height_button_texture = skin.flat_button_texture .. ".png";
end end
formspec = formspec .. "tooltip[height_button;Toggle height view] container_end[]"; local data = {
gui.style_type {
selector = "button,image_button,label",
properties = {
noclip = true,
}
},
gui.container {
x = formspec_width - 0.01,
y = 1,
bg = skin.marker_bg,
_cartographer.generate_marker_formspec(cartographer.get_marker(map, player_x, player_z), map.detail, marker_page or 1, skin.marker_bg, skin.marker_button),
},
gui.container {
x = formspec_width - 0.01,
y = 0.125,
w = 0.75,
h = 0.75,
bg = skin.marker_bg,
gui.image_button {
x = 0.125,
y = 0.125,
w = 0.5,
h = 0.5,
id = "height_button",
image = height_button_texture,
tooltip = "Toggle height view",
}
},
};
formspec = formspec .. table.concat(data);
end end
minetest.show_formspec(player_name, "cartographer:map", formspec); minetest.show_formspec(player_name, "cartographer:map", formspec);
end end
-- Get the description text for a map ID and dimensions
-- id: The map ID
-- from_x: The x coordinate of the top-left corner of the map, in world coordinates
-- from_z: The z coordinate of the top-left corner of the map, in world coordinates
-- w: The width, in world coordinates
-- h: The height, in world coordinates
local function map_description(id, from_x, from_z, w, h)
return string.format("Map #%d\n[%d,%d] - [%d,%d]",
id,
chunk.from(from_x), chunk.from(from_z),
chunk.from(from_x + w), chunk.from(from_z + h));
end
-- Create a map from metadata, and assign the ID to the metadata -- Create a map from metadata, and assign the ID to the metadata
-- meta: A metadata object containing the map ID -- meta: A metadata object containing the map ID
-- player_x: The X position (in map coordinates) -- player_x: The X position (in map coordinates)
@ -56,7 +98,7 @@ local function map_from_meta(meta, player_x, player_z)
local id = cartographer.create_map(map_x, map_y, size, size, false, detail, scale); local id = cartographer.create_map(map_x, map_y, size, size, false, detail, scale);
meta:set_int("cartographer:map_id", id); meta:set_int("cartographer:map_id", id);
meta:set_string("description", "Map #" .. tostring(id) .. "\n[" .. tostring(chunk.from(map_x)) .. "," .. tostring(chunk.from(map_y)) .. "] - [" .. tostring(chunk.from(map_x + total_size)) .. "," .. tostring(chunk.from(map_y + total_size)) .. "]") meta:set_string("description", map_description(id, map_x, map_y, total_size, total_size));
return id; return id;
end end
@ -237,7 +279,9 @@ function cartographer.copy_map_item(stack)
end end
copy_meta:set_int("cartographer:map_id", new_id); copy_meta:set_int("cartographer:map_id", new_id);
copy_meta:set_string("description", "Map #" .. tostring(new_id) .. "\n[" .. tostring(chunk.from(dest.x)) .. "," .. tostring(chunk.from(dest.z)) .. "] - [" .. tostring(chunk.from(dest.x + dest.w)) .. "," .. tostring(chunk.from(dest.z + dest.h)) .. "]") copy_meta:set_string("description", map_description(new_id,
dest.x, dest.z,
dest.w, dest.h));
end end
return copy; return copy;
@ -257,6 +301,8 @@ function cartographer.resize_map_item(meta, size)
local map = cartographer.get_map(id); local map = cartographer.get_map(id);
cartographer.resize_map(id, size, size); cartographer.resize_map(id, size, size);
meta:set_string("description", "Map #" .. tostring(id) .. "\n[" .. tostring(chunk.from(map.x)) .. "," .. tostring(chunk.from(map.z)) .. "] - [" .. tostring(chunk.from(map.x + map.w)) .. "," .. tostring(chunk.from(map.z + map.h)) .. "]") copy_meta:set_string("description", map_description(id,
chunk.from(map.x), chunk.from(map.z),
chunk.from(map.w), chunk.from(map.h)));
end end
end end