Example #1
0
 internal Locker(MapGeneration.Distributors.Locker vanillalocker)
 {
     locker = vanillalocker;
     for (ushort i = 0; i < locker.Chambers.Count(); i++)
     {
         Chambers.Add(new LockerChamber(locker.Chambers[i], this, i));
     }
 }
Example #2
0
        private void CreateChamberTree(Rectangle startingChamber)
        {
            int chamberNumber = Utilities.RandomNumber(MinChambers, MaxChambers);

            Chambers.Add(startingChamber);

            int attempts = 0;

            while (Chambers.Count < chamberNumber && attempts < 100)
            {
                int n = 0;
                while (n < Chambers.Count)
                {
                    AddRandomNeighborChamber(Chambers[n]);
                    n++;
                }
                attempts++;
            }
        }
Example #3
0
        private void AddRandomNeighborChamber(Rectangle chamber)
        {
            Point passage    = new Point(0, 0);
            int   nborWidth  = Utilities.RandomNumber(MinChamberWidth, MaxChamberWidth);
            int   nborHeight = Utilities.RandomNumber(MinChamberHeight, MaxChamberHeight);
            Point nborPos    = new Point(0, 0);

            switch (Utilities.RandomNumber(1, 4))
            {
            case 1:
                passage = PassageNorth(chamber);
                nborPos = ChamberNorth(passage, nborWidth, nborHeight);
                break;

            case 2:
                passage = PassageSouth(chamber);
                nborPos = ChamberSouth(passage, nborWidth);
                break;

            case 3:
                passage = PassageWest(chamber);
                nborPos = ChamberWest(passage, nborWidth, nborHeight);
                break;

            case 4:
                passage = PassageEast(chamber);
                nborPos = ChamberEast(passage, nborHeight);
                break;

            default:
                break;
            }

            Rectangle neighbor = new Rectangle(nborPos, new Point(nborWidth, nborHeight));

            if (CanFitChamber(GetChamberWithWalls(neighbor)) &&
                (ForceRegularChambers && !ChamberIntersects(GetChamberWithWalls(neighbor)) || !ForceRegularChambers && !ChamberIntersects(neighbor)))
            {
                Chambers.Add(neighbor);
                Passages.Add(passage);
            }
        }