using System.Collections; using System.Collections.Generic; using BlueWaterProject; using Sirenix.OdinInspector; using UnityEngine; // ReSharper disable once CheckNamespace public abstract class BossMapController : MonoBehaviour { /// 컴포넌트 [Title("컴포넌트")] [SerializeField, Required] protected Transform playerSpawnTransform; [SerializeField, Required] protected Transform bossSpawnTransform; [SerializeField, Required] protected Transform bossInstantiateTransform; [SerializeField, Required] protected GameObject bossPrefab; [field: SerializeField] public Transform ParticleInstantiateLocation { get; private set; } protected List bossInstanceList = new(10); public virtual void InitBossMap() { AllDestroyObjects(); bossInstanceList = new List(10); if (GameManager.Inst) { var player = GameManager.Inst.CurrentCombatPlayer; if (player) { Destroy(player.gameObject); } GameManager.Inst.InstantiateCombatPlayer(playerSpawnTransform.position); } // 보스 override로 추가 } public void AllDestroyBoss() { foreach (var element in bossInstanceList) { Destroy(element); } } public void AllDestroyObjects() { foreach (var element in bossInstanceList) { Destroy(element); } foreach (Transform element in ParticleInstantiateLocation) { Destroy(element.gameObject); } } public virtual void DieBoss() { StartCoroutine(nameof(DieBossCoroutine)); } private IEnumerator DieBossCoroutine() { VisualFeedbackManager.Inst.SetBaseTimeScale(0.1f); CombatUiManager.Inst.FadeInOut(); var elapsedTime = 0f; while (elapsedTime <= 3f) { elapsedTime += Time.unscaledDeltaTime; yield return null; } AllDestroyBoss(); VisualFeedbackManager.Inst.SetBaseTimeScale(1f); elapsedTime = 0f; while (elapsedTime <= 2f) { elapsedTime += Time.unscaledDeltaTime; yield return null; } CombatUiManager.Inst.ClearPopupUi.Open(); } }