/// <summary> /// Spawns a single room and its walls /// </summary> /// <param name="position">The position of the room on the grid</param> /// <param name="roomType">The type of the room</param> /// <returns>The new room</returns> private GameObject SpawnRoom(Vector2Int position, RoomType roomType) { GameObject newRoom = MonoBehaviour.Instantiate(this.typeToPrefabs[roomType].GetRandomItem(), this.roomParent); // Set room position newRoom.transform.position = new Vector3( position.x * this.roomSize.x, 0.0f, position.y * this.roomSize.y); List <GameObject> walls = this.AddWalls(newRoom, position); // Define the floor transition position if (roomType == RoomType.Boss) { this.floorTransitionBlockingWall = walls.GetRandomItem(); // Unparent it, so it doesn't cause any trouble later on this.floorTransitionBlockingWall.transform.parent = this.roomParent; } ActivityHandler.Add(newRoom.GetComponentsInChildren <Light>()); return(newRoom); }
/// <summary> /// Spawns a boss at all a Boss spawn point /// </summary> private void SpawnBoss() { GameObject bossSpawnPoint = GameObject.FindGameObjectWithTag(DungeonGenerator.BossSpawnPointTag); EnemyDriver boss = MonoBehaviour.Instantiate(this.bossPrefabs.GetRandomItem(), this.entityParent); boss.transform.position = bossSpawnPoint.transform.position; boss.battleDriver.Level = Mathf.FloorToInt(this.EntityLevel * DungeonGenerator.BossLevelMultiplier); ActivityHandler.Add(boss.gameObject); MonoBehaviour.Destroy(bossSpawnPoint); }
/// <summary> /// Spawns and returns an enemy /// </summary> /// <param name="position">The position to spawn at</param> /// <param name="leaderEnemy">The leader</param> /// <param name="followEnemy">The enemy to follow</param> /// <returns>The newly spawned enemy</returns> private EnemyDriver SpawnEnemy(Vector3 position, ref EnemyDriver leaderEnemy, ref EnemyDriver followEnemy) { EnemyDriver newEnemy = MonoBehaviour.Instantiate(this.enemyPrefabs.GetRandomItem(), this.entityParent); newEnemy.transform.position = position + this.GetRandomEntityOffset(); newEnemy.battleDriver.Level = this.EntityLevel; newEnemy.SetLeaderAndFollowing(leaderEnemy, followEnemy); if (leaderEnemy == null) { leaderEnemy = newEnemy; } followEnemy = newEnemy; ActivityHandler.Add(newEnemy.gameObject); return(newEnemy); }