aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeha <shacknetisp@mail.com>2017-03-08 17:05:10 -0500
committerBeha <shacknetisp@mail.com>2017-03-08 17:05:10 -0500
commitfb550e1da4271bbc2310394d82f119afd5f3db08 (patch)
tree9778c8f9a7ebc588f6f670645c3a139a72140841
parentd2cf183c5256e7b4840d1b0c8f2f133cb85b7b19 (diff)
downloadelevator-fb550e1da4271bbc2310394d82f119afd5f3db08.tar.gz
elevator-fb550e1da4271bbc2310394d82f119afd5f3db08.tar.bz2
elevator-fb550e1da4271bbc2310394d82f119afd5f3db08.zip
One-click formspec.
-rw-r--r--init.lua37
1 files changed, 23 insertions, 14 deletions
diff --git a/init.lua b/init.lua
index d93739c..c0fa029 100644
--- a/init.lua
+++ b/init.lua
@@ -98,17 +98,8 @@ local function build_motor(hash)
end
end
for i,m in ipairs(motor.elevators) do
- local tpnames = {}
local pos = minetest.string_to_pos(m)
local meta = minetest.get_meta(pos)
- for ji,jv in ipairs(motor.pnames) do
- if ji ~= i then
- table.insert(tpnames, jv)
- end
- end
- meta:set_string("elevator_formspec", "size[3,2]"
- .."dropdown[0,0;3;target;"..table.concat(tpnames, ",")..";1]"
- .."button_exit[0,1;3,1;go;Go]")
meta:set_int("version", VERSION)
if meta:get_string("formspec") ~= "" then
meta:set_string("formspec", "")
@@ -275,8 +266,25 @@ minetest.register_node(nodename, {
minetest.chat_send_player(sender:get_player_name(), "You are not inside the booth.")
return
end
- formspecs[sender:get_player_name()] = pos
- minetest.show_formspec(sender:get_player_name(), "elevator:elevator", meta:get_string("elevator_formspec"))
+ local formspec
+ local tpnames = {}
+ local motorhash = meta:get_string("motor")
+ local motor = elevator.motors[motorhash]
+ for ji,jv in ipairs(motor.pnames) do
+ if tonumber(jv) ~= pos.y then
+ table.insert(tpnames, jv)
+ end
+ end
+ formspecs[sender:get_player_name()] = {pos, tpnames}
+ if #tpnames > 0 then
+ formspec = "size[4,5]"
+ .."label[0,0;Click once to travel.]"
+ .."textlist[-0.1,0.5;4,4.5;target;"..table.concat(tpnames, ",").."]"
+ else
+ formspec = "size[4,1]"
+ .."label[0,0;No targets available.]"
+ end
+ minetest.show_formspec(sender:get_player_name(), "elevator:elevator", formspec)
elseif not elevator.motors[meta:get_string("motor")] then
minetest.chat_send_player(sender:get_player_name(), "This elevator is inactive.")
elseif boxes[meta:get_string("motor")] then
@@ -295,7 +303,7 @@ minetest.register_on_player_receive_fields(function(sender, formname, fields)
if formname ~= "elevator:elevator" then
return
end
- local pos = formspecs[sender:get_player_name()]
+ local pos = formspecs[sender:get_player_name()] and formspecs[sender:get_player_name()][1] or nil
if not pos then
return
end
@@ -303,7 +311,8 @@ minetest.register_on_player_receive_fields(function(sender, formname, fields)
if vector.distance(sender:get_pos(), pos) > 1 or boxes[meta:get_string("motor")] then
return
end
- if fields.go then
+ if fields.target then
+ minetest.after(0.1, minetest.show_formspec, sender:get_player_name(), "elevator:elevator", "")
local motorhash = meta:get_string("motor")
local motor = elevator.motors[motorhash]
if not motor then
@@ -322,7 +331,7 @@ minetest.register_on_player_receive_fields(function(sender, formname, fields)
end
local target = nil
for i,v in ipairs(motor.pnames) do
- if v == fields.target then
+ if v == formspecs[sender:get_player_name()][2][minetest.explode_textlist_event(fields.target).index] then
target = minetest.string_to_pos(motor.elevators[i])
end
end