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(); } }