using System; using System.Collections; using System.Collections.Generic; using BlueWater.Audios; using BlueWater.Uis; using Sirenix.OdinInspector; using UnityEngine; namespace BlueWater.Maps { public class MapManager : Singleton { [Title("프리팹")] [SerializeField] private TitanSlimeMapController _titanSlimeMapControllerPrefab; [SerializeField] private BossMapController _rhinocerosMapControllerPrefab; [SerializeField] private SandMoleMapController _sandMoleMapControllerPrefab; [SerializeField] private GhostBarrelMapController _ghostBarrelMapControllerPrefab; [field: Title("맵 컨트롤러")] [field: SerializeField] public TitanSlimeMapController TitanSlimeMapController { get; private set; } [field: SerializeField] public BossMapController RhinocerosMapController { get; private set; } [field: SerializeField] public SandMoleMapController SandMoleMapController { get; private set; } [field: SerializeField] public GhostBarrelMapController GhostBarrelMapController { get; private set; } [field: SerializeField] public string DailyBgm { get; private set; }= "DailyBgm1"; [SerializeField] private List _mapControllers; private MapController _currentMapController; public Action OnHardResetAllMap; protected override void OnAwake() { _mapControllers = new List(4) { TitanSlimeMapController, RhinocerosMapController, SandMoleMapController, GhostBarrelMapController }; } private void Start() { AudioManager.Instance.PlayBgm(DailyBgm); } public MapController GetMapController(SaveStage saveStage) { switch (saveStage) { case SaveStage.None: case SaveStage.TitanSlime: return TitanSlimeMapController; case SaveStage.Rhinoceros: return RhinocerosMapController; case SaveStage.SandMole: return SandMoleMapController; case SaveStage.GhostBarrel: return GhostBarrelMapController; default: throw new ArgumentOutOfRangeException(); } } public void HardResetAllMaps() { StartCoroutine(HardResetAllMapsCoroutine()); } private IEnumerator HardResetAllMapsCoroutine() { CombatUiManager.Instance.FadeInOut(0.5f, 0.5f, new Color(0f, 0f, 0f, 0f), 1f); yield return new WaitForSeconds(0.5f); foreach (var element in _mapControllers) { element.ResetMap(true); } TitanSlimeMapController = Instantiate(_titanSlimeMapControllerPrefab); RhinocerosMapController = Instantiate(_rhinocerosMapControllerPrefab); SandMoleMapController = Instantiate(_sandMoleMapControllerPrefab); GhostBarrelMapController = Instantiate(_ghostBarrelMapControllerPrefab); _mapControllers = new List(4) { TitanSlimeMapController, RhinocerosMapController, SandMoleMapController, GhostBarrelMapController }; var moveMapController = GetMapController(DataManager.Instance.CurrentSaveStage); moveMapController.MovePlayer(); GameManager.Instance.CurrentCombatPlayer.SetCurrentHealthPointMax(); CombatUiManager.Instance.FieldBossHealthPointUi.SetActiveHpSlider(false); AudioManager.Instance.StopSfxAll(); AudioManager.Instance.PlayBgm(DailyBgm); OnHardResetAllMap?.Invoke(); } public void RestartCurrentMap() { if (_currentMapController) { _currentMapController.ResetMap(); } _currentMapController = GetMapController(DataManager.Instance.CurrentSaveStage); _currentMapController.RestartMap(); AudioManager.Instance.StopSfxAll(); AudioManager.Instance.PlayBgm(DailyBgm); } public void MoveSelectStage(int stage) { _currentMapController = GetMapController(DataManager.Instance.CurrentSaveStage); if (_currentMapController) { _currentMapController.ResetMap(); } var moveMapController = GetMapController((SaveStage)stage); moveMapController.MovePlayer(); AudioManager.Instance.StopSfxAll(); AudioManager.Instance.PlayBgm(DailyBgm); } public void ForceKillCurrentBoss() { _currentMapController = GetMapController(DataManager.Instance.CurrentSaveStage); if (!_currentMapController) { return; } _currentMapController.ForceKillBoss(); } } }