/// <summary> /// 跳过当前步骤 /// </summary> private IEnumerator SkipCurrentStepCoroutine() { _executing = true; CurrentTask = StepHelperTask.Skip; //UGUI按钮点击型步骤,自动执行按钮事件 if (_currentContent.Trigger == StepTrigger.ButtonClick) { if (_currentButton) { _currentButton.onClick.Invoke(); _currentButton.onClick.RemoveListener(ButtonClickCallback); } else { _currentButton = _currentTarget.GetComponent <Button>(); if (_currentButton) { _currentButton.onClick.Invoke(); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的目标丢失Button组件!", _currentStepIndex + 1, _currentContent.Name)); } } _currentButton = null; } //创建步骤助手 if (_currentHelper == null) { _currentHelper = CreateHelper(_currentContent, StepHelperTask.Skip); } _currentContent.Skip(); SkipStepEvent?.Invoke(_currentContent, _stepContentEnables.ContainsKey(_currentContent.GUID) ? _stepContentEnables[_currentContent.GUID] : false); float elapseTime = _currentContent.Instant ? 0 : (_currentHelper != null ? _currentHelper.ElapseTime : _currentContent.ElapseTime); //助手执行跳过,等待生命周期结束后销毁助手 if (_currentHelper != null) { _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnSkip(); if (_currentHelper.SkipLifeTime > 0) { yield return(YieldInstructioner.GetWaitForSeconds(_currentHelper.SkipLifeTime)); } _currentHelper.OnTermination(); _currentHelper = null; } _waitCoroutine = Main.Current.StartCoroutine(WaitCoroutine(ChangeNextStep, elapseTime)); }
/// <summary> /// 步骤开始 /// </summary> private void BeginCurrentStep() { _executing = false; _currentContent = _stepContents[_currentStepIndex]; _currentTarget = _currentContent.Target.GetComponent <StepTarget>(); CurrentTask = StepHelperTask.Execute; //UGUI按钮点击型步骤,注册监听 if (_currentContent.Trigger == StepTrigger.ButtonClick) { _isButtonClick = false; _currentButton = _currentTarget.GetComponent <Button>(); if (_currentButton) { _currentButton.onClick.AddListener(ButtonClickCallback); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的目标丢失Button组件!", _currentStepIndex + 1, _currentContent.Name)); } } //状态改变触发类型的步骤,自动重置状态 else if (_currentContent.Trigger == StepTrigger.StateChange) { _currentTarget.State = StepTargetState.Normal; } //激活的步骤正常启动,未激活的步骤自动跳过 if (_stepContentEnables.ContainsKey(_currentContent.GUID) && _stepContentEnables[_currentContent.GUID]) { //创建步骤助手 _currentHelper = CreateHelper(_currentContent, StepHelperTask.Execute); BeginStepEvent?.Invoke(_currentContent, true); } else { //创建步骤助手 _currentHelper = CreateHelper(_currentContent, StepHelperTask.SkipImmediate); BeginStepEvent?.Invoke(_currentContent, false); SkipCurrentStepImmediateCoroutine(); } }
//跳过当前步骤 private IEnumerator SkipCurrentStepCoroutine() { _executing = true; _currentContent.Skip(); SkipStepEvent?.Invoke(_currentContent, _stepContentEnables.ContainsKey(_currentContent.GUID) ? _stepContentEnables[_currentContent.GUID] : false); //UGUI按钮点击型步骤,自动执行按钮事件 if (_currentContent.Trigger == StepTrigger.ButtonClick) { if (_currentButton) { _currentButton.onClick.Invoke(); _currentButton.onClick.RemoveListener(ButtonClickCallback); } else { _currentButton = _currentTarget.GetComponent <Button>(); if (_currentButton) { _currentButton.onClick.Invoke(); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的目标丢失Button组件!", _currentStepIndex + 1, _currentContent.Name)); } } _currentButton = null; } //创建步骤助手 if (_currentHelper == null && _currentContent.Helper != "<None>") { Type type = ReflectionToolkit.GetTypeInRunTimeAssemblies(_currentContent.Helper); if (type != null) { _currentHelper = Activator.CreateInstance(type) as StepHelper; _currentHelper.Parameters = _currentContent.Parameters; for (int i = 0; i < _currentHelper.Parameters.Count; i++) { if (_currentHelper.Parameters[i].Type == StepParameter.ParameterType.GameObject) { if (_targets.ContainsKey(_currentHelper.Parameters[i].GameObjectGUID)) { _currentHelper.Parameters[i].GameObjectValue = _targets[_currentHelper.Parameters[i].GameObjectGUID].gameObject; } } } _currentHelper.Content = _currentContent; _currentHelper.Target = _currentTarget; _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnInit(); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的助手 {2} 丢失!", _currentStepIndex + 1, _currentContent.Name, _currentContent.Helper)); } } //助手执行跳过,等待生命周期结束后销毁助手 if (_currentHelper != null) { _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnSkip(); if (_currentHelper.SkipLifeTime > 0) { yield return(YieldInstructioner.GetWaitForSeconds(_currentHelper.SkipLifeTime / SkipMultiple)); } _currentHelper.OnTermination(); _currentHelper = null; } _waitCoroutine = Main.Current.StartCoroutine(WaitCoroutine(ChangeNextStep, _currentContent.ElapseTime / SkipMultiple)); }
//步骤开始 private void BeginCurrentStep() { _executing = false; _currentContent = _stepContents[_currentStepIndex]; _currentTarget = _currentContent.Target.GetComponent <StepTarget>(); //UGUI按钮点击型步骤,注册监听 if (_currentContent.Trigger == StepTrigger.ButtonClick) { _isButtonClick = false; _currentButton = _currentTarget.GetComponent <Button>(); if (_currentButton) { _currentButton.onClick.AddListener(ButtonClickCallback); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的目标丢失Button组件!", _currentStepIndex + 1, _currentContent.Name)); } } //状态改变触发类型的步骤,自动重置状态 else if (_currentContent.Trigger == StepTrigger.StateChange) { _currentTarget.State = StepTargetState.Normal; } //创建步骤助手 if (_currentContent.Helper != "<None>") { Type type = ReflectionToolkit.GetTypeInRunTimeAssemblies(_currentContent.Helper); if (type != null) { _currentHelper = Activator.CreateInstance(type) as StepHelper; _currentHelper.Parameters = _currentContent.Parameters; for (int i = 0; i < _currentHelper.Parameters.Count; i++) { if (_currentHelper.Parameters[i].Type == StepParameter.ParameterType.GameObject) { if (_targets.ContainsKey(_currentHelper.Parameters[i].GameObjectGUID)) { _currentHelper.Parameters[i].GameObjectValue = _targets[_currentHelper.Parameters[i].GameObjectGUID].gameObject; } } } _currentHelper.Content = _currentContent; _currentHelper.Target = _currentTarget; _currentHelper.Task = StepHelperTask.Execute; _currentHelper.OnInit(); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的助手 {2} 丢失!", _currentStepIndex + 1, _currentContent.Name, _currentContent.Helper)); } } //未激活的步骤自动跳过 if (_stepContentEnables.ContainsKey(_currentContent.GUID)) { BeginStepEvent?.Invoke(_currentContent, _stepContentEnables[_currentContent.GUID]); if (!_stepContentEnables[_currentContent.GUID]) { Main.Current.StartCoroutine(SkipCurrentStepCoroutine()); } } else { BeginStepEvent?.Invoke(_currentContent, false); } }