CapersProject/Assets/02.Scripts/Map/GhostBarrelMapController.cs

124 lines
4.4 KiB
C#
Raw Normal View History

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<Transform> _ghostBarrelSpawns;
[SerializeField]
private List<Transform> _boomBarrelSpawns;
[SerializeField]
private List<Transform> _swordBarrelSpawns;
[SerializeField]
private List<Transform> _lavaBarrelSpawns;
[SerializeField]
private List<GhostBarrel> _ghostBarrels;
protected override void InitializeComponents()
{
base.InitializeComponents();
_ghostBarrelSpawns = new List<Transform>(3);
var ghostBarrelSpawns = transform.Find("Spawns/GhostBarrelSpawns");
foreach (Transform element in ghostBarrelSpawns)
{
_ghostBarrelSpawns.Add(element);
}
_boomBarrelSpawns = new List<Transform>(3);
var boomBarrelSpawns = transform.Find("Spawns/BoomBarrelSpawns");
foreach (Transform element in boomBarrelSpawns)
{
_boomBarrelSpawns.Add(element);
}
_swordBarrelSpawns = new List<Transform>(2);
var swordBarrelSpawns = transform.Find("Spawns/SwordBarrelSpawns");
foreach (Transform element in swordBarrelSpawns)
{
_swordBarrelSpawns.Add(element);
}
_lavaBarrelSpawns = new List<Transform>(2);
var lavaBarrelSpawns = transform.Find("Spawns/LavaBarrelSpawns");
foreach (Transform element in lavaBarrelSpawns)
{
_lavaBarrelSpawns.Add(element);
}
}
protected override void InitializeBoss()
{
_ghostBarrels = new List<GhostBarrel>(_ghostBarrelSpawns.Count);
foreach (var element in _ghostBarrelSpawns)
{
var boss = EnemyManager.Instance.InstantiateBoss(BossType.GhostBarrel, element.position, EnemyInstanceLocation);
_ghostBarrels.Add(boss.GetComponent<GhostBarrel>());
}
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<GhostBarrel>());
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);
}
}
}