using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using System;
using AFeijia.UI;
public class PanelBasic : UITool
{
///
/// UI类型
///
public string panel_type;
public int id;
///
/// 主界面,执行动画
///
public Image main_panel_image;
/////
///// 遮罩背景
/////
public Image mask_back_ground;
///
/// 弹窗关闭调用事件
///
private Action on_popup_end_callback;
///
/// 弹窗处理结果
///
private bool on_popup_end_result;
///
/// 界面栈,用于返回上一个关闭的页面
///
public static Stack panel_stack = new Stack();
///
/// 当前页面
///
public static PanelBasic current_panel;
///
/// 界面路径,从main_panel到current_panel的路由
///
public Stack panel_route = new Stack();
///
/// 是否初始化
///
private bool inited;
protected override void Awake()
{
if (!inited)
{
base.Awake();
inited = true;
}
}
public void Init_Awake()
{
if (!inited)
{
base.Awake();
inited = true;
}
}
#region 弹窗
///
/// 启用弹窗
///
///
///
///
public virtual void OnPopup(Action _callback = null)
{
if (PanelEnable())
{
if (main_panel_image != null)
{
Sequence sequence = DOTween.Sequence();
sequence.Append(main_panel_image.transform.DOScale(new Vector3(1.1f, 1.1f, 1.1f), 0.2f));
sequence.Append(main_panel_image.transform.DOScale(new Vector3(1, 1, 1), 0.1f).SetDelay(0.025f));
}
if (mask_back_ground != null)
mask_back_ground.DOColor(new Color(0, 0, 0, 0.5f), 0.2f);
on_popup_end_callback = _callback;
}
}
///
/// 弹窗关闭
///
/// 弹窗处理结果
public virtual void OnPopupEnd(bool _result = false)
{
on_popup_end_result = _result;
if (main_panel_image != null)
{
Sequence sequence = DOTween.Sequence();
sequence.Append(main_panel_image.transform.DOScale(new Vector3(1.1f, 1.1f, 1.1f), 0.1f));
sequence.Append(main_panel_image.transform.DOScale(new Vector3(0, 0, 0), 0.2f).SetDelay(0.025f)).OnComplete(() => { PanelDisable(OnPopupEndCallback); });
}
else
{
PanelDisable(OnPopupEndCallback);
}
if (mask_back_ground != null)
mask_back_ground.DOColor(new Color(0, 0, 0, 0f), 0.2f);
}
///
/// 弹窗处理回调
///
private void OnPopupEndCallback()
{
on_popup_end_callback?.Invoke(on_popup_end_result);
on_popup_end_callback = null;
}
#endregion
///
/// 若开启,则关闭;若关闭,则开启
///
public virtual void OnSwitch()
{
if (gameObject.activeSelf)
OnNagetive();
else
OnActive();
}
///
/// 启用界面
///
///
///
///
public virtual void OnActive(Image _main_panel = null, Image _mask = null, Action _callback = null)
{
PanelEnable();
if (_main_panel == null)
_main_panel = main_panel_image;
if (_main_panel != null)
{
Sequence sequence = DOTween.Sequence();
sequence.Append(_main_panel.transform.DOScale(new Vector3(1.1f, 1.1f, 1.1f), 0.2f));
sequence.Append(_main_panel.transform.DOScale(new Vector3(1, 1, 1), 0.1f).SetDelay(0.025f));
}
if (_mask == null)
_mask = mask_back_ground;
if (_mask != null)
_mask.DOColor(new Color(0, 0, 0, 0.5f), 0.2f);
_callback?.Invoke();
OnPanelOpened();
}
///
/// 启用界面
///
/// 关闭的界面
public virtual void OnActive(PanelBasic _nagetive_panel)
{
//关闭其他界面
if (_nagetive_panel != null)
{
_nagetive_panel.OnNagetive();
panel_stack.Push(_nagetive_panel);
}
//打开自己界面
OnActive(null, null, null);
}
///
/// 关闭界面
///
/// 执行动画的载体
/// 遮罩
/// 回调事件
public virtual void OnNagetive(Image _main_panel = null, Image _mask = null, Action _callback = null)
{
//后添加的用来在停止摄像头的时候禁用摄像头的方法
if (_main_panel == null)
_main_panel = main_panel_image;
if (_main_panel != null)
{
Sequence sequence = DOTween.Sequence();
sequence.Append(_main_panel.transform.DOScale(new Vector3(1.1f, 1.1f, 1.1f), 0.1f));
sequence.Append(_main_panel.transform.DOScale(new Vector3(0, 0, 0), 0.2f).SetDelay(0.025f)).OnComplete(PanelDisable);
}
else
{
PanelDisable();
}
if (_mask == null)
_mask = mask_back_ground;
if (_mask != null)
_mask.DOColor(new Color(0, 0, 0, 0f), 0.2f);
_callback?.Invoke();
OnPanelClosed();
}
///
/// 关闭界面
///
/// 是否启用上一个关闭的界面
public virtual void OnNagetive(bool _active_last_panel)
{
if (_active_last_panel)
{
if (panel_stack.Count > 0)
panel_stack.Pop().OnActive();
}
OnNagetive(null, null, null);
}
///
/// 添加收起的面板
///
public virtual PanelBasic PushPanel()
{
panel_stack.Push(this);
return this;
}
///
/// 返回上一个Panel
///
public virtual PanelBasic PopPanel()
{
PanelBasic _panel = null;
if (panel_stack.Count > 0)
_panel = panel_stack.Pop();
return _panel;
}
protected virtual void OnPanelClosed()
{
}
protected virtual void OnPanelOpened()
{
}
protected virtual void OnEnable()
{
current_panel = this;
}
protected virtual void OnDisable()
{
}
///
/// 显示面板
///
private bool PanelEnable()
{
if (!gameObject.activeSelf)
{
gameObject.SetActive(true);
return true;
}
else
return false;
}
///
/// 显示面板
///
private void PanelEnable(Action _callback)
{
gameObject.SetActive(true);
_callback?.Invoke();
}
///
/// 隐藏面板
///
private void PanelDisable()
{
gameObject.SetActive(false);
}
///
/// 隐藏面板
///
private void PanelDisable(Action _callback)
{
gameObject.SetActive(false);
_callback?.Invoke();
}
}