private void StepStop(int index) { FunctionTriggerStep step = steps[index] as FunctionTriggerStep; if (step == null || (step.functions.Count < 1 && step.times.Count < 1)) { return; } if (step.times.Count > 0) { BattleUIEvent ev = new BattleUIEvent(BattleUIEvent.BATTLE_UI_SHOW_TIMER); ev.msg = 0; EventSystem.Instance.PushEvent(ev); } }
override public void Update(uint elapsed) { if (!IsRunning()) { return; } if (mScene == null) { return; } if (mCurStep < 0) { DoNext(++mCurStep); return; } //步骤执行完 if (mCurStep >= steps.Count) { return; } FunctionTriggerStep step = steps[mCurStep] as FunctionTriggerStep; if (step == null) { return; } step.curTime += (int)elapsed; if (step.curTime < step.time) { return; } StepStop(mCurStep); ++mCurStep; if (mCurStep >= steps.Count) { Stop(); mScene.OnTriggerFinish(this.name); return; } DoNext(mCurStep); }
// 解析功能触发器 private void ParseFunctionTrigger(XmlNode node) { FunctionTrigger trigger = new FunctionTrigger(mScene); trigger.name = node.Attributes["name"].Value; XmlNodeList nodeList = node.ChildNodes; for (int i = 0; i < nodeList.Count; ++i) { XmlNode childNode = nodeList[i]; if (childNode != null && childNode.Name == "Step") { FunctionTriggerStep step = new FunctionTriggerStep(); step.time = System.Convert.ToInt32(childNode.Attributes["time"].Value); XmlNodeList stepList = childNode.ChildNodes; for (int j = 0; j < nodeList.Count; ++j) { XmlNode stepNode = stepList[j]; if (stepNode != null && stepNode.Name == "FuncTrigger") { FunctionTriggerInfo info = new FunctionTriggerInfo(); info.funcname = stepNode.Attributes["function"].Value; step.functions.Add(info); } else if (stepNode != null && stepNode.Name == "TimeTrigger") { TimeTriggerInfo info = new TimeTriggerInfo(); info.mTotalTime = step.time; step.times.Add(info); } } trigger.steps.Add(step); } } mTriggers.Add(trigger.name, trigger); }
private void DoNext(int next) { FunctionTriggerStep step = steps[next] as FunctionTriggerStep; if (step == null || (step.functions.Count < 1 && step.times.Count < 1)) { return; } for (int i = 0; i < step.functions.Count; ++i) { FunctionTriggerInfo info = step.functions[i] as FunctionTriggerInfo; SceneManager.Instance.InvokeFunction(info.funcname); } for (int i = 0; i < step.times.Count; ++i) { TimeTriggerInfo info = step.times[i] as TimeTriggerInfo; SceneManager.Instance.SetCountDown(info.mTotalTime); } step.curTime = 0; }