ict.xunfei/Assets/Scripts/UIManager/Panel/PanelBasic.cs

305 lines
7.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using System;
using AFeijia.UI;
public class PanelBasic : UITool
{
/// <summary>
/// UI类型
/// </summary>
public string panel_type;
public int id;
/// <summary>
/// 主界面,执行动画
/// </summary>
public Image main_panel_image;
///// <summary>
///// 遮罩背景
///// </summary>
public Image mask_back_ground;
/// <summary>
/// 弹窗关闭调用事件
/// </summary>
private Action<bool> on_popup_end_callback;
/// <summary>
/// 弹窗处理结果
/// </summary>
private bool on_popup_end_result;
/// <summary>
/// 界面栈,用于返回上一个关闭的页面
/// </summary>
public static Stack<PanelBasic> panel_stack = new Stack<PanelBasic>();
/// <summary>
/// 当前页面
/// </summary>
public static PanelBasic current_panel;
/// <summary>
/// 界面路径从main_panel到current_panel的路由
/// </summary>
public Stack<PanelBasic> panel_route = new Stack<PanelBasic>();
/// <summary>
/// 是否初始化
/// </summary>
private bool inited;
protected override void Awake()
{
if (!inited)
{
base.Awake();
inited = true;
}
}
public void Init_Awake()
{
if (!inited)
{
base.Awake();
inited = true;
}
}
#region
/// <summary>
/// 启用弹窗
/// </summary>
/// <param name="_main_panel"></param>
/// <param name="_mask"></param>
/// <param name="_callback"></param>
public virtual void OnPopup(Action<bool> _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;
}
}
/// <summary>
/// 弹窗关闭
/// </summary>
/// <param name="_result"> 弹窗处理结果</param>
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);
}
/// <summary>
/// 弹窗处理回调
/// </summary>
private void OnPopupEndCallback()
{
on_popup_end_callback?.Invoke(on_popup_end_result);
on_popup_end_callback = null;
}
#endregion
/// <summary>
/// 若开启,则关闭;若关闭,则开启
/// </summary>
public virtual void OnSwitch()
{
if (gameObject.activeSelf)
OnNagetive();
else
OnActive();
}
/// <summary>
/// 启用界面
/// </summary>
/// <param name="_main_panel"></param>
/// <param name="_mask"></param>
/// <param name="_callback"></param>
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();
}
/// <summary>
/// 启用界面
/// </summary>
/// <param name="_nagetive_panel"> 关闭的界面 </param>
public virtual void OnActive(PanelBasic _nagetive_panel)
{
//关闭其他界面
if (_nagetive_panel != null)
{
_nagetive_panel.OnNagetive();
panel_stack.Push(_nagetive_panel);
}
//打开自己界面
OnActive(null, null, null);
}
/// <summary>
/// 关闭界面
/// </summary>
/// <param name="_main_panel"> 执行动画的载体</param>
/// <param name="_mask"> 遮罩</param>
/// <param name="_callback"> 回调事件</param>
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();
}
/// <summary>
/// 关闭界面
/// </summary>
/// <param name="_active_last_panel"> 是否启用上一个关闭的界面 </param>
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);
}
/// <summary>
/// 添加收起的面板
/// </summary>
public virtual PanelBasic PushPanel()
{
panel_stack.Push(this);
return this;
}
/// <summary>
/// 返回上一个Panel
/// </summary>
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()
{
}
/// <summary>
/// 显示面板
/// </summary>
private bool PanelEnable()
{
if (!gameObject.activeSelf)
{
gameObject.SetActive(true);
return true;
}
else
return false;
}
/// <summary>
/// 显示面板
/// </summary>
private void PanelEnable(Action _callback)
{
gameObject.SetActive(true);
_callback?.Invoke();
}
/// <summary>
/// 隐藏面板
/// </summary>
private void PanelDisable()
{
gameObject.SetActive(false);
}
/// <summary>
/// 隐藏面板
/// </summary>
private void PanelDisable(Action _callback)
{
gameObject.SetActive(false);
_callback?.Invoke();
}
}