/// <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); }
/// <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); }
void AddedToContainer(UUIWorker _worker, EWorkerState _nextState) { Container.Add(_worker); if (_nextState == EWorkerState.Working) { WorkLine.Add(_worker); } }
internal void OnWorkerDestroy(UUIWorker _worker) { if (_worker.State == EWorkerState.Working) { _worker.SetClose(false); } _worker.SetUnload(); RemoveFromContainer(_worker); UnloadResourceByInfo(_worker.Info); }
void UnloadWorker(UUIWorker _worker, GameObject _go) { _worker.SetUnload(); if (false == _worker.IsSceneObject) { GameObject.Destroy(_go); } RemoveFromContainer(_worker); UnloadResourceByInfo(_worker.Info); }
/// <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); }
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); }
/// <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); }
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(); } }
public void Close(string _name, bool _isDestroy = false) { UUIWorker worker = Container.Find((v) => { return(v.Info.GetName() == _name); }); OnWorkerClose(worker, _isDestroy); }
internal bool Contains(UUIWorker _worker) { return(Container.Contains(_worker)); }
internal bool TryGetWoker(UUIInfoStaticSingle _info, out UUIWorker _worker) { _worker = Container.Find((v) => { return(v.Info == _info); }); return(_worker != null); }
bool TryGetWoker(string _name, out UUIWorker _worker) { _worker = Container.Find((v) => { return(v.Info.GetName() == _name); }); return(_worker != null); }
public UUIView Find(string _name) { UUIWorker worker = Container.Find((v) => { return(v.Info.GetName() == _name); }); return(worker.Script as UUIView); }
void RemoveFromContainer(UUIWorker _worker) { Container.Remove(_worker); WorkLine.Remove(_worker); }
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); }