lazarr/mods/lzr_levels/init.lua

55 lines
1.8 KiB
Lua
Raw Normal View History

2021-12-21 10:56:56 -08:00
lzr_levels = {}
local ROOM_NODE = "lzr_core:wood"
local WINDOW_NODE = "xdecor:woodframed_glass"
local WINDOW_HEIGHT = 3
local WINDOW_DIST = 3
local build_room = function(param)
local pos = param.pos
local psize = param.size
local posses_border = {}
local posses_window = {}
local posses_air = {}
local size = vector.add(psize, {x=1,y=1,z=1})
for x=0,size.x do
for z=0,size.z do
for y=0,size.y do
local offset = {x=x-1, y=y-1, z=z-1}
if (x >= 1 and x < size.x) and
(y >= 1 and y < size.y) and
(z >= 1 and z < size.z) then
table.insert(posses_air, vector.add(pos, offset))
elseif y == WINDOW_HEIGHT and ((x >= 1 and x < size.x and x % WINDOW_DIST == 0) or (z >= 1 and z < size.z and z % WINDOW_DIST == 0)) then
table.insert(posses_window, vector.add(pos, offset))
else
table.insert(posses_border, vector.add(pos, offset))
end
end
end
end
minetest.bulk_set_node(posses_border, {name=ROOM_NODE})
minetest.bulk_set_node(posses_window, {name=WINDOW_NODE})
minetest.bulk_set_node(posses_air, {name="air"})
end
local emerge_callback = function(blockpos, action, calls_remaining, param)
minetest.log("verbose", "[lzr_levels] emerge_callback() ...")
if action == minetest.EMERGE_ERRORED then
minetest.log("error", "[lzr_levels] Room emerging error.")
elseif action == minetest.EMERGE_CANCELLED then
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
build_room(param)
minetest.log("action", "[lzr_levels] Room emerged and built.")
end
end
local prepare_room = function(pos, size)
minetest.emerge_area(pos, vector.add(pos, size), emerge_callback, {pos=pos, size=size})
end
function lzr_levels.build_room(pos, size)
prepare_room(pos, size)
end