CapersProject/Assets/02.Scripts/Map/MapManager.cs
Nam Tae Gun fd688231c2 타이쿤 맵 수정 및 손님 기능 추가
+ 요리 주문 기능 추가
+ Props 프리팹 일부 수정
+ 오늘의 메뉴 기능 연동
2024-07-17 01:05:53 +09:00

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();
}
}
}