+ 플레이어가 죽었을 때, grayscale을 이용한 이펙트 추가 + ItemLootInfoUi rectTransform 참조 오류 수정 + MoveTitleScene() 실행될 때, grayscale 비활성화 + 기존의 Vignette기능 카메라매니저 -> 포스트프로세싱매니저 + JumpSlam null 오류들 수정
206 lines
6.8 KiB
C#
206 lines
6.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using BlueWater.Items;
|
|
using BlueWater.Maps;
|
|
using DG.Tweening;
|
|
using Sirenix.OdinInspector;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using UnityEngine.UI;
|
|
|
|
namespace BlueWater.Uis
|
|
{
|
|
public class CombatUiManager : Singleton<CombatUiManager>
|
|
{
|
|
[field: Title("UI")]
|
|
[field: SerializeField]
|
|
public Canvas MainCanvas { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public Canvas WorldSpaceCanvas { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public CombatSkillUi CombatSkillUi { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public FieldBossHealthPointUi FieldBossHealthPointUi { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public PlayerHealthPointUi PlayerHealthPointUi { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public ItemLootUi ItemLootUi { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public CombatItemInventoryUi CombatItemInventoryUi { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public GameOverPopupUi GameOverPopupUi { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public ClearPopupUi ClearPopupUi { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public MenuPopupUi CombatMenuPopupUi { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public CombatTutorialUi CombatTutorialUi { get; private set; }
|
|
|
|
[SerializeField]
|
|
private Image _fadeImage;
|
|
|
|
[Title("효과")]
|
|
[SerializeField]
|
|
private Vector2 _fadeInOutDuration = new(0.2f, 0.3f);
|
|
|
|
public List<PopupUi> PopupUiList { get; private set; }
|
|
|
|
protected override void OnAwake()
|
|
{
|
|
InitializeComponents();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
PopupUi.OnPopupUiOpenEvent += RegisterPopup;
|
|
PopupUi.OnPopupUiCloseEvent += UnregisterPopup;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
CombatTutorialUi.ShowFirstTutorialUi();
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
PopupUi.OnPopupUiOpenEvent -= RegisterPopup;
|
|
PopupUi.OnPopupUiCloseEvent -= UnregisterPopup;
|
|
}
|
|
|
|
[Button("셋팅 초기화")]
|
|
private void InitializeComponents()
|
|
{
|
|
MainCanvas = GetComponent<Canvas>();
|
|
WorldSpaceCanvas = GameObject.Find("WorldSpaceCanvas").GetComponent<Canvas>();
|
|
CombatSkillUi = MainCanvas.transform.Find("CombatSkillUi").GetComponent<CombatSkillUi>();
|
|
FieldBossHealthPointUi = MainCanvas.transform.Find("FieldBossHealthPointUi").GetComponent<FieldBossHealthPointUi>();
|
|
PlayerHealthPointUi = MainCanvas.transform.Find("PlayerHealthPointUi").GetComponent<PlayerHealthPointUi>();
|
|
ItemLootUi = MainCanvas.transform.Find("ItemLootUi").GetComponent<ItemLootUi>();
|
|
CombatItemInventoryUi = MainCanvas.transform.Find("CombatItemInventoryUi").GetComponent<CombatItemInventoryUi>();
|
|
GameOverPopupUi = MainCanvas.transform.Find("GameOverPopupUi").GetComponent<GameOverPopupUi>();
|
|
ClearPopupUi = MainCanvas.transform.Find("ClearPopupUi").GetComponent<ClearPopupUi>();
|
|
CombatMenuPopupUi = MainCanvas.transform.Find("CombatMenuPopupUi").GetComponent<MenuPopupUi>();
|
|
CombatTutorialUi = MainCanvas.transform.Find("CombatTutorialUi").GetComponent<CombatTutorialUi>();
|
|
_fadeImage = MainCanvas.transform.Find("FadeImage").GetComponent<Image>();
|
|
|
|
PopupUiList = new List<PopupUi>(8);
|
|
}
|
|
|
|
private void RegisterPopup(PopupUi popup)
|
|
{
|
|
if (!PopupUiList.Contains(popup))
|
|
{
|
|
PopupUiList.Add(popup);
|
|
}
|
|
}
|
|
|
|
private void UnregisterPopup(PopupUi popup)
|
|
{
|
|
if (PopupUiList.Contains(popup))
|
|
{
|
|
PopupUiList.Remove(popup);
|
|
}
|
|
}
|
|
|
|
public void CloseLastPopup()
|
|
{
|
|
if (PopupUiList.Count <= 0) return;
|
|
|
|
PopupUiList[^1].Close();
|
|
}
|
|
|
|
public void CloseAllPopup()
|
|
{
|
|
var tempList = new List<PopupUi>(PopupUiList);
|
|
|
|
foreach (var popup in tempList)
|
|
{
|
|
popup.Close();
|
|
}
|
|
|
|
PopupUiList.Clear();
|
|
}
|
|
|
|
public void FadeInOut()
|
|
{
|
|
_fadeImage.enabled = true;
|
|
_fadeImage.color = new Color(1, 1, 1, 0);
|
|
_fadeImage.DOFade(1f, _fadeInOutDuration.x).OnComplete(() =>
|
|
{
|
|
_fadeImage.DOFade(0f, _fadeInOutDuration.y).OnComplete(() =>
|
|
{
|
|
_fadeImage.enabled = false;
|
|
});
|
|
});
|
|
}
|
|
|
|
public void RestartCurrentStage()
|
|
{
|
|
MapController MapController = null;
|
|
// TODO : 세컨드 맵 추가
|
|
switch (DataManager.Instance.CurrentSaveStage)
|
|
{
|
|
case SaveStage.FirstTutorial:
|
|
MapController = FindAnyObjectByType<FirstTutorialMapController>();
|
|
break;
|
|
// case SaveStage.SecondTutorial:
|
|
// MapController = FindAnyObjectByType<SecondTutorialMapController>();
|
|
// break;
|
|
case SaveStage.Slime:
|
|
MapController = FindAnyObjectByType<TitanSlimeMapController>();
|
|
break;
|
|
case SaveStage.Rhinoceros:
|
|
MapController = FindAnyObjectByType<RhinocerosMapController>();
|
|
break;
|
|
default:
|
|
throw new ArgumentOutOfRangeException();
|
|
}
|
|
|
|
if (MapController != null)
|
|
{
|
|
MapManager.Instance.InitMap(MapController);
|
|
}
|
|
CloseAllPopup();
|
|
}
|
|
|
|
public void MoveNextStage()
|
|
{
|
|
DataManager.Instance.CurrentSaveStage++;
|
|
|
|
RestartCurrentStage();
|
|
}
|
|
|
|
public void MoveSelectStage(int stage)
|
|
{
|
|
DataManager.Instance.CurrentSaveStage = (SaveStage)stage;
|
|
|
|
RestartCurrentStage();
|
|
}
|
|
|
|
public void MoveTitleScene()
|
|
{
|
|
PostProcessingManager.Instance.ToggleRendererFeature(RendererFeatureName.GrayscaleRenderPassFeature, false);
|
|
VisualFeedbackManager.Instance.SetBaseTimeScale(1f);
|
|
SceneManager.LoadScene("00.CombatTitle");
|
|
}
|
|
|
|
public void QuitGame()
|
|
{
|
|
#if UNITY_EDITOR
|
|
UnityEditor.EditorApplication.isPlaying = false;
|
|
#else
|
|
Application.Quit();
|
|
#endif
|
|
}
|
|
}
|
|
} |