コード例 #1
0
    private Room CreateFirstRoom(RoomCoordinates coordinates)
    {
        Room previousRoom;

        if (FirstRoom != null)
        {
            previousRoom = (Room)Instantiate(FirstRoom);
            _floorGrid.AddRoom(coordinates.X, coordinates.Y, previousRoom);
        }
        else
        {
            previousRoom = (Room)Instantiate(RoomPrefabs.First());
            _floorGrid.AddRoom(coordinates.X, coordinates.Y, previousRoom);
        }
        return(previousRoom);
    }
コード例 #2
0
    private Room CreateRoom(Room previousRoom, RoomDirection direction, RoomType roomType = RoomType.NormalRoom)
    {
        Room prefab;

        switch (roomType)
        {
        case RoomType.StartRoom:
            prefab = FirstRoom;
            break;

        case RoomType.NormalRoom:
            prefab = RoomPrefabs.First();
            break;

        case RoomType.BossRoom:
            prefab = BossRoom;
            break;

        case RoomType.TreasureRoom:
            prefab = TreasureRoom;
            break;

        case RoomType.SecretRoom:
            prefab = RoomPrefabs.First();
            break;

        default:
            throw new ArgumentOutOfRangeException("roomType");
        }
        var room = (Room)Instantiate(prefab);

        if (previousRoom != null)
        {
            var position = previousRoom.transform.position;
            switch (direction)
            {
            case RoomDirection.North:
                position.y += VerticalDelta;
                break;

            case RoomDirection.East:
                position.x += HorizontalDelta;
                break;

            case RoomDirection.South:
                position.y -= VerticalDelta;
                break;

            case RoomDirection.West:
                position.x -= HorizontalDelta;
                break;
            }
            room.transform.position = position;
        }

        if (roomType == RoomType.BossRoom)
        {
            var enemyLayouts = room.GetComponent <EnemyLayout>().EnemyLayouts;
            var enemyLayout  = (GameObject)Instantiate(enemyLayouts.ElementAt(Random.Range(0, enemyLayouts.Count)));
            //enemyLayout.transform.localPosition = Vector3.zero;
            enemyLayout.transform.parent = room.transform;
            var enemies = enemyLayout.GetComponentsInChildren <Enemy>().ToList();
            enemies.ForEach(e => room.AddEnemy(e, e.transform.position));
        }

        if (roomType == RoomType.NormalRoom)
        {
            var obstacleLayout = (GameObject)Instantiate(_obstacleLayouts.ElementAt(Random.Range(0, _obstacleLayouts.Count)));
            obstacleLayout.transform.parent        = room.transform;
            obstacleLayout.transform.localPosition = Vector3.zero;

            var enemyLayouts = obstacleLayout.GetComponent <EnemyLayout>().EnemyLayouts;
            var enemyLayout  = (GameObject)Instantiate(enemyLayouts.ElementAt(Random.Range(0, enemyLayouts.Count)));
            //enemyLayout.transform.localPosition = Vector3.zero;
            enemyLayout.transform.parent = room.transform;
            var enemies = enemyLayout.GetComponentsInChildren <Enemy>().ToList();
            enemies.ForEach(e => room.AddEnemy(e, e.transform.position));
        }

        return(room);
    }