124 lines
4.4 KiB
C#
124 lines
4.4 KiB
C#
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);
|
|
}
|
|
}
|
|
} |