Example #1
0
        public static Layout Generate(System.Random rng,
                                      int width,
                                      int height)
        {
            ChamberGeneratorConfig chamberCfg = new ChamberGeneratorConfig()
            {
                mapSize        = new Point2i(width, height),
                minChamberSize = 10,
                maxChamberSize = 20,
                numChambers    = width * height / 500,
                maxIterations  = 10000
            };

            IList <Chamber>  chambers     = GenerateChambers(rng, chamberCfg);
            IList <Corridor> corridors    = GenerateCorridors(rng, chambers, chambers.Count, 2 * chamberCfg.maxChamberSize);
            Chamber          startChamber = ChooseStartChamber(chambers);

            return(new Layout()
            {
                MapSize = new Point2i(width, height),
                Chambers = chambers,
                Corridors = corridors,
                StartChamber = startChamber,
                ExitChamber = ChooseExitChamber(rng, chambers, startChamber),
                Tiles = GenerateTiles(width, height, chambers, corridors)
            });
        }
Example #2
0
        private static IList <Chamber> GenerateChambers(System.Random rng,
                                                        ChamberGeneratorConfig cfg)
        {
            IList <Chamber> chambers = new List <Chamber>();

            for (int i = 0; i < cfg.maxIterations && chambers.Count < cfg.numChambers; ++i)
            {
                Chamber newChamber = Chamber.Random(rng, cfg.mapSize.x, cfg.mapSize.y, cfg.minChamberSize, cfg.maxChamberSize);

                if (!chambers.Any(c => c.CollidesWith(newChamber, 5)) && newChamber.IsNotBorder(cfg.mapSize))
                {
                    chambers.Add(newChamber);
                }
            }
            return(chambers);
        }