Add custom level size changer in editor
parent
e6f6d4c32e
commit
4577518382
|
@ -1,5 +1,7 @@
|
|||
local S = minetest.get_translator("lzr_editor")
|
||||
|
||||
local level_size = table.copy(lzr_globals.DEFAULT_LEVEL_SIZE)
|
||||
|
||||
minetest.register_chatcommand("editor", {
|
||||
privs = { server = true },
|
||||
description = S("Start or exit level editor"),
|
||||
|
@ -30,6 +32,46 @@ minetest.register_chatcommand("editor", {
|
|||
end,
|
||||
})
|
||||
|
||||
local function clear_area(size)
|
||||
local posses = {}
|
||||
for z=-1, size.x+1 do
|
||||
for y=-1, size.y+1 do
|
||||
for x=-1, size.z+1 do
|
||||
local pos = vector.new(x,y,z)
|
||||
pos = vector.add(pos, lzr_globals.LEVEL_POS)
|
||||
table.insert(posses, vector.new(x,y,z))
|
||||
end
|
||||
end
|
||||
end
|
||||
minetest.bulk_set_node(posses, {name="air"})
|
||||
end
|
||||
|
||||
minetest.register_chatcommand("editor_size", {
|
||||
privs = { server = true },
|
||||
description = S("Set level size for editor (warning: clears level contents!)"),
|
||||
params = "<x>,<y>,<z>",
|
||||
func = function(name, param)
|
||||
if lzr_gamestate.get_state() ~= lzr_gamestate.EDITOR then
|
||||
return false, S("Not in editor mode!")
|
||||
end
|
||||
local size = minetest.string_to_pos(param)
|
||||
if not size then
|
||||
return false
|
||||
end
|
||||
if size.x > lzr_globals.PLAYFIELD_SIZE.x or
|
||||
size.y > lzr_globals.PLAYFIELD_SIZE.y or
|
||||
size.z > lzr_globals.PLAYFIELD_SIZE.z then
|
||||
return false, S("Too large!")
|
||||
end
|
||||
if size.x < 1 or size.y < 4 or size.z < 1 then
|
||||
return false, S("Too small!")
|
||||
end
|
||||
clear_area(lzr_globals.PLAYFIELD_SIZE)
|
||||
level_size = size
|
||||
lzr_levels.build_room(lzr_globals.LEVEL_POS, level_size)
|
||||
return true
|
||||
end,
|
||||
})
|
||||
|
||||
-- Dummy save and load functions (only 1 level name supported for now)
|
||||
minetest.register_chatcommand("editor_save", {
|
||||
|
@ -49,7 +91,7 @@ minetest.register_chatcommand("editor_save", {
|
|||
local level_name = "level_custom_"..num
|
||||
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, {})
|
||||
local ok = minetest.create_schematic(lzr_globals.LEVEL_POS, vector.add(lzr_globals.LEVEL_POS, level_size), {}, filename, {})
|
||||
if ok then
|
||||
minetest.log("action", "[lzr_editor] Level written to "..filename)
|
||||
return true, S("Level saved to @1.", filename)
|
||||
|
@ -94,6 +136,8 @@ minetest.register_chatcommand("editor_load", {
|
|||
local filename = minetest.get_worldpath().."/levels/"..level_name..".mts"
|
||||
local schem = minetest.read_schematic(filename, {})
|
||||
if schem then
|
||||
level_size = schem.size
|
||||
lzr_levels.build_room(lzr_globals.LEVEL_POS, level_size)
|
||||
minetest.place_schematic(lzr_globals.LEVEL_POS, schem, "0", {}, true, {})
|
||||
minetest.log("action", "[lzr_editor] Level loaded from "..filename)
|
||||
return true, S("Level loaded.")
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
lzr_globals = {}
|
||||
|
||||
lzr_globals.PLAYFIELD_START = { x = -5, y = 0, z = -5 }
|
||||
lzr_globals.PLAYFIELD_SIZE = { x = 20, y = 20, z = 20 }
|
||||
lzr_globals.PLAYFIELD_START = vector.new(-5, 0, -5)
|
||||
lzr_globals.PLAYFIELD_SIZE = vector.new(20, 20, 20)
|
||||
lzr_globals.PLAYFIELD_END = vector.add(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_SIZE)
|
||||
lzr_globals.LEVEL_POS = { x = 0, y = 0, z = 0 }
|
||||
lzr_globals.MENU_SHIP_POS = { x = -500, y = -4, z = -500 }
|
||||
lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET = { x = 7, y = 8.5, z = 29 }
|
||||
lzr_globals.MENU_SHIP_STARTBOOK_OFFSET = { x = 7, y = 10, z = 31 }
|
||||
lzr_globals.LEVEL_POS = vector.zero()
|
||||
lzr_globals.DEFAULT_LEVEL_SIZE = vector.new(10, 6, 10)
|
||||
lzr_globals.MENU_SHIP_POS = vector.new(-500, -4, -500)
|
||||
lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET = vector.new(7, 8.5, 29)
|
||||
lzr_globals.MENU_SHIP_STARTBOOK_OFFSET = vector.new(7, 10, 31)
|
||||
lzr_globals.MENU_PLAYER_SPAWN_POS = vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET)
|
||||
|
||||
|
|
|
@ -98,11 +98,13 @@ local emerge_callback = function(blockpos, action, calls_remaining, param)
|
|||
minetest.log("error", "[lzr_levels] Room emerging cancelled.")
|
||||
elseif calls_remaining == 0 and (action == minetest.EMERGE_GENERATED or action == minetest.EMERGE_FROM_DISK or action == minetest.EMERGE_FROM_MEMORY) then
|
||||
build_room(param)
|
||||
local level_ok = lzr_levels.build_level(param.level)
|
||||
if not level_ok then
|
||||
minetest.log("error", "[lzr_levels] Room emerge callback done with error")
|
||||
else
|
||||
minetest.log("action", "[lzr_levels] Room emerge callback done")
|
||||
if param.level then
|
||||
local level_ok = lzr_levels.build_level(param.level)
|
||||
if not level_ok then
|
||||
minetest.log("error", "[lzr_levels] Room emerge callback done with error")
|
||||
else
|
||||
minetest.log("action", "[lzr_levels] Room emerge callback done")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -116,7 +118,7 @@ function lzr_levels.build_room(pos, size, level)
|
|||
end
|
||||
|
||||
function lzr_levels.prepare_and_build_level(level)
|
||||
lzr_levels.build_room(lzr_globals.LEVEL_POS, {x=10, y=6, z=10}, level)
|
||||
lzr_levels.build_room(lzr_globals.LEVEL_POS, level_data[level].size, level)
|
||||
end
|
||||
|
||||
function lzr_levels.build_level(level)
|
||||
|
|
Loading…
Reference in New Issue