From 2b5042d3a244c6ba4e0f191fb45dc207a2ed7acc Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 4 Mar 2022 20:30:18 +0100 Subject: [PATCH] Add support for different level walls --- mods/lzr_levels/data/level_data.csv | 11 ++--- mods/lzr_levels/init.lua | 39 ++++++++++++++---- .../schematics/lzr_levels_level_6.mts | Bin 0 -> 698 bytes 3 files changed, 38 insertions(+), 12 deletions(-) create mode 100644 mods/lzr_levels/schematics/lzr_levels_level_6.mts diff --git a/mods/lzr_levels/data/level_data.csv b/mods/lzr_levels/data/level_data.csv index ab52225..50a8fe0 100644 --- a/mods/lzr_levels/data/level_data.csv +++ b/mods/lzr_levels/data/level_data.csv @@ -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 diff --git a/mods/lzr_levels/init.lua b/mods/lzr_levels/init.lua index 794bcfa..17f1d5c 100644 --- a/mods/lzr_levels/init.lua +++ b/mods/lzr_levels/init.lua @@ -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) diff --git a/mods/lzr_levels/schematics/lzr_levels_level_6.mts b/mods/lzr_levels/schematics/lzr_levels_level_6.mts new file mode 100644 index 0000000000000000000000000000000000000000..9ea948629061f5493dee73fcce38aaee19183b1e GIT binary patch literal 698 zcmeYb3HD`RVc=n4W8kR=0|r3`(VVKH_~iVeRIBpDlGLL3;{4L0+X(wxL1Oxu!*GLy558RS4ZN{Uhwi%WqHOwLFxE{QMC&rgZZ$xqG( zT8iPyg3KI{dE!V81bQJcC%&Mxr~v4EumrNVK%Ph~%7eHK;@;fMqN04DwTan@ARo(u z-H@7-T997^RBBZMXU6BJr7?(rq#+tpb2CdoL71P%AdC@5kZ)sO$ zv&m%rTC02hu;0fcJ?tkYN-UMiIH}SvGh4c1LPbDo_SLAqxr?S;(m58@znp!co1?LP zocxT|zrP~muH~o21b&(3e!j?t>E7i~k@fu1SKL2a^fi{9S{uXuD{xnmi;aM6x(#p5 zo~g?&hDzp^J~KS#v955M>YL}>_I~%i)GfTFA6BzJqF{ePvOV{S@42`3ub-d%{`YnV z*`##WHS@R6X%CNhdr>NF&&!&5^@Tpq*Y)mG*zevi7poSrYE{^}6%ntV^;w*>m+hL& xwP_Z+k;{A@WBaT2 literal 0 HcmV?d00001