示例#1
0
        /// <summary>
        /// 从AssetBundle中加载UI
        /// </summary>
        /// <param name="_info">UI的信息</param>
        /// <param name="_callback">完成后的回调函数</param>
        /// <returns></returns>
        UUIWorker LoadFromAssetBundle(UUIInfoAssetBundle _info, EWorkerState _nextState, Action <UUIWorker, GameObject> _callback)
        {
            UAssetBundleLoaderProxyManager proxyManager = Manager.AssetBundleManager[_info.GetLoaderName()];;

            if (proxyManager == null)
            {
                Output.Error("从AssetBundle加载{0}.{1}UI失败,加载器{2}不存在.", _info.PackageName, _info.AssetName, _info.GetLoaderName());
                return(null);
            }

            UAssetBundleLoaderProxy proxy;

            if (string.IsNullOrEmpty(_info.ProxyName))
            {
                proxy = proxyManager.GetDefaultProxy();
            }
            else
            {
                proxy = proxyManager.GetProxy(_info.ProxyName);
            }

            if (proxy == null)
            {
                Output.Error("从AssetBundle加载{0}.{1}UI失败,没有有效的加载器代理组件{2}.", _info.PackageName, _info.AssetName, _info.ProxyName);
                return(null);
            }

            var request = proxy.GetLoader(_info.PackageName).LoadAssetAsync <GameObject>(_info.AssetName);

            UUIWorker worker = new UUIWorker(EWorkerState.Loading, _nextState, _info, _info.IsSceneObject);

            AddedToContainer(worker, _nextState);
            worker.Request = new UUIRequestBy(request, worker, _callback);
            return(worker);
        }
示例#2
0
        /// <summary>
        /// 以静态单例模式加载UI
        /// </summary>
        /// <param name="_info"></param>
        /// <param name="_callback"></param>
        /// <returns></returns>
        UUIWorker LoadFromStaticSingle(UUIInfoStaticSingle _info, EWorkerState _nextState, Action <UUIWorker, GameObject> _callback)
        {
            if (null == _info.Instance)
            {
                return(null);
            }

            UUIContainer container;
            UUIWorker    worker;

            if (Manager.TryGetSingleWorker(_info, out container, out worker))
            {
                container.RemoveFromContainer(worker);
                Container.Add(worker);
                if (worker.State == EWorkerState.Working)
                {
                    WorkLine.Add(worker);
                }
            }
            else
            {
                worker         = new UUIWorker(EWorkerState.Resting, _nextState, _info, _info.IsSceneObject);
                worker.Request = new UUIRequestByDone(_info.Instance);
                AddedToContainer(worker, _nextState);
                _callback(worker, _info.Instance);
            }
            return(worker);
        }
示例#3
0
 void AddedToContainer(UUIWorker _worker, EWorkerState _nextState)
 {
     Container.Add(_worker);
     if (_nextState == EWorkerState.Working)
     {
         WorkLine.Add(_worker);
     }
 }
示例#4
0
 internal void OnWorkerDestroy(UUIWorker _worker)
 {
     if (_worker.State == EWorkerState.Working)
     {
         _worker.SetClose(false);
     }
     _worker.SetUnload();
     RemoveFromContainer(_worker);
     UnloadResourceByInfo(_worker.Info);
 }
示例#5
0
 void UnloadWorker(UUIWorker _worker, GameObject _go)
 {
     _worker.SetUnload();
     if (false == _worker.IsSceneObject)
     {
         GameObject.Destroy(_go);
     }
     RemoveFromContainer(_worker);
     UnloadResourceByInfo(_worker.Info);
 }
示例#6
0
        /// <summary>
        /// 从Resource文件夹下加载UI
        /// </summary>
        /// <param name="_info">UI的信息</param>
        /// <param name="_callback">完成后的回调函数</param>
        /// <returns></returns>
        UUIWorker LoadFromResource(UUIInfoResource _info, EWorkerState _nextState, Action <UUIWorker, GameObject> _callback)
        {
            UUIWorker worker = new UUIWorker(EWorkerState.Loading, _nextState, _info, _info.IsSceneObject);

            AddedToContainer(worker, _nextState);
            var request = Manager.AssetManager.Loader.LoadAssetAsync <GameObject>(_info.DIR);

            worker.Request = new UUIRequestBy(request, worker, _callback);
            return(worker);
        }
示例#7
0
 internal bool TryGetContainerByWorker(UUIWorker _instance, out UUIContainer _container)
 {
     _container = null;
     foreach (var v in Containers)
     {
         if (v.Value.Contains(_instance))
         {
             _container = v.Value;
             return(true);
         }
     }
     return(false);
 }
示例#8
0
        /// <summary>
        /// 从静态模板中加载UI
        /// </summary>
        /// <param name="_info">UI的信息</param>
        /// <param name="_callback">完成时回调函数</param>
        /// <returns></returns>
        UUIWorker LoadFromStaticTemplate(UUIInfoStaticTemplate _info, EWorkerState _nextState, Action <UUIWorker, GameObject> _callback)
        {
            if (_info.Instance == null)
            {
                return(null);
            }
            UUIWorker worker = new UUIWorker(EWorkerState.Resting, _nextState, _info, _info.IsSceneObject);
            var       go     = GameObject.Instantiate(_info.Instance);

            worker.Request = new UUIRequestByDone(go);
            AddedToContainer(worker, _nextState);
            _callback(worker, go);
            return(worker);
        }
示例#9
0
        internal void OnWorkerClose(UUIWorker _worker, bool _isDestroy)
        {
            UUIWorker upward = null;

            if (_worker != null)
            {
                //> 处理工人状态
                _worker.SetClose(_isDestroy);

                if (WorkLine.Count == 0)
                {
                    return;
                }

                //> 处理工作队列
                if (WorkLine.Count > 1 && WorkLine[WorkLine.Count - 1] == _worker)
                {
                    upward = WorkLine[WorkLine.Count - 2];
                }
                WorkLine.Remove(_worker);
                upward?.SetUpward();
            }
        }
示例#10
0
        public void Close(string _name, bool _isDestroy = false)
        {
            UUIWorker worker = Container.Find((v) => { return(v.Info.GetName() == _name); });

            OnWorkerClose(worker, _isDestroy);
        }
示例#11
0
 internal bool Contains(UUIWorker _worker)
 {
     return(Container.Contains(_worker));
 }
示例#12
0
 internal bool TryGetWoker(UUIInfoStaticSingle _info, out UUIWorker _worker)
 {
     _worker = Container.Find((v) => { return(v.Info == _info); });
     return(_worker != null);
 }
示例#13
0
 bool TryGetWoker(string _name, out UUIWorker _worker)
 {
     _worker = Container.Find((v) => { return(v.Info.GetName() == _name); });
     return(_worker != null);
 }
示例#14
0
        public UUIView Find(string _name)
        {
            UUIWorker worker = Container.Find((v) => { return(v.Info.GetName() == _name); });

            return(worker.Script as UUIView);
        }
示例#15
0
 void RemoveFromContainer(UUIWorker _worker)
 {
     Container.Remove(_worker);
     WorkLine.Remove(_worker);
 }
示例#16
0
 internal bool TryGetSingleWorker(UUIInfoStaticSingle _info, out UUIContainer _container, out UUIWorker _worker)
 {
     _container = null;
     _worker    = null;
     foreach (var v in Containers)
     {
         if (v.Value.TryGetWoker(_info, out _worker))
         {
             _container = v.Value;
             return(true);
         }
     }
     return(false);
 }