feat(mapgen): add generator registry
This commit is contained in:
1 parent
de801793e1
commit
e296426703
1 file changed
+32
@@ -0,0 +1,32 @@
|
||||
-- Registry of selectable dungeon generators. Every entry takes the same
|
||||
-- (width, height, rng, options) signature and returns a carved Map. After
|
||||
-- generation connectivity is enforced so the dungeon layer can rely on a single
|
||||
-- reachable region regardless of which algorithm ran.
|
||||
|
||||
local Connect = require("gen.connect")
|
||||
|
||||
local Gen = {}
|
||||
|
||||
Gen.generators = {
|
||||
rooms = require("gen.rooms").generate,
|
||||
bsp = require("gen.bsp").generate,
|
||||
cellular = require("gen.cellular").generate,
|
||||
drunkard = require("gen.drunkard").generate,
|
||||
}
|
||||
|
||||
-- Deterministic ordering of names for callers that want to cycle generators by
|
||||
-- depth without depending on hash iteration order.
|
||||
Gen.order = { "rooms", "bsp", "cellular", "drunkard" }
|
||||
|
||||
function Gen.has(name)
|
||||
return Gen.generators[name] ~= nil
|
||||
end
|
||||
|
||||
function Gen.build(name, width, height, rng, options)
|
||||
local generate = Gen.generators[name]
|
||||
local map = generate(width, height, rng, options)
|
||||
local reachable = Connect.ensure(map, rng)
|
||||
return map, reachable
|
||||
end
|
||||
|
||||
return Gen
|
||||
Reference in new issue
Block a user