using FairyGUI;
using UnityEngine;
using System.Collections.Generic;
namespace GFGGame
{
///
/// FairyGUI中Window的扩展类,功能界面基本都用这个
///
public class BaseWindow : UIView, IUIView
{
private Window _window;
private GGraph _btnClose;
private bool _clickBlankToClose;
private bool _modal;
public bool modal
{
get => _modal;
set
{
_modal = value;
if (_window != null)
{
_window.modal = modal;
}
}
}
protected bool bringToFontOnClick
{
set
{
_window.bringToFontOnClick = value;
}
}
///
/// 点击空白关闭,true关闭,false不关闭,默认值关闭
///
protected bool clickBlankToClose
{
set
{
_clickBlankToClose = value;
if (this.viewCom != null && this.viewCom.root != null)
{
if (_clickBlankToClose)
{
CheckCreateCloseButton();
}
else
{
CheckRemoveCloseButton();
}
}
}
}
public override GComponent viewCom
{
get => this._window;
set
{
contentPane = value;
}
}
///
/// 设置视图组件
///
private GComponent contentPane
{
set
{
if (_window == null)
{
_window = new Window();
}
_window.contentPane = value;
_window.modal = modal;
}
}
public override void Dispose()
{
// if (packageName == ResPathUtil.GetUIPackagePath("CommonGame") || packageName == ResPathUtil.GetUIPackagePath("Common") || packageName == ResPathUtil.GetUIPackagePath("Main")) return;//这几个包不释放
if (_window != null)
{
_window.RemoveFromParent();
_window.Dispose();
_window = null;
}
base.Dispose();
}
///
/// 打开界面
///
public override void Show()
{
if (_window != null)
{
_window.Show();
}
}
///
/// 刷新界面
///
protected override void BringToFront()
{
if (_window != null)
{
this._window.BringToFront();
}
}
protected override void OnInit()
{
base.OnInit();
_clickBlankToClose = true;
if (isfullScreen)
{
viewAnimationType = EnumViewAnimationType.None;
}
}
protected override void OnShown()
{
base.OnShown();
CheckCreateCloseButton();
}
protected override void OnHide()
{
base.OnHide();
CheckRemoveCloseButton();
}
protected override void OnDoHideAnimationCompleted()
{
if (this._window != null)
{
this._window.Hide();
}
}
virtual protected void closeEventHandler(EventContext context)
{
Hide();
}
private void CheckCreateCloseButton()
{
if (_clickBlankToClose)
{
_btnClose = CloseButtonPool.GetCloseButton();
_window.AddChildAt(_btnClose, 0);
_btnClose.onClick.Add(closeEventHandler);
_btnClose.x = -(_btnClose.width - _window.width) / 2;
_btnClose.y = -(_btnClose.height - _window.height) / 2;
}
}
private void CheckRemoveCloseButton()
{
if (_btnClose != null)
{
_btnClose.onClick.Remove(closeEventHandler);
_btnClose.RemoveFromParent();
CloseButtonPool.PutCloseButton(_btnClose);
_btnClose = null;
}
}
private class CloseButtonPool
{
private static List _pool = new List();
public static GGraph GetCloseButton()
{
GGraph btnClose = null;
if (_pool.Count > 0)
{
int i = _pool.Count - 1;
btnClose = _pool[i];
_pool.RemoveAt(_pool.Count - 1);
}
else
{
btnClose = new GGraph();
btnClose.DrawRect(GRoot.inst.width, GRoot.inst.height, 0, Color.red, UIConfig.modalLayerColor);
btnClose.AddRelation(GRoot.inst, RelationType.Size);
btnClose.alpha = 0;
}
return btnClose;
}
public static void PutCloseButton(GGraph gGraph)
{
if (!_pool.Contains(gGraph))
{
_pool.Add(gGraph);
}
}
}
}
}