/// <summary> /// 检查引导状态 /// </summary> IEnumerator CheckGuideState() { Log.Write(GetType() + "/CheckGuideState"); yield return(new WaitForSeconds(0.2f)); while (true) { yield return(new WaitForSeconds(0.5f)); for (int i = 0; i < _LiGuideTrigger.Count; i++) { IGuideTrigger iTrigger = _LiGuideTrigger[i]; //检查每个业务脚本是否可以运行 if (iTrigger.CheckCondition()) { //每个业务脚本,执行业务逻辑 if (iTrigger.RunOperation()) { Log.Write(GetType() + "/CheckGuideState()/编号为:" + i + "业务逻辑执行完毕,即将在集合中移除"); _LiGuideTrigger.Remove(iTrigger); } } } } }
/// <summary> /// Check boot status /// </summary> /// <returns></returns> IEnumerator CheckGuidState() { Log.Write(GetType() + "/CheckGuidState"); yield return(new WaitForSeconds(GlobalParameter.INTERVAL_TIME_0DOT2)); while (true) { yield return(new WaitForSeconds(GlobalParameter.INTERVAL_TIME_0DOT5)); for (int i = 0; i < _LiGuideTrigger.Count; i++) { IGuideTrigger iTrigger = _LiGuideTrigger[i]; //check every trigger is able to run if (iTrigger.CheckCondition()) { //Each trigger script, carried out trigger logic if (iTrigger.RunOperation()) { Log.Write(GetType() + "/CheckGuidState()/Number of trigger" + i + "logic run complete"); _LiGuideTrigger.Remove(iTrigger); } } //if_end } //for_end } //while_end } //CheckGuidState_End
// Start is called before the first frame update IEnumerator Start() { yield return(new WaitForSeconds(GlobalParameter.INTERVAL_TIME_0DOT2)); //add IGuideTrigger to list IGuideTrigger iTri_1 = TriggerDialogs.Instance; IGuideTrigger iTri_2 = TriggerOperET.Instance; IGuideTrigger iTri_3 = TriggerOperVisualKey.Instance; _LiGuideTrigger.Add(iTri_1); _LiGuideTrigger.Add(iTri_2); _LiGuideTrigger.Add(iTri_3); //active trigger logic check StartCoroutine("CheckGuidState"); }
IEnumerator Start() { yield return(new WaitForSeconds(GlobalParameter.WAIT_FOR_SECONDS_ON_START)); //加入所有的“业务逻辑”脚本 //面向接口编程,用接口来实现动态多态性 //接口的使用都是统一的,可以使用List而不必要使用ArrayList IGuideTrigger iTri_1 = TriggerDialogs.Instance; IGuideTrigger iTri_2 = TriggerOperET.Instance; IGuideTrigger iTri_3 = TriggerOperVitualKey.Instance; _LiGuideTrigger.Add(iTri_1); _LiGuideTrigger.Add(iTri_2); _LiGuideTrigger.Add(iTri_3); //启动业务逻辑脚本的检查 StartCoroutine(CheckGuideState()); }
//[name:p1,p2;name:p1,p2] protected List <IGuideTrigger> LoadTrigger(string context, string common) { if (string.IsNullOrEmpty(context)) { return(null); } string[] msg = context.Split(';'); if (msg == null || msg.Length == 0) { return(null); } object[] commonParams = null; if (common != null) { string[] comParamString = common.Split(';'); if (comParamString.Length > 0) { commonParams = new object[comParamString.Length]; for (int i = 0; i < comParamString.Length; ++i) { if (comParamString[i].Contains(":")) { string[] dynaParams = comParamString[i].Split(':'); IRuntimeParam runtimeParam = RuntimeParamFactory.S.Create(dynaParams[0]); if (runtimeParam == null) { Log.E("Create Runtime Param Failed:" + dynaParams[0]); } else { if (dynaParams.Length > 1) { //string[] findParams = dynaParams[1].Split(','); object[] resultArray = GuideConfigParamProcess.ProcessParam(dynaParams[1], commonParams); runtimeParam.SetParam(resultArray); } } commonParams[i] = runtimeParam; } else { commonParams[i] = comParamString[i]; } } } } List <IGuideTrigger> result = new List <IGuideTrigger>(); for (int i = 0; i < msg.Length; ++i) { if (string.IsNullOrEmpty(msg[i])) { continue; } string[] com = msg[i].Split(':'); if (com == null || com.Length == 0) { continue; } IGuideTrigger trigger = GuideTriggerFactory.S.Create(com[0]); if (trigger == null) { Log.E("Create Trigger Failed:" + com[0]); } if (com.Length > 1) { object[] resultArray = GuideConfigParamProcess.ProcessParam(com[1], commonParams); //处理参数 trigger.SetParam(resultArray); } if (trigger != null) { result.Add(trigger); } } return(result); }