/// <summary> /// 获取所有正在请求加载资产关联的 的UI状态名 /// </summary> /// <param name="uiStateName">返回UI状态名</param> public void GetUIState(ref JWArrayList <string> uiStateName) { for (int i = 0; i < _resourceRequesting.Count; i++) { LoadData loadData = _resourceRequesting[i]; if (loadData.Data.Life == LifeType.UIState && !string.IsNullOrEmpty(loadData.Data.StateName) && uiStateName.IndexOf(loadData.Data.StateName, StringComparer.OrdinalIgnoreCase) == -1) { uiStateName.Add(loadData.Data.StateName); } } for (int i = 0; i < _data.Count; i++) { AssetData data = _data[i]; if (data.Priority == LoadPriority.Wait) { continue; } if (data.Life == LifeType.UIState && !string.IsNullOrEmpty(data.StateName) && uiStateName.IndexOf(data.StateName, StringComparer.OrdinalIgnoreCase) == -1) { uiStateName.Add(data.StateName); } } }
/// <summary> /// 开始事务 /// </summary> /// <param name="ss"></param> public void BeginSession(IFSSession ss) { if (ss==null) { JW.Common.Log.LogE("IFS Service BeginSession nil Session"); return; } // for (int i = _sessionProcessors.Count - 1; i >= 0; --i) { if (_sessionProcessors[i].Name.Equals(ss.Name)) { JW.Common.Log.LogE("Repeat Session:" + ss.Name); return; } } // IFSSessionProcessor pp = IFSSessionProcessor.Create(ss); if (pp != null) { pp.gameObject.transform.parent = this.transform; _sessionProcessors.Add(pp); pp.BeginSession(); } }
/// <summary> /// 切换状态,并清空之前的状态 /// </summary> /// <Param name="stateName">状态名</Param> /// <Param name="stateParam">状态参数</Param> public void ChangeState(string stateName, object stateParam = null) { if (string.IsNullOrEmpty(stateName)) { return; } //正在切换 if (_switchState) { JW.Common.Log.LogE("UIStateService.ChangeState : state is switching"); return; } // 状态相同,无须跳转 string oldStateName = _state.Count > 0 ? _state[_state.Count - 1].StateName : string.Empty; if (stateName.Equals(oldStateName, StringComparison.OrdinalIgnoreCase)) { JW.Common.Log.LogD("UIStateService.ChangeState error - already in state {0}", stateName); return; } _switchState = true; // 跳转 _state.Clear(); StateData stateData; stateData.StateName = stateName; stateData.Param = stateParam; _state.Add(stateData); AddStateHistory(stateName); SwitchState(UIStateChangeTypeChange, oldStateName, stateName, stateParam); _switchState = false; }
/// <summary> /// 添加事件接收器 /// </summary> /// <param name="id">事件ID</param> /// <param name="instance">事件接收对象</param> /// <param name="methodName">事件接收函数名</param> public void AddEventHandler(uint id, object instance, string methodName) { if (instance == null || methodName == null) { return; } for (int i = 0; i < _eventHandler.Count; i++) { EventHandler h = _eventHandler[i]; if (h.IsEqual(id, instance)) { return; } } EventHandler handler = new EventHandler(); if (!handler.Create(id, instance, methodName)) { JW.Common.Log.LogE("EventService.AddEventHandler error - id:{0} instance:{1} methodName:{2}", id, instance, methodName); return; } _eventHandler.Add(handler); }
/// <summary> /// 获取所有的UI状态名 /// </summary> /// <param name="uiStateName">返回UI状态名</param> public void GetUIState(ref JWArrayList <string> uiStateName) { Dictionary <string, JWArrayList <BaseAsset> > .Enumerator enumerator = _assets.GetEnumerator(); while (enumerator.MoveNext()) { JWArrayList <BaseAsset> val = enumerator.Current.Value; if (val == null) { continue; } for (int i = 0; i < val.Count; i++) { BaseAsset ba = val[i]; if (ba == null || ba.BaseData.Life != LifeType.UIState || string.IsNullOrEmpty(ba.BaseData.StateName)) { continue; } if (uiStateName.IndexOf(ba.BaseData.StateName, StringComparer.OrdinalIgnoreCase) == -1) { uiStateName.Add(ba.BaseData.StateName); } } } }
/// <summary> /// 获得一个连接 /// </summary> /// <param name="gateIp"></param> /// <param name="gatePort"></param> /// <param name="gateQueryRoute"></param> /// <returns></returns> public NetConnector GetConnector(string gateIp, int gatePort, string gateQueryRoute) { NetConnector cc = new NetConnector(); cc.Initialize(gateIp, gatePort, gateQueryRoute); _connectors.Add(cc); return(cc); }
/// <summary> /// 创建Mediator /// </summary> /// <typeparam name="T">Mediator类型</typeparam> public T CreateMediator <T>() where T : UIMediator, new() { T mediator = new T(); mediator.Create(this); _allMediator.Add(mediator); return(mediator); }
public ModuleBase Create <T>() where T : ModuleBase, new() { T module = new T(); module.Create(); _modules.Add(module); return(module); }
/// <summary> /// 创建窗口对象 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="usePool">是否使用对象池</param> /// <param name="customID">自定义ID</param> /// <param name="parameter">预制件初始化参数</param> /// <returns>预制件对象</returns> protected T CreateFormClass <T>(bool usePool, int customID = 0, object parameter = null) where T : UIFormClass, new() { T prefabClass = UIFormHelper.CreateFormClass <T>(usePool, this, customID, parameter); if (prefabClass == null) { JW.Common.Log.LogE("UIMediator.CreatePrefabClass : failed to create {0}", typeof(T).FullName); return(null); } _forms.Add(prefabClass); return(prefabClass); }
/// <summary> /// 添加工厂 /// </summary> /// <param name="type">对象标识</param> /// <param name="factory">工厂</param> public void AddFactory(int type, IObjectFactory <T> factory) { for (int i = 0; i < _data.Count; i++) { if (_data[i].Type == type) { return; } } Data data; data.Type = type; data.Factory = factory; _data.Add(data); }
//------------------准备网络资源-------------------------- public uint PrepareNetAssets(LuaTable prepareUrls, System.Action <float> progresHandler) { if (prepareUrls == null) { return(0); } NetAssetSession ss = new NetAssetSession(); ss.SessionId = _currentId++; ss.PrepareNetAsset(prepareUrls, progresHandler); if (ss != null && (ss.IsOver == false)) { _prepareSessions.Add(ss); } return(ss.SessionId); }
/// <summary> /// 开始一个本地文件列表检查 完整性 /// </summary> /// <param name="sName"></param> /// <param name="localFileList"></param> /// <param name="handler"></param> public void BeginLocalChecker(string sName, string localFileList, IFSLocalCheckerDelegate handler) { for (int i = _localCheckers.Count - 1; i >= 0; --i) { if (_localCheckers[i].Name.Equals(sName)) { JW.Common.Log.LogE("Repeat BeginLocalChecker:" + sName); return; } } IFSLocalChecker newChecker = IFSLocalChecker.Create(sName, localFileList,handler); if (newChecker != null) { newChecker.gameObject.transform.parent = this.transform; _localCheckers.Add(newChecker); newChecker.StartCheck(); } }
/// <summary> /// 添加定帧回调 /// </summary> /// <param name="interval">间隔帧数</param> /// <param name="repeat">是否重复</param> /// <param name="handler">回调接口</param> /// <returns>定帧ID(==0添加失败)</returns> public uint AddFrame(int interval, bool repeat, IScheduleHandler handler) { if (handler == null) { return(0); } Data data; data.ID = _currentID++; data.Interval = interval; data.Remain = interval; data.Repeat = repeat; data.Handler = handler; _frames.Add(data); return(data.ID); }
/// <summary> /// 清理缓存的资源 /// </summary> /// <param name="uiStateHistory">UI状态历史列表(=null标识没有UI状态)</param> public void ClearUIStateCache(JWArrayList <string> uiStateHistory) { if (_loader == null) { return; } _tempList.Clear(); _tempList2.Clear(); if (uiStateHistory != null) { _assetManager.GetCacheUIState(ref _tempList); _loader.GetUIState(ref _tempList); for (int i = uiStateHistory.Count - 1; i >= 0; i--) { string stateName = uiStateHistory[i]; if (string.IsNullOrEmpty(stateName) || _tempList.IndexOf(stateName, StringComparer.OrdinalIgnoreCase) == -1) { continue; } _tempList2.Add(stateName); if (_tempList2.Count == CacheUIStateCount) { break; } } } _assetManager.ClearCache(_tempList2); _loader.ClearTask(_tempList2); if (AlwaysGc) { if (LuaGCHook != null) { LuaGCHook(true); } ResService.GetInstance().UnloadUnusedAssets(); return; } }
/// 游戏更新检查后后启动 public void StartAfterUpdate(Action <bool> allCompletedCallback) { _allCompletedCallback = allCompletedCallback; #if USE_PACK_RES if (ResService.GetInstance().PackConfig == null) { JW.Common.Log.LogE("Preloader.StartAfterUpdate : resource initialize failed"); return; } // _bundleFiles = BundleMediator.GetInstance().GetPreloadBundles(); _bundleLoading = false; string filename = "main_shaders.ab"; _shaderBundle = BundleService.GetInstance().GetBundle(filename); if (_shaderBundle == null) { JW.Common.Log.LogE("Preloader.StartAfterUpdate : failed to get shader bundle"); } ResPackInfo pi = ResService.GetInstance().PackConfig.GetPackInfo(filename); if (pi == null) { _shaderFilename = new JWArrayList <string>(0); } else { _shaderFilename = new JWArrayList <string>(pi.Resources.Count); for (int i = 0; i < pi.Resources.Count; i++) { _shaderFilename.Add(pi.Resources[i].Path); } } #else _bundleFiles = new JWObjList <string>(0); _shaderBundle = null; _shaderFilename = new JWArrayList <string>(0); #endif //真正的开始预加载协成 StartCoroutine(PreloadCoroutine()); }
/// <summary> /// 添加定时回调 /// </summary> /// <param name="interval">定时器间隔,单位:ms</param> /// <param name="repeat">是否重复触发</param> /// <param name="handler">回调接口</param> /// <returns>定时器ID(==0添加失败)</returns> public uint AddTimer(int interval, bool repeat, IScheduleHandler handler) { if (interval <= 0 || handler == null) { return(0); } interval *= 100; Data data; data.ID = _currentID++; data.Interval = interval; data.Remain = interval; data.Repeat = repeat; data.Handler = handler; _timers.Add(data); return(data.ID); }
private void AddStateHistory(string stateName) { if (string.IsNullOrEmpty(stateName)) { return; } for (int i = 0; i < _stateHistory.Count; i++) { if (_stateHistory[i].Equals(stateName, StringComparison.OrdinalIgnoreCase)) { _stateHistory.RemoveAt(i); break; } } _stateHistory.Add(stateName); if (_stateHistory.Count > 100) { _stateHistory.RemoveAt(0); } }
/// <summary> /// 添加Mediator /// </summary> /// <param name="mediator">mediaotr</param> /// <param name="stateName">mediator所处的状态名数组</param> public void AddMediator(UIMediator mediator, string[] stateName) { if (mediator == null) { return; } for (int i = 0; i < _mediator.Count; i++) { if (_mediator[i].Mediator == mediator) { JW.Common.Log.LogE("UIStateService.AddMediator error - duplicate mediator {0}", mediator.GetType().FullName); return; } } MediatorData data; data.Mediator = mediator; data.StateName = stateName; _mediator.Add(data); }
/// <summary> /// 添加更新 /// </summary> /// <param name="handler">更新回调接口</param> /// <param name="isFirst">添加到List头部,目前用于Time更新,其余情况不要使用</param> /// <returns></returns> public void AddUpdate(IScheduleHandler handler, bool isFirst = false) { if (handler == null) { return; } for (int i = 0; i < _updates.Count; i++) { if (_updates[i] == handler) { return; } } if (isFirst) { _updates.Insert(0, handler); } else { _updates.Add(handler); } }
/// 注册下载文件 public uint RegisteFileHttpDownload(string url, string filePath, HttpFileSessionDelegate handler = null) { if (string.IsNullOrEmpty(url) || (filePath == null)) { JW.Common.Log.LogE("RegisteFileHttpDownload:Arg Error"); return(0); } if ((!url.Contains("http://")) && (!url.Contains("https://"))) { url = "http://" + url; } HttpFileSession hf = new HttpFileSession(); hf.Url = url; hf.DownloadFilePath = filePath; hf.Id = _currentId++; hf.Handler = handler; if (hf != null && (hf.IsOver == false)) { _httpSessions.Add(hf); } return(hf.Id); }
//切换状态 private void SwitchState(int changeType, string oldStateName, string newStateName, object stateParam) { // 新状态信息应用 if (string.IsNullOrEmpty(newStateName)) { JW.Common.Log.LogE("UIStateService.ChangeState error stateName"); return; } // 通知Mediator _switchMediatorData.Clear(); for (int i = 0; i < _mediator.Count; i++) { MediatorData mediatorData = _mediator[i]; if (mediatorData.Mediator == null) { continue; } bool oldState = mediatorData.IsBelongsState(oldStateName); bool newState = mediatorData.IsBelongsState(newStateName); if (oldState == newState) { if (newState) { _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 0)); } continue; } if (oldState) { _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 1)); } if (newState) { _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 2)); } } // out for (int i = 0; i < _switchMediatorData.Count; i++) { KeyValuePair <UIMediator, int> data = _switchMediatorData[i]; if (data.Value == 1) { data.Key.ChangeState(changeType, false, oldStateName, newStateName, null); } } if (Hook != null) { Hook(1, changeType, oldStateName, newStateName, stateParam); } //清理资源 if (StateService.IsValidate()) { AssetService.GetInstance().ClearUIStateCache(_stateHistory); } for (int i = 0; i < _switchMediatorData.Count; i++) { KeyValuePair <UIMediator, int> data = _switchMediatorData[i]; if (data.Value == 2) { data.Key.ChangeState(changeType, true, oldStateName, newStateName, stateParam); } } if (Hook != null) { Hook(2, changeType, oldStateName, newStateName, stateParam); } //stay for (int i = 0; i < _switchMediatorData.Count; i++) { KeyValuePair <UIMediator, int> data = _switchMediatorData[i]; if (data.Value == 0) { data.Key.RefreshState(changeType, oldStateName, newStateName, stateParam); } } if (Hook != null) { Hook(0, changeType, oldStateName, newStateName, stateParam); } JW.Common.Log.LogD("<color=yellow>UIStateService</color>--->Switch UI State from {0} to {1}<----", oldStateName, newStateName); }
private IEnumerator AsynchronousLoad_LoadAssetBundle(JWObjList <string> stringList, JWArrayList <AssetData> assetDataList) { while (true) { stringList.Clear(); assetDataList.Clear(); for (int i = 0; i < _data.Count;) { AssetData data = _data[i]; if (data.Priority != _loadAssetBundlePriority) { ++i; continue; } _data.RemoveAt(i); if (_assetManager.GetCacheCount(data.Name) >= data.Count) { if (data.Callback != null) { assetDataList.Add(data); } continue; } LoadData loadData; loadData.Data = data; loadData.LoadBundleState = LoadStateLoading; loadData.Request = null; bool insert = false; for (int j = _resourceRequesting.Count - 1; j >= 0; --j) { if (_resourceRequesting[j].Data.Priority <= data.Priority) { _resourceRequesting.Insert(j + 1, loadData); insert = true; break; } } if (!insert) { _resourceRequesting.Insert(0, loadData); } stringList.Add(data.Filename); if (_loadAssetBundlePriority >= LoadPriority.Preprocess) { break; } } yield return(null); if (stringList.Count > 0) { #if USE_PACK_RES BundleMediator.GetInstance().LoadBundle(stringList, OnBundleLoadCompleted); #else OnBundleLoadCompleted(stringList, true); #endif } yield return(null); for (int i = 0; i < assetDataList.Count; i++) { AssetData data = assetDataList[i]; if (data.Callback != null) { data.Callback.OnLoadAssetCompleted(data.Name, AssetLoadResult.Success, null); yield return(null); } } yield return(InstructionEnd); } }
/// <summary> /// 装载 /// </summary> /// <param name="data">资产数据</param> /// <param name="clone">是否Clone一个副本</param> /// <returns>资产</returns> public BaseAsset Load(ref AssetData data, bool clone) { if (string.IsNullOrEmpty(data.Filename)) { JW.Common.Log.LogE("AssetManager.Load : invalid parameter"); return(null); } //缓存找 BaseAsset ba = _cache.GetAsset(data.Name); if (ba != null) { //缓存复制 if (clone) { BaseAsset cloneBa = AssetProcessor.ProcessClone(ba); _cache.AddAsset(ba); ba = cloneBa; } if (ba != null) { if (!AssetProcessor.ProcessCreate(ba)) { JW.Common.Log.LogE("AssetManager.CreateAsset : failed to process create - {0}", data.Name); ba.BaseData.Callback = null; ba.BaseData.Factory = null; ba.Resource = null; data.Factory.DestroyObject(ba); return(null); } _usingAsset.Add(ba); } return(ba); } //没在缓存 同步创建 ResObj resource = ResService.GetResource(data.Filename); if (resource == null) { JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename); return(null); } if (resource.Content == null) { JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename); ResService.UnloadResource(resource); return(null); } ba = CreateAsset(data, resource); if (ba == null) { ResService.UnloadResource(resource); return(null); } if (clone) { BaseAsset cloneBa = AssetProcessor.ProcessClone(ba); _cache.AddAsset(ba); ba = cloneBa; } if (ba != null) { _usingAsset.Add(ba); } return(ba); }