92 lines
3.0 KiB
Lua
92 lines
3.0 KiB
Lua
local S = minetest.get_translator("lzr_editor")
|
|
|
|
minetest.register_chatcommand("editor", {
|
|
privs = { server = true },
|
|
description = S("Start or exit level editor"),
|
|
params = S("[ enter | exit ]"),
|
|
func = function(name, param)
|
|
if param == "" or param == "enter" then
|
|
local state = lzr_gamestate.get_state()
|
|
if state == lzr_gamestate.EDITOR then
|
|
return false, S("Already in level editor!")
|
|
elseif state == lzr_gamestate.LEVEL or state == lzr_gamestate.LEVEL_COMPLETE then
|
|
lzr_gamestate.set_state(lzr_gamestate.EDITOR)
|
|
return true
|
|
else
|
|
lzr_levels.start_level(1)
|
|
lzr_gamestate.set_state(lzr_gamestate.EDITOR)
|
|
return true
|
|
end
|
|
elseif param == "exit" then
|
|
local state = lzr_gamestate.get_state()
|
|
if state ~= lzr_gamestate.EDITOR then
|
|
return false, S("Not in level editor!")
|
|
else
|
|
minetest.log("error", "SET1")
|
|
lzr_gamestate.set_state(lzr_gamestate.LEVEL)
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
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")
|
|
lzr_player.set_editor_inventory(player)
|
|
lzr_gui.set_editor_gui(player)
|
|
end
|
|
end)
|