Fix editor level loading not setting level size var
parent
a53110033c
commit
dc0d1e3184
|
@ -51,7 +51,7 @@ minetest.register_chatcommand("editor_size", {
|
|||
return false, S("Too small!")
|
||||
end
|
||||
lzr_levels.clear_playfield(size)
|
||||
lzr_levels.build_room(lzr_globals.LEVEL_POS, size)
|
||||
lzr_levels.build_room({pos=lzr_globals.LEVEL_POS, size=size})
|
||||
return true
|
||||
end,
|
||||
})
|
||||
|
@ -118,10 +118,9 @@ minetest.register_chatcommand("editor_load", {
|
|||
return false, S("Level file does not exist!")
|
||||
end
|
||||
local filename = minetest.get_worldpath().."/levels/"..level_name..".mts"
|
||||
local schem = minetest.read_schematic(filename, {})
|
||||
local schem = minetest.read_schematic(filename, {write_yslice_prob="none"})
|
||||
if schem then
|
||||
lzr_levels.build_room(lzr_globals.LEVEL_POS, schem.size)
|
||||
minetest.place_schematic(lzr_globals.LEVEL_POS, schem, "0", {}, true, {})
|
||||
lzr_levels.prepare_and_build_custom_level(schem)
|
||||
minetest.log("action", "[lzr_editor] Level loaded from "..filename)
|
||||
return true, S("Level loaded.")
|
||||
else
|
||||
|
|
|
@ -13,14 +13,14 @@ local current_level = nil
|
|||
local level_data = {}
|
||||
lzr_levels.LAST_LEVEL = 0
|
||||
|
||||
local level_size = table.copy(lzr_globals.DEFAULT_LEVEL_SIZE)
|
||||
local level_size = vector.copy(lzr_globals.DEFAULT_LEVEL_SIZE)
|
||||
|
||||
lzr_levels.get_level_size = function()
|
||||
return level_size
|
||||
end
|
||||
|
||||
local set_level_size = function(new_size)
|
||||
level_size = new_size
|
||||
level_size = vector.copy(new_size)
|
||||
minetest.log("verbose", "[lzr_levels] Level size set to: "..minetest.pos_to_string(new_size))
|
||||
end
|
||||
|
||||
|
@ -41,7 +41,7 @@ local analyze_levels = function()
|
|||
local level_list_path = minetest.get_modpath("lzr_levels").."/data/level_data.csv"
|
||||
local level_list_file = io.open(level_list_path, "r")
|
||||
assert(level_list_file, "Could not load level_data.csv")
|
||||
|
||||
|
||||
for line in level_list_file:lines() do
|
||||
local matches = string.split(line, ",")
|
||||
assert(matches ~= nil, "Malformed level_data.csv")
|
||||
|
@ -75,7 +75,8 @@ local analyze_levels = function()
|
|||
end
|
||||
end
|
||||
|
||||
local build_room = function(param)
|
||||
-- Set the basic nodes of the room
|
||||
local set_room_nodes = function(param)
|
||||
local pos = param.pos
|
||||
local psize = param.size
|
||||
local posses_border = {}
|
||||
|
@ -120,32 +121,41 @@ 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
|
||||
lzr_levels.clear_playfield(param.size)
|
||||
build_room(param)
|
||||
set_room_nodes(param)
|
||||
local level_ok = false
|
||||
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
|
||||
local player = get_singleplayer()
|
||||
if player then
|
||||
if param.spawn_pos then
|
||||
player:set_pos(param.spawn_pos)
|
||||
end
|
||||
if param.yaw then
|
||||
player:set_look_horizontal(param.yaw)
|
||||
player:set_look_vertical(0)
|
||||
end
|
||||
lzr_messages.show_message(player, lzr_levels.get_level_name(param.level), 3)
|
||||
minetest.sound_play({name = "lzr_levels_level_enter", gain = 1}, {to_player=player:get_player_name()}, true)
|
||||
level_ok = lzr_levels.build_level(param.level)
|
||||
elseif param.schematic then
|
||||
level_ok = lzr_levels.build_level_raw(param.schematic)
|
||||
else
|
||||
minetest.log("action", "[lzr_levels] Empty room emerge callback done")
|
||||
return
|
||||
end
|
||||
|
||||
if not level_ok then
|
||||
minetest.log("error", "[lzr_levels] Room emerge callback done with error")
|
||||
else
|
||||
local player = get_singleplayer()
|
||||
if player then
|
||||
if param.spawn_pos then
|
||||
player:set_pos(param.spawn_pos)
|
||||
end
|
||||
if param.yaw then
|
||||
player:set_look_horizontal(param.yaw)
|
||||
player:set_look_vertical(0)
|
||||
end
|
||||
minetest.log("action", "[lzr_levels] Room emerge callback done")
|
||||
end
|
||||
if param.level then
|
||||
lzr_messages.show_message(player, lzr_levels.get_level_name(param.level), 3)
|
||||
minetest.sound_play({name = "lzr_levels_level_enter", gain = 1}, {to_player=player:get_player_name()}, true)
|
||||
end
|
||||
minetest.log("action", "[lzr_levels] Room emerge callback done")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local prepare_room = function(pos, size, level, spawn_pos, yaw)
|
||||
minetest.emerge_area(pos, vector.add(pos, size), emerge_callback, {pos=pos, size=size, level=level, spawn_pos=spawn_pos, yaw=yaw})
|
||||
local prepare_room = function(room_data)
|
||||
minetest.emerge_area(room_data.pos, vector.add(room_data.pos, room_data.size), emerge_callback, room_data)
|
||||
end
|
||||
|
||||
function lzr_levels.clear_playfield(room_size)
|
||||
|
@ -169,17 +179,28 @@ function lzr_levels.clear_playfield(room_size)
|
|||
minetest.bulk_set_node(posses_air, {name="air"})
|
||||
end
|
||||
|
||||
function lzr_levels.build_room(pos, size, level, spawn_pos, yaw)
|
||||
prepare_room(pos, size, level, spawn_pos, yaw)
|
||||
-- room_data:
|
||||
-- - pos: Room pos
|
||||
-- - size: Room size vector
|
||||
-- - spawn_pos: Relative player spawn position (optional)
|
||||
-- - yaw: Initial player yaw (optional)
|
||||
-- Either one of these (or none of them for empty room):
|
||||
-- - level: level ID (for builtin level)
|
||||
-- - schematic: Path to schematic
|
||||
function lzr_levels.build_room(room_data)
|
||||
prepare_room(room_data)
|
||||
end
|
||||
|
||||
function lzr_levels.prepare_and_build_level(level, spawn_pos, yaw)
|
||||
lzr_levels.build_room(lzr_globals.LEVEL_POS, level_data[level].size, level, spawn_pos, yaw)
|
||||
lzr_levels.build_room({pos=lzr_globals.LEVEL_POS, size=level_data[level].size, level=level, spawn_pos=spawn_pos, yaw=yaw})
|
||||
end
|
||||
|
||||
function lzr_levels.build_level(level)
|
||||
local filepath = minetest.get_modpath("lzr_levels").."/schematics/"..level_data[level].filename
|
||||
local schem = minetest.place_schematic(lzr_globals.LEVEL_POS, filepath, "0", {}, true, "")
|
||||
function lzr_levels.prepare_and_build_custom_level(schematic, spawn_pos, yaw)
|
||||
lzr_levels.build_room({pos=lzr_globals.LEVEL_POS, size=schematic.size, schematic=schematic, spawn_pos=spawn_pos, yaw=yaw})
|
||||
end
|
||||
|
||||
function lzr_levels.build_level_raw(schematic_specifier)
|
||||
local schem = minetest.place_schematic(lzr_globals.LEVEL_POS, schematic_specifier, "0", {}, true, "")
|
||||
if schem then
|
||||
-- Propagate lasers and check for insta-win
|
||||
lzr_laser.full_laser_update(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_END)
|
||||
|
@ -188,11 +209,17 @@ function lzr_levels.build_level(level)
|
|||
lzr_levels.level_complete()
|
||||
end
|
||||
else
|
||||
minetest.log("error", "[lzr_levels] lzr_levels.build_level failed to build level")
|
||||
minetest.log("error", "[lzr_levels] lzr_levels.build_level_raw failed to build level")
|
||||
end
|
||||
return schem
|
||||
end
|
||||
|
||||
function lzr_levels.build_level(level)
|
||||
local filepath = minetest.get_modpath("lzr_levels").."/schematics/"..level_data[level].filename
|
||||
local schem = lzr_levels.build_level_raw(filepath)
|
||||
return schem
|
||||
end
|
||||
|
||||
local function clear_inventory(player)
|
||||
local inv = player:get_inventory()
|
||||
for i=1,inv:get_size("main") do
|
||||
|
|
Loading…
Reference in New Issue