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); }
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); }