using System.Collections; using System.Collections.Generic; using BlueWater.Audios; using BlueWater.Enemies; using BlueWater.Enemies.Bosses; using BlueWater.Enemies.Bosses.GhostBarrel; using BlueWater.Uis; using UnityEngine; namespace BlueWater.Maps { public class GhostBarrelMapController : BossMapController { [SerializeField] private List _ghostBarrelSpawns; [SerializeField] private List _boomBarrelSpawns; [SerializeField] private List _swordBarrelSpawns; [SerializeField] private List _lavaBarrelSpawns; [SerializeField] private List _ghostBarrels; protected override void InitializeComponents() { base.InitializeComponents(); _ghostBarrelSpawns = new List(3); var ghostBarrelSpawns = transform.Find("Spawns/GhostBarrelSpawns"); foreach (Transform element in ghostBarrelSpawns) { _ghostBarrelSpawns.Add(element); } _boomBarrelSpawns = new List(3); var boomBarrelSpawns = transform.Find("Spawns/BoomBarrelSpawns"); foreach (Transform element in boomBarrelSpawns) { _boomBarrelSpawns.Add(element); } _swordBarrelSpawns = new List(2); var swordBarrelSpawns = transform.Find("Spawns/SwordBarrelSpawns"); foreach (Transform element in swordBarrelSpawns) { _swordBarrelSpawns.Add(element); } _lavaBarrelSpawns = new List(2); var lavaBarrelSpawns = transform.Find("Spawns/LavaBarrelSpawns"); foreach (Transform element in lavaBarrelSpawns) { _lavaBarrelSpawns.Add(element); } } protected override void InitializeBoss() { _ghostBarrels = new List(_ghostBarrelSpawns.Count); foreach (var element in _ghostBarrelSpawns) { var boss = EnemyManager.Instance.InstantiateBoss(BossType.GhostBarrel, element.position, EnemyInstanceLocation); _ghostBarrels.Add(boss.GetComponent()); } foreach (var element in _boomBarrelSpawns) { EnemyManager.Instance.InstantiateBoss(BossType.BoomBarrel, element.position, EnemyInstanceLocation); } foreach (var element in _swordBarrelSpawns) { EnemyManager.Instance.InstantiateBoss(BossType.SwordBarrel, element.position, EnemyInstanceLocation); } foreach (var element in _lavaBarrelSpawns) { EnemyManager.Instance.InstantiateBoss(BossType.LavaBarrel, element.position, EnemyInstanceLocation); } } public override void ClearMap(GameObject bossObject) { StartCoroutine(ClearMapCoroutine(bossObject)); } protected override IEnumerator ClearMapCoroutine(GameObject bossObject) { _ghostBarrels.Remove(bossObject.GetComponent()); if (_ghostBarrels.Count > 0) yield break; IsCleared = true; AudioManager.Instance.PlaySfx("Shining"); GameManager.Instance.CurrentCombatPlayer.ActivateInvincibility(); VisualFeedbackManager.Instance.SetBaseTimeScale(0.1f); CombatUiManager.Instance.FadeInOut(ClearFadeInOutTime.x, ClearFadeInOutTime.y); var elapsedTime = 0f; while (elapsedTime <= 3f) { elapsedTime += Time.unscaledDeltaTime; yield return null; } DestroyAllEnemiesExceptBoss(bossObject); VisualFeedbackManager.Instance.SetBaseTimeScale(1f); elapsedTime = 0f; while (elapsedTime <= 2f) { elapsedTime += Time.unscaledDeltaTime; yield return null; } OpenMapEntrances(); GameManager.Instance.CurrentCombatPlayer.DeactivateInvincibility(); AudioManager.Instance.PlayBgm(MapManager.Instance.DailyBgm); } } }