| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 | using ET;using FairyGUI;using System.Collections;using System.Collections.Generic;using UnityEngine;namespace GFGGame{    /// <summary>    /// 视图基类,界面不可以直接继承    /// </summary>    public class UIView : IUIView    {        private string _descFilePath;        private EnumViewAnimationType _viewAnimationType = EnumViewAnimationType.None;        /// <summary>        /// 打开视图传递的参数        /// </summary>        public object viewData { get; set; }        public string viewName { get; set; }        /// <summary>        /// 设置视图组件        /// </summary>        public virtual GComponent viewCom { get; set; }        /// <summary>        /// 设置是否全屏自适应        /// </summary>        public bool isfullScreen { get; set; }        /// <summary>        /// 设置是否可以返回界面        /// </summary>        public bool isReturnView { get; set; }        /// <summary>        /// 设置是否可以返回窗口        /// </summary>        public bool isReturnWindow { get; set; }        /// <summary>        /// 设置返回界面是否刷新        /// </summary>        public bool backRefresh { get; set; }        /// <summary>        /// FairyGUI包名        /// </summary>        public string packageName        {            get            {                return _descFilePath;            }            set            {                _descFilePath = ResPathUtil.GetUIPackagePath(value);                GFGUIPackage.AddPackage(_descFilePath);            }        }        /// <summary>        /// 界面关闭时间        /// </summary>        /// <value></value>        public long closeTime { get; set; }        /// <summary>        /// 是否显示中        /// </summary>        public bool isShowing        {            get { return viewCom != null && viewCom.onStage; }        }        /// <summary>        /// 设置视图显示和隐藏的动画类型        /// </summary>        protected EnumViewAnimationType viewAnimationType        {            set            {                _viewAnimationType = value;            }        }        public UIView()        {            //            Init();            OnInit();            if (viewCom != null)            {                viewCom.onAddedToStage.Add(__addedToStage);                viewCom.onRemovedFromStage.Add(__removeFromStage);            }        }        public virtual void Dispose()        {            if (viewCom != null)            {                viewCom.RemoveFromParent();                viewCom.Dispose();                viewCom = null;            }            if (_descFilePath != null)            {                if (packageName != ResPathUtil.GetUIPackagePath("CommonGame") && packageName != ResPathUtil.GetUIPackagePath("Common") && packageName != ResPathUtil.GetUIPackagePath("Main"))                {                    GFGUIPackage.ReleasePackage(_descFilePath);                } //这几个包不释放            }            _descFilePath = null;            viewData = null;            ViewManager.ClearUIView(viewName);        }        virtual protected void Init()        {        }        virtual protected void OnInit()        {        }        /// <summary>        /// 界面打开状态刷新界面        /// </summary>        virtual public void Refresh()        {            object temp = viewData;            this.OnHide();            this.viewData = temp;            this.BringToFront();            this.OnShown();        }        public virtual void Show()        {        }        virtual protected void BringToFront()        {        }        public virtual void Hide()        {            // UIPackageManager.Instance.RemovePackageView(_descFilePath, viewName);            // UIPackageManager.Instance.AddCloseTime(_descFilePath);            closeTime = TimeHelper.ClientNowSeconds();            DoHideAnimation();            ViewManager.HideWin(this.viewName);            EventAgent.DispatchEvent(ConstMessage.VIEW_CLOSED);        }        virtual protected void OnShown()        {            if (isfullScreen)            {                MakeFullScreen(viewCom);            }            AddEventListener();            // if (GuideController.IsGuide())            // {            //     Timers.inst.AddUpdate(UpdateToCheckGuide);            // }        }        virtual protected void OnHide()        {            viewData = null;            RemoveEventListener();            // Timers.inst.Remove(UpdateToCheckGuide);            TryCompleteGuide();        }        virtual protected void RemoveEventListener()        {        }        virtual protected void AddEventListener()        {        }        virtual protected void UpdateToCheckGuide(object param)        {        }        virtual protected void TryCompleteGuide()        {        }        protected virtual void DoShowAnimation()        {            OnShown();            switch (_viewAnimationType)            {                case EnumViewAnimationType.ZOOM_CENTER:                    ViewAnimationFactory.ZoomInCenter(this.viewCom);                    break;                default:                    break;            }        }        protected virtual void DoHideAnimation()        {            switch (_viewAnimationType)            {                case EnumViewAnimationType.ZOOM_CENTER:                    ViewAnimationFactory.ZoomOutCenter(this.viewCom, this.OnDoHideAnimationCompleted);                    break;                default:                    this.OnDoHideAnimationCompleted();                    break;            }        }        protected virtual void OnDoHideAnimationCompleted()        {            if (this.viewCom != null)            {                this.viewCom.RemoveFromParent();            }        }        private void MakeFullScreen(GObject ui)        {            // 摘星界面特殊处理            if (viewName == "LuckyBoxView")            {                ui.MakeFullScreen();            }            else            {                MakeUIFullScreen(ui);            }                        ui.AddRelation(GRoot.inst, RelationType.Size);        }        private bool _adaptFinished = false;        public void MakeUIFullScreen(GObject ui)        {            if (_adaptFinished)            {                return;            }            //这里做了最大宽度适配            float targetWidth;            float maxAspectRatio = 1080 * 1.0f / 1920;            if (Screen.width * 1.0f / Screen.height > maxAspectRatio)            {                targetWidth = GRoot.inst.height * maxAspectRatio;                ui.Center();            }            else            {                targetWidth = GRoot.inst.width;            }            GameObject uiObj = viewCom.displayObject.gameObject;            List<GObject> listTopImg = new List<GObject>();            float offsetY = ViewGlobal.GetRealTopOffset();            // 处理全屏显示的背景图/遮罩            List<Transform> list = ViewGlobal.FindAllGLoaderInTrans(uiObj.transform);            for (int i = 0; i < list.Count; i++)            {                GameObject bg = list[i].gameObject;                DisplayObjectInfo bgInfo = bg.GetComponent<DisplayObjectInfo>();                GObject obj = GRoot.inst.DisplayObjectToGObject(bgInfo.displayObject);                if (obj != null)                {                    if (ViewGlobal.IsFullScreenPic(obj.name) && obj.height >= 1920)                    {                        obj.AddRelation(ui, RelationType.Center_Center);                        obj.SetSize(1080, 2400);                        obj.SetXY(obj.x, obj.y - offsetY / 2);                    }                    else if (obj.name.Contains("Top_img"))                    {                        listTopImg.Add(obj);                    }                }            }            // 保存未适配时,不需要改变位置的UI的信息(适配部分存在拉伸效果的UI)            ui.SetSize(targetWidth, GRoot.inst.height);            List<float> heightList = new List<float>();            for (int i = 0; i < listTopImg.Count; i++)            {                listTopImg[i].RemoveRelation(ui, RelationType.Center_Center);                heightList.Add(listTopImg[i].height);            }            // UI整体高度缩放            ui.SetSize(targetWidth, ViewGlobal.GetUIHeight());            // UI整体下移动            ui.SetXY(ui.x, offsetY);            // 还原不需要适配的UI            for (int i = 0; i < listTopImg.Count; i++)            {                listTopImg[i].SetSize(listTopImg[i].width, heightList[i] + offsetY * 2);                listTopImg[i].SetXY(listTopImg[i].x, listTopImg[i].y - offsetY);            }            _adaptFinished = true;        }        void __addedToStage()        {            DoShowAnimation();        }        void __removeFromStage()        {            OnHide();            if (_descFilePath == ResPathUtil.GetUIPackagePath("Login") || _descFilePath == ResPathUtil.GetUIPackagePath("Loading") || _descFilePath == ResPathUtil.GetUIPackagePath("CreateRole"))//这几个界面关闭后立即释放            {                Dispose();            }        }    }}
 |