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

Binary file not shown.