Spawn player on start block in new level
parent
bcc9bcdd33
commit
61b4ff5983
|
@ -15,6 +15,14 @@ lzr_levels.LAST_LEVEL = 0
|
|||
-- Mod storage for game progress
|
||||
local mod_storage = minetest.get_mod_storage()
|
||||
|
||||
local flat_index_to_pos = function(index, size)
|
||||
local d = index-1
|
||||
local x = d % size.x
|
||||
local y = math.floor((d / size.x) % size.y)
|
||||
local z = math.floor((d / (size.x*size.y)) % size.z)
|
||||
return vector.new(x,y,z)
|
||||
end
|
||||
|
||||
-- Read the level schematics to find out some metadata about them
|
||||
-- and count the number of levels
|
||||
local analyze_levels = function()
|
||||
|
@ -38,12 +46,17 @@ local analyze_levels = function()
|
|||
assert(schem, "Could not load level file: "..filename)
|
||||
level_data[l].contains_rotatable_block = false
|
||||
level_data[l].size = schem.size
|
||||
local size = level_data[l].size
|
||||
for d=1, #schem.data do
|
||||
local nodename = schem.data[d].name
|
||||
local is_rotatable = minetest.get_item_group(nodename, "rotatable") == 1
|
||||
if is_rotatable then
|
||||
level_data[l].contains_rotatable_block = true
|
||||
break
|
||||
end
|
||||
if nodename == "lzr_teleporter:teleporter_off" then
|
||||
local start = flat_index_to_pos(d, size)
|
||||
start = vector.add(start, vector.new(0, 0.5, 0))
|
||||
level_data[l].start_pos = start
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -144,7 +157,14 @@ end
|
|||
function lzr_levels.start_level(level)
|
||||
current_level = level
|
||||
local player = get_singleplayer()
|
||||
local start_pos = vector.add(lzr_globals.LEVEL_POS, {x=4,y=-0.5,z=4})
|
||||
local start_pos
|
||||
if level_data[level].start_pos then
|
||||
start_pos = vector.add(lzr_globals.LEVEL_POS, level_data[level].start_pos)
|
||||
else
|
||||
-- Fallback
|
||||
local size = level_data[level].size
|
||||
start_pos = vector.add(lzr_globals.LEVEL_POS, vector.new(math.floor(size.x/2), -0.5, math.floor(size.z/2)))
|
||||
end
|
||||
player:set_pos(start_pos)
|
||||
player:set_look_horizontal(0)
|
||||
lzr_levels.prepare_and_build_level(level)
|
||||
|
|
|
@ -10,7 +10,7 @@ minetest.register_node("lzr_teleporter:teleporter", {
|
|||
"lzr_teleporter_front.png",
|
||||
"lzr_teleporter_rear.png",
|
||||
},
|
||||
groups = { breakable = 1 },
|
||||
groups = { breakable = 1, teleporter = 2 },
|
||||
sounds = lzr_sounds.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
|
@ -24,6 +24,6 @@ minetest.register_node("lzr_teleporter:teleporter_off", {
|
|||
"lzr_teleporter_off_front.png",
|
||||
"lzr_teleporter_off_rear.png",
|
||||
},
|
||||
groups = { breakable = 1 },
|
||||
groups = { breakable = 1, teleporter = 1 },
|
||||
sounds = lzr_sounds.node_sound_stone_defaults(),
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue