From e16893f82e318e8a45d17692acc0f4b06666342e Mon Sep 17 00:00:00 2001 From: Hugues Ross Date: Tue, 21 Apr 2020 07:36:48 -0400 Subject: [PATCH] Add height mode toggle to maps --- items.lua | 30 ++++++++++++++++++------ skin_api.lua | 3 +++ textures/cartographer_flat_button.png | Bin 0 -> 1041 bytes textures/cartographer_height_button.png | Bin 0 -> 1053 bytes 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 textures/cartographer_flat_button.png create mode 100644 textures/cartographer_height_button.png diff --git a/items.lua b/items.lua index fa89a47..b78548d 100644 --- a/items.lua +++ b/items.lua @@ -6,22 +6,33 @@ local player_maps = {}; -- player_x: The X position (in world coordinates) -- player_z: The Z position (in world coordinates) -- player_name: The name of the player to show to +-- height_mode: Whether or not to display the map in height mode -- (Optional) marker_page: The current page that the marker editor is on -local function show_map_id_formspec(id, player_x, player_z, player_name, marker_page) +local function show_map_id_formspec(id, player_x, player_z, player_name, height_mode, marker_page) cartographer.fill_local(id, player_x, player_z); player_maps[player_name] = { id = id, page = marker_page or 1, + height_mode = height_mode, }; local map = cartographer.get_map(id); player_x, player_z = cartographer.to_map_coordinates(map, player_x, player_z) - local formspec, formspec_width, formspec_height = cartographer.get_map_formspec_map(data, map, player_x, player_z); + local formspec, formspec_width, formspec_height = cartographer.get_map_formspec_map(data, map, player_x, player_z, height_mode); if #_cartographer.marker_lookup > 0 then - formspec = formspec .. string.format("style_type[button,image_button,label;noclip=true] container[%f,0.5]", formspec_width - 0.01) + formspec = formspec .. string.format("style_type[button,image_button,label;noclip=true] container[%f,1.0]", formspec_width - 0.01) .. _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[]"; + .. "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 + formspec = formspec .. string.format("image_button[0.125,0.125;0.5,0.5;%s.png;height_button;]", cartographer.skin.height_button_texture) + else + formspec = formspec .. string.format("image_button[0.125,0.125;0.5,0.5;%s.png;height_button;]", cartographer.skin.flat_button_texture) + end + + formspec = formspec .. "container_end[]"; end minetest.show_formspec(player_name, "cartographer:map", formspec); end @@ -61,7 +72,7 @@ local function show_map_meta(meta, player) id = map_from_meta(meta, player_x, player_z); end - show_map_id_formspec(id, pos.x, pos.z, player:get_player_name()); + show_map_id_formspec(id, pos.x, pos.z, player:get_player_name(), true); end -- Called when a player sends input to the server from a formspec @@ -72,6 +83,9 @@ end minetest.register_on_player_receive_fields(function(player, name, fields) if name == "cartographer:map" then local data = player_maps[player:get_player_name()]; + if not data then + return; + end local map = cartographer.get_map(data.id); if not map then @@ -88,9 +102,11 @@ minetest.register_on_player_receive_fields(function(player, name, fields) cartographer.map_sound("cartographer_write", player); show_map_id_formspec(map.id, pos.x, pos.z, player:get_player_name(), data.page); elseif k == "prev_button" then - show_map_id_formspec(map.id, pos.x, pos.z, player:get_player_name(), data.page - 1); + show_map_id_formspec(map.id, pos.x, pos.z, player:get_player_name(), data.height_mode, data.page - 1); elseif k == "next_button" then - show_map_id_formspec(map.id, pos.x, pos.z, player:get_player_name(), data.page + 1); + show_map_id_formspec(map.id, pos.x, pos.z, player:get_player_name(), data.height_mode, data.page + 1); + elseif k == "height_button" then + show_map_id_formspec(map.id, pos.x, pos.z, player:get_player_name(), not data.height_mode, data.page); elseif k == "quit" then player_maps[player:get_player_name()] = nil; end diff --git a/skin_api.lua b/skin_api.lua index c87ebcc..a5dbb3a 100644 --- a/skin_api.lua +++ b/skin_api.lua @@ -177,4 +177,7 @@ cartographer.skin = { pressed_texture = "cartographer_simple_table_button_pressed", radius = 8, }, + + height_button_texture = "cartographer_height_button", + flat_button_texture = "cartographer_flat_button", }; diff --git a/textures/cartographer_flat_button.png b/textures/cartographer_flat_button.png new file mode 100644 index 0000000000000000000000000000000000000000..a55b046f5dc45d74fc021f8a61ab084ed0e64560 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR?>;UF~n5-k;mMd+ti0 z)F>DYfsqgbxw*NkR;~K~|Nlt^4|kx41xtebf`MEVz@WNzW)e`6zr;17Bsf2W&>Fco-U3d5>xl~9pq(D;9%z8-SFFATfyz|>FM7UUaGRb z5dS0cOys6JV|VZu9FChm)Co4)C1crR=&0XcmK~tDnm{ Hr-UW|MJHq8 literal 0 HcmV?d00001 diff --git a/textures/cartographer_height_button.png b/textures/cartographer_height_button.png new file mode 100644 index 0000000000000000000000000000000000000000..a2202c1da39b10998bba766531198ef8beda1b3f GIT binary patch literal 1053 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR?>;UF~n5-k;mMd+ti0 z)F>DYfsqgbxw*NkR;~K~|Nlt^4|kx41xtebf`MEVz@WNzW)e`6zr;17Bsf2W&>G1o-U3d5>tEoPxCSua5yoFzxa3gn*Zz@^Pc>0Xo{F` zz*