Add restart button to level teleporter

master
Wuzzy 2022-02-11 03:18:10 +01:00
parent f62b5c8a5e
commit 92502d8210
2 changed files with 29 additions and 15 deletions

View File

@ -271,6 +271,20 @@ function lzr_levels.leave_level()
lzr_gamestate.set_state(lzr_gamestate.MENU)
end
function lzr_levels.get_current_level()
return current_level
end
function lzr_levels.restart_level()
local state = lzr_gamestate.get_state()
if state == lzr_gamestate.LEVEL or state == lzr_gamestate.EDITOR then
lzr_levels.start_level(current_level)
return true
else
return false
end
end
minetest.register_chatcommand("restart", {
privs = {},
params = "",
@ -278,7 +292,7 @@ minetest.register_chatcommand("restart", {
func = function(name, param)
local state = lzr_gamestate.get_state()
if state == lzr_gamestate.LEVEL or state == lzr_gamestate.EDITOR then
lzr_levels.start_level(current_level)
lzr_levels.restart_level()
return true
elseif state == lzr_gamestate.LEVEL_COMPLETE then
return false, S("Cant restart level right now.")

View File

@ -2,11 +2,13 @@ local S = minetest.get_translator("lzr_teleporter")
local F = minetest.formspec_escape
local open_leave_dialog = function(player)
local form = "formspec_version[4]size[7.5,2.5]"..
"label[0.5,0.5;"..F(S("Do you want to leave this level?")).."]"..
"button_exit[0.5,1;3,1;yes;"..F(S("Yes")).."]"..
"button_exit[4,1;3,1;no;"..F(S("No")).."]"
minetest.show_formspec(player:get_player_name(), "lzr_teleporter:leave", form)
local levelstr = tostring(lzr_levels.get_current_level())
local form = "formspec_version[4]size[7.5,4.5]"..
"label[0.5,0.5;"..F(S("You are in level @1.", levelstr)).."]"..
"button_exit[2.5,1;3,1;continue;"..F(S("Continue")).."]"..
"button_exit[2.5,2;3,1;restart;"..F(S("Restart level")).."]"..
"button_exit[2.5,3;3,1;leave;"..F(S("Leave level")).."]"
minetest.show_formspec(player:get_player_name(), "lzr_teleporter:level", form)
end
minetest.register_node("lzr_teleporter:teleporter", {
@ -20,9 +22,7 @@ minetest.register_node("lzr_teleporter:teleporter", {
"lzr_teleporter_rear.png",
},
on_punch = function(_, _, puncher)
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL or lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
open_leave_dialog(puncher)
end
open_leave_dialog(puncher)
end,
groups = { breakable = 1, teleporter = 2 },
sounds = lzr_sounds.node_sound_stone_defaults(),
@ -39,19 +39,19 @@ minetest.register_node("lzr_teleporter:teleporter_off", {
"lzr_teleporter_off_rear.png",
},
on_punch = function(_, _, puncher)
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL or lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
open_leave_dialog(puncher)
end
open_leave_dialog(puncher)
end,
groups = { breakable = 1, teleporter = 1 },
sounds = lzr_sounds.node_sound_stone_defaults(),
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname == "lzr_teleporter:leave" then
if fields.yes then
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL or lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
if formname == "lzr_teleporter:level" then
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL or lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
if fields.leave then
lzr_levels.leave_level()
elseif fields.restart then
lzr_levels.restart_level()
end
end
end