feat(mapgen): add shared carving primitives

This commit is contained in:
dualfroz committed 2026-08-23 19:56:00 +02:00
1 parent 3f7a0cc34f
commit e9cdb763ae
1 file changed
+46
+46
View File
@@ -0,0 +1,46 @@
-- Shared carving primitives used by the room, bsp and prefab generators.
-- Operate on any object exposing set(x, y, glyph); no dependency on Map itself
-- so the generators can require this without a cycle.
local Tiles = require("tiles")
local Carve = {}
function Carve.rect(map, x, y, w, h, glyph)
glyph = glyph or Tiles.FLOOR
for cy = y, y + h - 1 do
for cx = x, x + w - 1 do
map:set(cx, cy, glyph)
end
end
end
function Carve.hTunnel(map, x1, x2, y, glyph)
glyph = glyph or Tiles.FLOOR
for x = math.min(x1, x2), math.max(x1, x2) do
map:set(x, y, glyph)
end
end
function Carve.vTunnel(map, y1, y2, x, glyph)
glyph = glyph or Tiles.FLOOR
for y = math.min(y1, y2), math.max(y1, y2) do
map:set(x, y, glyph)
end
end
function Carve.center(room)
return room.x + room.w // 2, room.y + room.h // 2
end
function Carve.corridor(map, ax, ay, bx, by, rng, glyph)
if rng:chance(1, 2) then
Carve.hTunnel(map, ax, bx, ay, glyph)
Carve.vTunnel(map, ay, by, bx, glyph)
else
Carve.vTunnel(map, ay, by, ax, glyph)
Carve.hTunnel(map, ax, bx, by, glyph)
end
end
return Carve