Skip to content
Snippets Groups Projects
Commit 50f5e77f authored by DarkGod's avatar DarkGod
Browse files

plop

parent c016ff56
No related branches found
No related tags found
No related merge requests found
......@@ -89,6 +89,9 @@ local point_meta = {
hashCoord = function(p, tilemap)
return p.y * tilemap.data_w + p.x
end,
area = function(p)
return p.y * p.x
end,
},
}
--- Make a point data, can be added
......
......@@ -18,22 +18,58 @@
-- darkgod@te4.org
local BSP = require "engine.tilemaps.BSP"
local MST = require "engine.algorithms.MST"
-- rng.seed(2)
-- rng.seed(1)
local tm = Tilemap.new(self.mapsize, '=', 1)
local bsp = BSP.new(10, 10, 8):make(50, 50, '.', '#')
local bsp = BSP.new(4, 4, 10):make(50, 50, '.', '#')
local rooms = {}
for _, room in ipairs(bsp.rooms) do
rooms[#rooms+1] = room.map
-- Remove a few rooms
for i = 1, #bsp.rooms / 4 do
local room = rng.tableRemove(bsp.rooms)
room.map:carveArea('#', room.map:point(1, 1), room.map.data_size)
end
tm:merge(1, 1, bsp)
local mstrun = MST.new()
-- Generate all possible edges
for i, room1 in ipairs(bsp.rooms) do
local c = room1.map:centerPoint()
for j, room2 in ipairs(bsp.rooms) do if room1 ~= room2 then
local c1, c2 = room1.map:centerPoint(), room2.map:centerPoint()
mstrun:edge(room1, room2, core.fov.distance(c1.x, c1.y, c2.x, c2.y))
end end
end
-- Compute!
mstrun:run()
if not loadMapScript("lib/connect_rooms_multi", {map=tm, rooms=rooms, tunnel_char='.', tunnel_through={'#'}, edges_surplus=0}) then return self:regenerate() end
for _, edge in pairs(mstrun.mst) do
if edge.from.from.x - 1 == edge.to.to.x + 1 then
local min_y, max_y = math.max(edge.from.from.y, edge.to.from.y), math.min(edge.from.to.y, edge.to.to.y)
bsp:put(bsp:point(edge.from.from.x - 1, rng.range(min_y, max_y)), rng.percent(40) and '+' or '.')
elseif edge.from.to.x + 1 == edge.to.from.x - 1 then
local min_y, max_y = math.max(edge.from.from.y, edge.to.from.y), math.min(edge.from.to.y, edge.to.to.y)
bsp:put(bsp:point(edge.from.to.x + 1, rng.range(min_y, max_y)), rng.percent(40) and '+' or '.')
elseif edge.from.from.y - 1 == edge.to.to.y + 1 then
local min_x, max_x = math.max(edge.from.from.x, edge.to.from.x), math.min(edge.from.to.x, edge.to.to.x)
bsp:put(bsp:point(rng.range(min_x, max_x), edge.from.from.y - 1), rng.percent(40) and '+' or '.')
elseif edge.from.to.y + 1 == edge.to.from.y - 1 then
local min_x, max_x = math.max(edge.from.from.x, edge.to.from.x), math.min(edge.from.to.x, edge.to.to.x)
bsp:put(bsp:point(rng.range(min_x, max_x), edge.from.to.y + 1), rng.percent(40) and '+' or '.')
end
end
bsp:applyOnGroups(bsp:findGroupsOf{'.', '+'}, function(room, idx)
if room.map.data_size:area() < 10 then
room.map:carveArea('#', room.map:point(1, 1), room.map.data_size)
end
end)
-- if bsp:eliminateByFloodfill{'#'} < 10 then return self:regenerate() end
tm:merge(1, 1, bsp)
-- if tm:eliminateByFloodfill{'T','#'} < 800 then return self:regenerate() end
return tm
......@@ -25,7 +25,7 @@ return {
decay = {300, 800},
actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end,
width = 80, height = 80,
all_remembered = true,
-- all_remembered = true,
all_lited = true,
no_level_connectivity = true,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment