using System; using System.Collections.Generic; using BlueWater.Audios; using UnityEngine; namespace BlueWater.Maps { public class MapManager : Singleton { [field: SerializeField] public TitanSlimeMapController TitanSlimeMapController { get; private set; } [field: SerializeField] public BossMapController RhinocerosMapController { get; private set; } [field: SerializeField] public SandMoleMapController SandMoleMapController { get; private set; } private List _mapControllers; private MapController _currentMapController; protected override void OnAwake() { _mapControllers = new List(3) { TitanSlimeMapController, RhinocerosMapController, SandMoleMapController }; } public MapController GetMapController(SaveStage saveStage) { switch (saveStage) { case SaveStage.None: return null; case SaveStage.TitanSlime: return TitanSlimeMapController; case SaveStage.Rhinoceros: return RhinocerosMapController; case SaveStage.SandMole: return SandMoleMapController; default: throw new ArgumentOutOfRangeException(); } } public void HardResetAllMaps() { foreach (var element in _mapControllers) { element.ResetMap(true); } GameManager.Instance.CurrentCombatPlayer.SetCurrentHealthPointMax(); AudioManager.Instance.StopBgm(); } public void RestartCurrentMap() { if (_currentMapController) { _currentMapController.ResetMap(); } _currentMapController = GetMapController(DataManager.Instance.CurrentSaveStage); _currentMapController.RestartMap(); } public void MoveSelectStage(int stage) { _currentMapController = GetMapController(DataManager.Instance.CurrentSaveStage); if (_currentMapController) { _currentMapController.ResetMap(); } var moveMapController = GetMapController((SaveStage)stage); moveMapController.MovePlayer(); } public void ForceKillCurrentBoss() { _currentMapController = GetMapController(DataManager.Instance.CurrentSaveStage); if (!_currentMapController) { return; } _currentMapController.ForceKillBoss(); } } }