2024-06-03 18:26:03 +00:00
|
|
|
|
using System.Collections;
|
2024-06-13 16:46:37 +00:00
|
|
|
|
using BlueWater.Audios;
|
|
|
|
|
using BlueWater.Enemies;
|
|
|
|
|
using BlueWater.Enemies.Bosses;
|
2024-06-03 18:26:03 +00:00
|
|
|
|
using BlueWater.Uis;
|
2024-06-21 22:11:53 +00:00
|
|
|
|
using BlueWater.Utility;
|
2024-06-03 18:26:03 +00:00
|
|
|
|
using Sirenix.OdinInspector;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace BlueWater.Maps
|
|
|
|
|
{
|
2024-06-13 16:46:37 +00:00
|
|
|
|
public class BossMapController : MapController
|
2024-06-03 18:26:03 +00:00
|
|
|
|
{
|
|
|
|
|
[SerializeField, Required]
|
|
|
|
|
protected Transform BossSpawnTransform;
|
|
|
|
|
|
2024-06-13 16:46:37 +00:00
|
|
|
|
[SerializeField]
|
|
|
|
|
protected BossType BossType;
|
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
|
[SerializeField, Required]
|
|
|
|
|
protected BossMapTrigger BossMapTrigger;
|
|
|
|
|
|
|
|
|
|
protected override void Start()
|
|
|
|
|
{
|
|
|
|
|
base.Start();
|
|
|
|
|
|
|
|
|
|
BossMapTrigger.OnInteractionActive += InitializeMap;
|
|
|
|
|
BossMapTrigger.OnInteractionActive += CloseMapEntrances;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnDestroy()
|
|
|
|
|
{
|
|
|
|
|
base.OnDestroy();
|
|
|
|
|
|
|
|
|
|
BossMapTrigger.OnInteractionActive -= InitializeMap;
|
|
|
|
|
BossMapTrigger.OnInteractionActive -= CloseMapEntrances;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void InitializeComponents()
|
|
|
|
|
{
|
|
|
|
|
base.InitializeComponents();
|
|
|
|
|
|
|
|
|
|
BossSpawnTransform = transform.Find("Spawns/BossSpawn");
|
|
|
|
|
BossMapTrigger = transform.Find("Props/2D/BossMapTrigger").GetComponent<BossMapTrigger>();
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-03 18:26:03 +00:00
|
|
|
|
public override void InitializeMap()
|
|
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
|
Utils.StartUniqueCoroutine(this, ref MapInitializeCoroutineInstance, InitializeMapCoroutine());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual void InitializeBoss()
|
|
|
|
|
{
|
|
|
|
|
EnemyManager.Instance.InstantiateBoss(BossType, BossSpawnTransform.position, EnemyInstanceLocation);
|
|
|
|
|
}
|
2024-06-03 18:26:03 +00:00
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
|
public override void ResetMap(bool isHardReset = false)
|
|
|
|
|
{
|
|
|
|
|
DestroyAllObjects();
|
|
|
|
|
OpenMapEntrances();
|
|
|
|
|
switch (isHardReset)
|
2024-06-03 18:26:03 +00:00
|
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
|
case false when IsCleared:
|
|
|
|
|
return;
|
|
|
|
|
case true:
|
|
|
|
|
IsCleared = false;
|
|
|
|
|
break;
|
2024-06-03 18:26:03 +00:00
|
|
|
|
}
|
2024-06-21 22:11:53 +00:00
|
|
|
|
BossMapTrigger.ResetTrigger();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void RestartMap()
|
|
|
|
|
{
|
|
|
|
|
StartCoroutine(RestartMapCoroutine());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void ClearMap()
|
|
|
|
|
{
|
|
|
|
|
IsCleared = true;
|
|
|
|
|
StartCoroutine(nameof(ClearMapCoroutine));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual IEnumerator InitializeMapCoroutine()
|
|
|
|
|
{
|
|
|
|
|
DestroyAllObjects();
|
2024-06-03 18:26:03 +00:00
|
|
|
|
|
2024-06-13 16:46:37 +00:00
|
|
|
|
DataManager.Instance.CurrentSaveStage = SaveStage;
|
2024-06-21 22:11:53 +00:00
|
|
|
|
if (!string.IsNullOrEmpty(BgmName))
|
2024-06-13 16:46:37 +00:00
|
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
|
AudioManager.Instance.PlayBgm(BgmName);
|
2024-06-13 16:46:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
|
CombatUiManager.Instance.FadeInOut(InitializeFadeInOutTime.x, InitializeFadeInOutTime.y);
|
2024-06-13 16:46:37 +00:00
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
|
yield return new WaitForSeconds(InitializeFadeInOutTime.x + InitializeFadeInOutTime.y);
|
|
|
|
|
|
|
|
|
|
InitializeBoss();
|
2024-06-13 16:46:37 +00:00
|
|
|
|
}
|
2024-06-03 18:26:03 +00:00
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
|
protected virtual IEnumerator RestartMapCoroutine()
|
2024-06-03 18:26:03 +00:00
|
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
|
DestroyAllObjects();
|
|
|
|
|
|
|
|
|
|
DataManager.Instance.CurrentSaveStage = SaveStage;
|
2024-06-23 19:52:28 +00:00
|
|
|
|
CombatUiManager.Instance.FieldBossHealthPointUi.SetActiveHpSlider(false);
|
2024-06-21 22:11:53 +00:00
|
|
|
|
AudioManager.Instance.StopBgm();
|
|
|
|
|
CombatUiManager.Instance.FadeInOut(InitializeFadeInOutTime.x, InitializeFadeInOutTime.y,
|
|
|
|
|
new Color(0f, 0f, 0f, 0f), 1f);
|
|
|
|
|
|
|
|
|
|
yield return new WaitForSeconds(InitializeFadeInOutTime.x);
|
|
|
|
|
|
|
|
|
|
var currentCombatPlayer = GameManager.Instance.CurrentCombatPlayer;
|
|
|
|
|
if (currentCombatPlayer)
|
|
|
|
|
{
|
|
|
|
|
Destroy(currentCombatPlayer.gameObject);
|
|
|
|
|
}
|
|
|
|
|
GameManager.Instance.InstantiateCombatPlayer(PlayerSpawnLocation.position, Quaternion.identity);
|
|
|
|
|
BossMapTrigger.ResetTrigger();
|
|
|
|
|
OpenMapEntrances();
|
2024-06-03 18:26:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
|
protected virtual IEnumerator ClearMapCoroutine()
|
2024-06-03 18:26:03 +00:00
|
|
|
|
{
|
|
|
|
|
VisualFeedbackManager.Instance.SetBaseTimeScale(0.1f);
|
2024-06-21 22:11:53 +00:00
|
|
|
|
CombatUiManager.Instance.FadeInOut(ClearFadeInOutTime.x, ClearFadeInOutTime.y);
|
2024-06-03 18:26:03 +00:00
|
|
|
|
|
|
|
|
|
var elapsedTime = 0f;
|
|
|
|
|
while (elapsedTime <= 3f)
|
|
|
|
|
{
|
|
|
|
|
elapsedTime += Time.unscaledDeltaTime;
|
|
|
|
|
yield return null;
|
|
|
|
|
}
|
2024-06-23 09:38:19 +00:00
|
|
|
|
DestroyAllEnemiesExceptBoss();
|
2024-06-03 18:26:03 +00:00
|
|
|
|
VisualFeedbackManager.Instance.SetBaseTimeScale(1f);
|
|
|
|
|
|
|
|
|
|
elapsedTime = 0f;
|
|
|
|
|
while (elapsedTime <= 2f)
|
|
|
|
|
{
|
|
|
|
|
elapsedTime += Time.unscaledDeltaTime;
|
|
|
|
|
yield return null;
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
|
OpenMapEntrances();
|
2024-06-03 18:26:03 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|