162 lines
5.4 KiB
C#
162 lines
5.4 KiB
C#
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<MapManager>
|
|
{
|
|
[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<MapController> _mapControllers;
|
|
private MapController _currentMapController;
|
|
|
|
public Action OnHardResetAllMap;
|
|
|
|
protected override void OnAwake()
|
|
{
|
|
_mapControllers = new List<MapController>(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()
|
|
{
|
|
PlayerInputKeyManager.Instance.DisableCurrentPlayerInput();
|
|
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<MapController>(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();
|
|
|
|
yield return new WaitForSeconds(1.5f);
|
|
PlayerInputKeyManager.Instance.EnableCurrentPlayerInput();
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
} |