| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 | using FairyGUI;using UnityEngine;using System.Collections.Generic;namespace GFGGame{    /// <summary>    /// FairyGUI中Window的扩展类,功能界面基本都用这个    /// </summary>    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;            }        }        /// <summary>        /// 点击空白关闭,true关闭,false不关闭,默认值关闭        /// </summary>        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;            }        }        /// <summary>        /// 设置视图组件        /// </summary>        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;//这几个包不释放            base.Dispose();            if (_window != null)            {                _window.RemoveFromParent();                _window.Dispose();                _window = null;            }        }        /// <summary>        /// 打开界面        /// </summary>        public override void Show()        {            if (_window != null)            {                _window.Show();            }        }        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<GGraph> _pool = new List<GGraph>();            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);                }            }        }    }}
 |