Add support for different level walls

master
Wuzzy 2022-03-04 20:30:18 +01:00
parent 22855b4e3e
commit 2b5042d3a2
3 changed files with 38 additions and 12 deletions

View File

@ -1,5 +1,6 @@
lzr_levels_level_1.mts,Demo Level 1
lzr_levels_level_2.mts,Demo Level 2
lzr_levels_level_3.mts,Demo Level 3
lzr_levels_level_4.mts,Demo Level 4
lzr_levels_level_5.mts,Demo Level 5
lzr_levels_level_1.mts,Demo Level 1,lzr_core:wood|lzr_decor:woodframed_glass
lzr_levels_level_2.mts,Demo Level 2,lzr_core:wood|lzr_decor:woodframed_glass
lzr_levels_level_3.mts,Demo Level 3,lzr_core:wood|lzr_decor:woodframed_glass
lzr_levels_level_4.mts,Demo Level 4,lzr_core:wood|lzr_decor:woodframed_glass
lzr_levels_level_5.mts,Demo Level 5,lzr_core:wood|lzr_decor:woodframed_glass
lzr_levels_level_6.mts,Demo Level 6,lzr_decor:ocean_stone|lzr_decor:ocean_stone|lzr_core:dirt|lzr_core:dirt

1 lzr_levels_level_1.mts Demo Level 1 lzr_core:wood|lzr_decor:woodframed_glass
2 lzr_levels_level_2.mts Demo Level 2 lzr_core:wood|lzr_decor:woodframed_glass
3 lzr_levels_level_3.mts Demo Level 3 lzr_core:wood|lzr_decor:woodframed_glass
4 lzr_levels_level_4.mts Demo Level 4 lzr_core:wood|lzr_decor:woodframed_glass
5 lzr_levels_level_5.mts Demo Level 5 lzr_core:wood|lzr_decor:woodframed_glass
6 lzr_levels_level_6.mts Demo Level 6 lzr_decor:ocean_stone|lzr_decor:ocean_stone|lzr_core:dirt|lzr_core:dirt

View File

@ -2,7 +2,8 @@ local S = minetest.get_translator("lzr_levels")
lzr_levels = {}
local ROOM_NODE = "lzr_core:wood"
local CEILING_NODE = "lzr_core:wood"
local WALL_NODE = "lzr_core:wood"
local WINDOW_NODE = "lzr_decor:woodframed_glass"
local FLOOR_NODE = "lzr_core:wood"
local WINDOW_HEIGHT = 3
@ -47,7 +48,13 @@ local analyze_levels = function()
assert(matches ~= nil, "Malformed level_data.csv")
local filename = matches[1]
local lname = matches[2]
table.insert(level_data, {filename=filename, name=lname})
local nodes = matches[3]
local node_matches = string.split(nodes, "|")
local node_wall = node_matches[1]
local node_window = node_matches[2] or node_wall
local node_floor = node_matches[3] or node_wall
local node_ceiling = node_matches[4] or node_wall
table.insert(level_data, {filename=filename, name=lname, node_wall=node_wall, node_window=node_window, node_floor=node_floor, node_ceiling=node_ceiling})
end
lzr_levels.LAST_LEVEL = #level_data
@ -82,6 +89,7 @@ local set_room_nodes = function(param)
local posses_border = {}
local posses_window = {}
local posses_floor = {}
local posses_ceiling = {}
local size = vector.add(psize, {x=1,y=1,z=1})
set_level_size(psize)
for x=0,size.x do
@ -96,6 +104,8 @@ local set_room_nodes = function(param)
else
if y == 0 then
table.insert(posses_floor, vector.add(pos, offset))
elseif y == size.y then
table.insert(posses_ceiling, vector.add(pos, offset))
else
table.insert(posses_border, vector.add(pos, offset))
end
@ -104,9 +114,10 @@ local set_room_nodes = function(param)
end
end
end
minetest.bulk_set_node(posses_floor, {name=FLOOR_NODE})
minetest.bulk_set_node(posses_border, {name=ROOM_NODE})
minetest.bulk_set_node(posses_window, {name=WINDOW_NODE})
minetest.bulk_set_node(posses_floor, {name=param.nodes.node_floor})
minetest.bulk_set_node(posses_border, {name=param.nodes.node_wall})
minetest.bulk_set_node(posses_window, {name=param.nodes.node_window})
minetest.bulk_set_node(posses_ceiling, {name=param.nodes.node_ceiling})
end
local get_singleplayer = function()
@ -187,16 +198,30 @@ end
-- Either one of these (or none of them for empty room):
-- - level: level ID (for builtin level)
-- - schematic: Path to schematic
-- - nodes: Table containing:
-- - node_floor, node_ceiling, node_wall, node_window
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({pos=lzr_globals.LEVEL_POS, size=level_data[level].size, level=level, spawn_pos=spawn_pos, yaw=yaw})
local nodes = {
node_floor = level_data[level].node_floor,
node_wall = level_data[level].node_wall,
node_ceiling = level_data[level].node_ceiling,
node_window = level_data[level].node_window,
}
lzr_levels.build_room({pos=lzr_globals.LEVEL_POS, size=level_data[level].size, level=level, spawn_pos=spawn_pos, yaw=yaw, nodes=nodes})
end
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})
local nodes = {
node_floor = FLOOR_NODE,
node_wall = WALL_NODE,
node_ceiling = CEILING_NODE,
node_window = WINDOW_NODE,
}
lzr_levels.build_room({pos=lzr_globals.LEVEL_POS, size=schematic.size, schematic=schematic, spawn_pos=spawn_pos, yaw=yaw, nodes=nodes})
end
function lzr_levels.build_level_raw(schematic_specifier)

Binary file not shown.