Editor: Allow saving and loading

master
Wuzzy 2022-01-13 02:01:10 +01:00
parent c7243d410c
commit 3eadc65860
1 changed files with 51 additions and 0 deletions

View File

@ -30,6 +30,57 @@ minetest.register_chatcommand("editor", {
end,
})
-- Dummy save and load functions (only 1 level name supported for now)
minetest.register_chatcommand("editor_save", {
privs = { server = true },
description = S("Save current level"),
params = "",
func = function(name, param)
-- TODO: Don't save the lasers
if lzr_gamestate.get_state() ~= lzr_gamestate.EDITOR then
return false, S("Not in editor mode!")
end
local num = tonumber(param)
local level_name = "level_custom_1"
minetest.mkdir(minetest.get_worldpath().."/levels")
local filename = minetest.get_worldpath().."/levels/"..level_name..".mts"
local ok = minetest.create_schematic(lzr_globals.LEVEL_POS, vector.add(lzr_globals.LEVEL_POS, lzr_globals.PLAYFIELD_SIZE), {}, filename, {})
if ok then
minetest.log("action", "[lzr_editor] Level written to "..filename)
return true, S("Level saved to @1.", filename)
else
minetest.log("error", "[lzr_editor] Failed to write level to "..filename)
return false, S("Error writing level file!")
end
end,
})
minetest.register_chatcommand("editor_load", {
privs = { server = true },
description = S("Load level"),
params = "",
func = function(name, param)
if lzr_gamestate.get_state() ~= lzr_gamestate.EDITOR then
return false, S("Not in editor mode!")
end
local level_name = "level_custom_1"
minetest.mkdir(minetest.get_worldpath().."/levels")
local filename = minetest.get_worldpath().."/levels/"..level_name..".mts"
local schem = minetest.read_schematic(filename, {})
if schem then
minetest.place_schematic(lzr_globals.LEVEL_POS, schem, "0", {}, true, {})
minetest.log("action", "[lzr_editor] Level loaded from "..filename)
return true, S("Level loaded.")
else
minetest.log("error", "[lzr_editor] Failed to read level from "..filename)
return false, S("Error reading level file!")
end
end,
})
lzr_gamestate.register_on_enter_state(function(state)
if state == lzr_gamestate.EDITOR then
local player = minetest.get_player_by_name("singleplayer")