CapersProject/Assets/02.Scripts/Ui/Tycoon/UpgradePopupUi.cs
2024-12-10 18:56:18 +09:00

147 lines
4.8 KiB
C#

using System.Collections;
using BlueWater.Items;
using BlueWater.Tycoons;
using UnityEngine;
using UnityEngine.UI;
using Sirenix.OdinInspector;
using Spine.Unity;
using Unity.VisualScripting;
namespace BlueWater.Uis
{
public class UpgradePopupUi : PopupUi
{
[SerializeField]
private GameObject _panel;
[SerializeField]
private GameObject information; //정보를 알려주는 이미지
[SerializeField]
private Image informationTabel; //정보를 알려주는 이미지
[SerializeField]
private Image informationIngredient; //정보를 알려주는 이미지
[SerializeField]
private Image ingredientImage; //재료 이미지
[SerializeField]
private SkeletonGraphic paperAnimation;
[SerializeField]
private Button closeButton;
private void Start()
{
EventManager.OnLevelUp += StartUpgradePopup;
}
private void OnDestroy()
{
EventManager.OnLevelUp -= StartUpgradePopup;
}
public override void Open()
{
VisualFeedbackManager.Instance.SetBaseTimeScale(0.0f);
PlayerInputKeyManager.Instance.SwitchCurrentActionMap(InputActionMaps.TycoonUi);
PopupUiController.RegisterPopup(this);
_panel.SetActive(true);
IsOpened = true;
}
public override void Close()
{
_panel.SetActive(false);
PopupUiController.UnregisterPopup(this);
PlayerInputKeyManager.Instance.SwitchCurrentActionMap(InputActionMaps.Tycoon);
IsOpened = false;
VisualFeedbackManager.Instance.ResetTimeScale();
}
private void StartUpgradePopup(LevelData currentLevelData)
{
if (string.IsNullOrEmpty(currentLevelData.OpenUpgrade)) return;
ingredientImage.sprite = int.Parse(currentLevelData.Idx) switch
{
5 => ItemManager.Instance.LiquidDataSo.GetDataByIdx("LiquidB").Sprite,
10 => ItemManager.Instance.LiquidDataSo.GetDataByIdx("LiquidC").Sprite,
15 => ItemManager.Instance.LiquidDataSo.GetDataByIdx("LiquidD").Sprite,
20 => ItemManager.Instance.LiquidDataSo.GetDataByIdx("LiquidE").Sprite,
25 => ItemManager.Instance.LiquidDataSo.GetDataByIdx("Garnish1").Sprite,
30 => ItemManager.Instance.LiquidDataSo.GetDataByIdx("Garnish2").Sprite,
_ => ingredientImage.sprite
};
informationIngredient.enabled = int.Parse(currentLevelData.Idx) != 35;
if (int.Parse(currentLevelData.Idx) <= 35)
{
informationIngredient.rectTransform.anchoredPosition = new Vector3(-250f,0f,0f);
informationTabel.rectTransform.anchoredPosition = new Vector3(250f,0f,0f);
}
Open();
var trackEntry = paperAnimation.AnimationState.SetAnimation(0, "Idle", false);
//trackEntry.TimeScale = Time.unscaledDeltaTime * 15f;
trackEntry.Complete += (track) =>
{
StartCoroutine(StartUpgradePopupCoroutine(currentLevelData));
closeButton.GameObject().SetActive(true);
};
}
// ReSharper disable Unity.PerformanceAnalysis
private IEnumerator StartUpgradePopupCoroutine(LevelData currentLevelData)
{
float timer = 0f;
while (timer < 0.5)
{
timer += Time.unscaledDeltaTime;
float t = timer / 0.5f;
float easedT = EaseEffect.BounceOut(t);
information.transform.localScale =
Vector3.Lerp(new Vector3(0.0f, 0.0f, 1.0f), new Vector3(1.0f, 1.0f, 1.0f), easedT);
yield return null;
}
}
public void OnCloseButton()
{
StartCoroutine(CloseUpgradePopupCoroutine());
closeButton.GameObject().SetActive(false);
}
private IEnumerator CloseUpgradePopupCoroutine()
{
float timer = 0f;
while (timer < 0.5)
{
timer += Time.unscaledDeltaTime;
float t = timer / 0.5f;
float easedT = EaseEffect.BounceOut(t);
information.transform.localScale =
Vector3.Lerp(new Vector3(1.0f, 1.0f, 1.0f), new Vector3(0.0f, 0.0f, 1.0f), easedT);
yield return null;
}
paperAnimation.AnimationState.SetAnimation(0, "Back", false).Complete += (trackEntry) =>
{
Close();
};
}
}
}