105 lines
2.7 KiB
C#
105 lines
2.7 KiB
C#
using System.Numerics;
|
|
using System;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
|
|
public enum PopupType
|
|
{
|
|
PvPModePopup,
|
|
PvAIModePopup,
|
|
OptionsPopup,
|
|
InstructionsPopup
|
|
}
|
|
|
|
public enum PopupScalerType
|
|
{
|
|
None,
|
|
Zoom,
|
|
Fade
|
|
}
|
|
|
|
public class PopupBase : UIBase, IUIBase
|
|
{
|
|
[Header("Popup Scaling")]
|
|
[SerializeField] protected Transform popupScaleContent;
|
|
// [SerializeField] protected bool shouldScale = true;
|
|
[SerializeField] protected float zoomDuration = 0.5f;
|
|
[SerializeField] protected PopupType popupType;
|
|
[SerializeField] protected PopupScalerType popupScalerType = PopupScalerType.Zoom;
|
|
[SerializeField] protected CanvasGroup canvasGroup;
|
|
[SerializeField] protected float fadeDuration;
|
|
|
|
private Action<PopupResultEvent> onComplete;
|
|
public PopupType PopupType => popupType;
|
|
|
|
protected PopupManager popupManager;
|
|
|
|
public override void Show()
|
|
{
|
|
ApplyEffectOnShow();
|
|
}
|
|
|
|
public override void Hide()
|
|
{
|
|
ApplyEffectOnHide();
|
|
}
|
|
|
|
public void Initialize()
|
|
{
|
|
popupManager = popupManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<PopupManager>() : popupManager;
|
|
popupManager.RegisterPopup(this);
|
|
Debug.Log($"Popup Registered: {popupType}");
|
|
}
|
|
|
|
public void InitNextActionEvent(Action<PopupResultEvent> onComplete)
|
|
{
|
|
this.onComplete = onComplete;
|
|
}
|
|
|
|
protected void OnComplete(PopupResultEvent popupResultEvent)
|
|
{
|
|
onComplete?.Invoke(popupResultEvent);
|
|
}
|
|
|
|
private void ApplyEffectOnShow()
|
|
{
|
|
switch (popupScalerType)
|
|
{
|
|
case PopupScalerType.None:
|
|
base.Show();
|
|
break;
|
|
case PopupScalerType.Zoom:
|
|
popupScaleContent.localScale = UnityEngine.Vector3.zero;
|
|
base.Show();
|
|
popupScaleContent.DOScale(UnityEngine.Vector3.one, zoomDuration);
|
|
break;
|
|
case PopupScalerType.Fade:
|
|
canvasGroup.alpha = 0;
|
|
base.Show();
|
|
canvasGroup.DOFade(1, fadeDuration);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void ApplyEffectOnHide()
|
|
{
|
|
switch (popupScalerType)
|
|
{
|
|
case PopupScalerType.None:
|
|
base.Hide();
|
|
break;
|
|
case PopupScalerType.Zoom:
|
|
popupScaleContent.DOScale(UnityEngine.Vector3.zero, zoomDuration).OnComplete(() => base.Hide());
|
|
break;
|
|
case PopupScalerType.Fade:
|
|
canvasGroup.DOFade(0, fadeDuration).OnComplete(() => base.Hide());
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
onComplete = null;
|
|
}
|
|
}
|