public UUIWorker(EWorkerState _state, EWorkerState _nextState, UUIInfo _info, bool _isSceneObject) { State = _state; NextState = _nextState; Info = _info; IsSceneObject = _isSceneObject; }
/// <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); }
/// <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); }
void AddedToContainer(UUIWorker _worker, EWorkerState _nextState) { Container.Add(_worker); if (_nextState == EWorkerState.Working) { WorkLine.Add(_worker); } }
/// <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); }
/// <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); }
UUIWorker LoadUI(UUIInfo _info, EWorkerState _nextState, Action <UUIWorker, GameObject> _callback) { if (_info is UUIInfoResource) { return(LoadFromResource(_info as UUIInfoResource, _nextState, _callback)); } else if (_info is UUIInfoAssetBundle) { return(LoadFromAssetBundle(_info as UUIInfoAssetBundle, _nextState, _callback)); } else if (_info is UUIInfoStaticSingle) { return(LoadFromStaticSingle(_info as UUIInfoStaticSingle, _nextState, _callback)); } else if (_info is UUIInfoStaticTemplate) { return(LoadFromStaticTemplate(_info as UUIInfoStaticTemplate, _nextState, _callback)); } else { //> 交给别人处理 return(null); } }
void SyncState(EWorkerState _newState) { State = _newState; NextState = _newState; }