Пример #1
0
        private void CreateRooms()
        {
            //setup
            rooms = new MazeRoomSetup[_gridSizeX * 2, _gridSizeY * 2];
            rooms[_gridSizeX, _gridSizeY] = new MazeRoomSetup(Vector2.zero, MazeRoomSetup.RoomKind.Start);
            _takenPositions.Add(Vector2.zero);
            Vector2 checkPos;

            for (var i = 0; i < _numberOfRooms - 1; i++)
            {
                var randomPerc    = i / ((float)_numberOfRooms - 1);
                var randomCompare = Mathf.Lerp(RandomCompareStart, RandomCompareEnd, randomPerc);
                checkPos = NewPosition();
                //test new position
                if (NumberOfNeighbors(checkPos) > 1 && Random.value > randomCompare)
                {
                    var iterations = 0;

                    while (NumberOfNeighbors(checkPos) > 1)
                    {
                        checkPos = SelectiveNewPosition();
                    }

                    if (iterations++ >= 50)
                    {
                        throw new ArithmeticException($"Wasn't able to create room pos within {iterations} iterations");
                    }
                }

                //finalize position
                rooms[(int)checkPos.x + _gridSizeX, (int)checkPos.y + _gridSizeY] = new MazeRoomSetup(checkPos, MazeRoomSetup.RoomKind.Normal);
                _takenPositions.Add(checkPos);
            }
        }
Пример #2
0
    private GameObject FindSuitableRoom(MazeRoomSetup mazeRoomSetup)
    {
        List <GameObject> allRooms;

        switch (mazeRoomSetup.Kind)
        {
        case MazeRoomSetup.RoomKind.Start:
            allRooms = RoomObj.ToList();
            break;

        case MazeRoomSetup.RoomKind.Normal:
            allRooms = RoomObj.ToList();
            break;

        case MazeRoomSetup.RoomKind.Boss:
            allRooms = BossRooms.ToList();
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }

        var sb = new StringBuilder();

        sb.Append(mazeRoomSetup.doorDown ? "d" : "");
        sb.Append(mazeRoomSetup.doorUp ? "u" : "");
        sb.Append(mazeRoomSetup.doorLeft ? "l" : "");
        sb.Append(mazeRoomSetup.doorRight ? "r" : "");
        var roomDoors     = sb.ToString().ToCharArray();
        var suitableRooms = allRooms.Where(obj =>
        {
            var chars = obj.name.ToLower().Where(char.IsLetter).ToList();
            return(chars.All(roomDoors.Contains) && chars.Count == roomDoors.Length);
        }).ToList();

        var index = Random.Range(0, suitableRooms.Count - 1);

        return(suitableRooms[index]);
    }
Пример #3
0
 private int NumberOfNeighbors(MazeRoomSetup mazeRoomSetup)
 {
     return((mazeRoomSetup.doorDown ? 1 : 0) + (mazeRoomSetup.doorUp ? 1 : 0) + (mazeRoomSetup.doorLeft ? 1 : 0) + (mazeRoomSetup.doorRight ? 1 : 0));
 }