diff --git a/Assets/_Scripts/Application/SceneCtrls/NiuSceneMng.cs b/Assets/_Scripts/Application/SceneCtrls/NiuSceneMng.cs index a43c4d8..a987e56 100644 --- a/Assets/_Scripts/Application/SceneCtrls/NiuSceneMng.cs +++ b/Assets/_Scripts/Application/SceneCtrls/NiuSceneMng.cs @@ -22,8 +22,7 @@ namespace ZXK.LouDiXvMuNiu private List _curModuleToolArray = new List();//当前步骤需要用到的所有工具 //动画交互 - private NiuData _curStep;//为了方便做对比,临时保存当前步骤 - private NiuData _previousStep;//为了方便做对比,临时保存当前步骤 + public NiuData _CurSceneStep;//为了方便做对比,临时保存当前步骤 private Dictionary> _curStepUseBTDic;//当前步骤要点击的所有物体,true表示正确选项,false表示错误选项 private List _currentHighlights = new List(); private PlayableDirector _curTimeLine = null; @@ -67,7 +66,6 @@ namespace ZXK.LouDiXvMuNiu _curTimeLine = GetComponent(); _curTimeLineCtrl = GetComponent(); - GameManager.Instance._DataNiuHandler.CurNiuHandler.OnValueChanged += OnValueChanged; GameManager.Instance._EventManager.AddListener(OnClickToolEvent); } private void Start() @@ -87,84 +85,26 @@ namespace ZXK.LouDiXvMuNiu { if (tempData[i].TaskType == ConstCtrl.TASKTYPE_ShowGeo) { - _curStep = tempData[i]; - _previousStep = tempData[i]; + _CurSceneStep = tempData[i]; break; } } } else { - _curStep = tempData[0]; - _previousStep = tempData[0]; + _CurSceneStep = tempData[0]; } - GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = _curStep; - } - /// - /// 步骤放生变化调用 - /// - /// - private void OnValueChanged(NiuData obj) - { - if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Anim)) - { - if (_curStep != obj) - {//区分是否是点击UI,直接进行的步骤跳转 - JumpTimeline(obj, true); - } - if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState")) - { - List tempToolArray = GetNeedClickTools(obj); - OnlyShowBTGeo(tempToolArray.ToArray()); - } - else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) - { - if (string.IsNullOrEmpty(obj.Question)) - { - GetNeedClickTools(obj); - } - else - { - AnswerSystemInStep(obj); - } - } - } - if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoiceVideoQuestion)) - { - if (_curStep != obj) - {//区分是否是点击UI,直接进行的步骤跳转 - JumpTimeline(obj, true); - } - bool isExam = GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"); - string[] answers = obj.OptionsAll.Split("|"); - if (answers.Length % 2 != 0) - { - PopUpMng.ThreeVideoChoicePanel(obj.Question, answers, answers, GetOptionIndex(obj.OptionRight), isExam, () => - { - GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(); - }); - } - } - if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoicePicQuestion)) - { - if (_curStep != obj) - {//区分是否是点击UI,直接进行的步骤跳转 - JumpTimeline(obj, true); - } - ChoiceImgInStep(obj.ModelBT.Split("|")); - } - _previousStep = obj; - _curStep = obj; + GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = _CurSceneStep; } private void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; - if (PopUpMng._TriAble&& _curStep!=null) + if (PopUpMng._TriAble&& _CurSceneStep != null) { - if (_curStep.TaskType.Equals(ConstCtrl.TASKTYPE_ShowGeo)) + if (_CurSceneStep.TaskType.Equals(ConstCtrl.TASKTYPE_ShowGeo)) {//工具物品展示 UI_Manage.Instance.HidePanel("TooltipBoxTip"); if (Physics.Raycast(ray, out rayHit, Mathf.Infinity)) @@ -177,7 +117,7 @@ namespace ZXK.LouDiXvMuNiu } } } - else if (_curStep.TaskType.Equals(ConstCtrl.TASKTYPE_Anim)) + else if (_CurSceneStep.TaskType.Equals(ConstCtrl.TASKTYPE_Anim)) {//timeline动画 if (Input.GetMouseButtonUp(0) && Physics.Raycast(ray, out rayHit, Mathf.Infinity)) { @@ -187,47 +127,24 @@ namespace ZXK.LouDiXvMuNiu }); ClickToolCallInExamState(rayHit.transform.gameObject, () => { - JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum), false); + JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false); }); } } - else if (_curStep.TaskType.Equals(ConstCtrl.TASKTYPE_Video)) + else if (_CurSceneStep.TaskType.Equals(ConstCtrl.TASKTYPE_Video)) { if (Input.GetMouseButtonUp(0) && Physics.Raycast(ray, out rayHit, Mathf.Infinity)) { ClickToolCallInTrainState(rayHit.transform.gameObject, () => { GameObject videoGeo = UI_Manage.Instance.ShowPanel("VideoShowPanel", Type.GetType("ZXK.LouDiXvMuNiu.VideoShowPanel"), UIGroup.Tip); - videoGeo.GetComponent().PlayVideoClip(_curStep.VideoPath, () => + videoGeo.GetComponent().PlayVideoClip(_CurSceneStep.VideoPath, () => { GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(); }); }); if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) { - //bool addScoreTemp = true; - //if (_curStepUseBTs.Contains(rayHit.transform.name)) - //{ - // _curStepUseBTs.Remove(rayHit.transform.name); - //} - //else - //{ - // PopUpMng.PopChoseErrowToast(_curStep.ExamEvvr, 2.0f); - // addScoreTemp = false; - //} - //if (_curStepUseBTs.Count == 0) - //{ - // if (addScoreTemp) - // { - // GameManager.Instance._DataNiuHandler.AddScore(_curStep.ModuleName, _curStep.ThreeTaskName, _curStep.Score); - // } - // for (int i = 0; i < _curSignArray.Count; i++) - // { - // _curSignArray[i].SetActive(false); - // } - // _curSignArray.Clear(); - // JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum), false); - //} } } @@ -238,13 +155,11 @@ namespace ZXK.LouDiXvMuNiu private void OnDestroy() { _curTimeLineCtrl?.Stop(); - GameManager.Instance._DataNiuHandler.CurNiuHandler.OnValueChanged -= OnValueChanged; GameManager.Instance._EventManager.RemoveListener(OnClickToolEvent); } private void OnClickToolEvent(ClickToolArgs e) { - WDebug.Log("点击到:" + e.SelectTool); if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) { GameObject toolGeo = UtilitiesMng.GetGeoByName(new Transform[1] { _toolContain }, e.SelectTool, true); @@ -508,7 +423,7 @@ namespace ZXK.LouDiXvMuNiu } else { - PopUpMng.PopChoseErrowToast(_curStep.ExamEvvr, 2.0f); + PopUpMng.PopChoseErrowToast(_CurSceneStep.ExamEvvr, 2.0f); addScoreTemp = false; } @@ -525,7 +440,7 @@ namespace ZXK.LouDiXvMuNiu if (addScoreTemp) { - GameManager.Instance._DataNiuHandler.AddScore(_curStep.ModuleName, _curStep.ThreeTaskName, _curStep.Score); + GameManager.Instance._DataNiuHandler.AddScore(_CurSceneStep.ModuleName, _CurSceneStep.ThreeTaskName, _CurSceneStep.Score); } clickFinishCall?.Invoke(); @@ -541,7 +456,7 @@ namespace ZXK.LouDiXvMuNiu string[] answers = step.OptionsAll.Split("|"); PopUpMng.PopAnswerQuestions(step.Question, answers, GetOptionIndex(step.OptionRight), () => { - JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum), false); + JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false); }); } /// @@ -564,7 +479,7 @@ namespace ZXK.LouDiXvMuNiu } else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) { - GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum); + GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum); } _IsPlayAnm = true; }); @@ -588,7 +503,7 @@ namespace ZXK.LouDiXvMuNiu } else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) { - JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum), false); + JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false); } float durTime = step.TimelineLength / 60.0f; @@ -599,7 +514,7 @@ namespace ZXK.LouDiXvMuNiu /// 目前只有胚胎选择最后一步需要 /// /// - private void ChoiceImgInStep(string[] temp) + public void ChoiceImgInStep(string[] temp) { if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState")) { @@ -659,40 +574,40 @@ namespace ZXK.LouDiXvMuNiu /// public void JumpTimeline(NiuData partData,bool jumpStepAble) { - if (_curStep == null) _curStep = partData; - if (_curStep.id == partData.id) + if (_CurSceneStep == null) _CurSceneStep = partData; + if (_CurSceneStep.id == partData.id) {//相同步骤不跳转 } else {//跳转不同步骤,可能是点击上下步产生的,每次点击上下步对应的跳转是上下步里面的第一个小步骤 _IsPlayAnm = true; - if (_curStep.id > partData.id) + if (_CurSceneStep.id > partData.id) {//逆序跳转,倒播 if (!jumpStepAble) { - _curTimeLineCtrl.ContinuePlayBackwardByPausePoint(GetPlayTime(partData), () => + _curTimeLineCtrl.ContinuePlayBackwardByPausePoint(GetPlayTime(partData, jumpStepAble), () => { NegativeJumpStep(partData); }); } else { - _curTimeLineCtrl.StopInTime(GetPlayTime(partData)); + _curTimeLineCtrl.StopInTime(GetPlayTime(partData, jumpStepAble)); NegativeJumpStep(partData); } } - else if (_curStep.id < partData.id) + else if (_CurSceneStep.id < partData.id) {//顺序跳转,正播 if (!jumpStepAble) { - _curTimeLineCtrl.ContinuePlayForwardByPausePoint(GetPlayTime(partData), () => + _curTimeLineCtrl.ContinuePlayForwardByPausePoint(GetPlayTime(partData, jumpStepAble), () => { PositiveJumpStep(partData); }); } else { - _curTimeLineCtrl.StopInTime(GetPlayTime(partData)); + _curTimeLineCtrl.StopInTime(GetPlayTime(partData, jumpStepAble)); PositiveJumpStep(partData); } } @@ -705,7 +620,7 @@ namespace ZXK.LouDiXvMuNiu private void PositiveJumpStep(NiuData partData) { _IsPlayAnm = false; - _curStep = partData; + _CurSceneStep = partData; GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = partData; } /// @@ -715,7 +630,7 @@ namespace ZXK.LouDiXvMuNiu private void NegativeJumpStep(NiuData partData) { _IsPlayAnm = false; - _curStep = partData; + _CurSceneStep = partData; GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = partData; } /// @@ -723,33 +638,33 @@ namespace ZXK.LouDiXvMuNiu /// /// /// - private float GetPlayTime(NiuData step) + private float GetPlayTime(NiuData step, bool jumpStepAble) { int allFrame = 0; List modelInfos = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType]; + string addAbleTaskName = null; - for (int a = 0; a < modelInfos.Count; a++) + if (jumpStepAble) { - if (step.id == modelInfos[a].id) + addAbleTaskName = step.TaskName; + } + else + { + for (int a = 0; a < modelInfos.Count; a++) { - //if(step.TaskName!= modelInfos[a - 1].TaskName) - //{ - // addAbleTaskName = modelInfos[a - 1].TaskName; - //} - //else + if (step.id == modelInfos[a].id) { - addAbleTaskName = step.TaskName; + if (step.TaskName != modelInfos[a - 1].TaskName) + { + addAbleTaskName = modelInfos[a - 1].TaskName; + } + else + { + addAbleTaskName = step.TaskName; + } } } } - //if (_curStep != null && step.TaskName != _curStep.TaskName) - //{ - // addAbleTaskName = _curStep.TaskName; - //} - //else - //{ - // addAbleTaskName = step.TaskName; - //} for (int a = 0; a < modelInfos.Count; a++) { if (modelInfos[a].TaskName.Equals(addAbleTaskName) && modelInfos[a].id < step.id) @@ -760,7 +675,7 @@ namespace ZXK.LouDiXvMuNiu return allFrame / 60.0f; } - private int GetOptionIndex(string OptionMsg) + public int GetOptionIndex(string OptionMsg) { switch (OptionMsg) { diff --git a/Assets/_Scripts/Application/UI/OperationStepPanel.cs b/Assets/_Scripts/Application/UI/OperationStepPanel.cs index 9a2f48c..0e8c9e2 100644 --- a/Assets/_Scripts/Application/UI/OperationStepPanel.cs +++ b/Assets/_Scripts/Application/UI/OperationStepPanel.cs @@ -207,7 +207,7 @@ namespace ZXK.LouDiXvMuNiu {//前后任务名字不同 NiuSceneMng._Instance.InitPlayAnmState(obj, GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue); } - else if(obj.ThreeTaskName != GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue.ThreeTaskName) + if(obj.ThreeTaskName != GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue.ThreeTaskName) {//前后三级人物名字不同 _defaultCameraTRTog.isOn = true; @@ -289,6 +289,53 @@ namespace ZXK.LouDiXvMuNiu /// private void UpdateTaskType(NiuData obj) { + if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Anim)) + { + if (NiuSceneMng._Instance._CurSceneStep != obj) + {//区分是否是点击UI,直接进行的步骤跳转 + NiuSceneMng._Instance.JumpTimeline(obj, true); + } + if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState")) + { + List tempToolArray = NiuSceneMng._Instance.GetNeedClickTools(obj); + NiuSceneMng._Instance.OnlyShowBTGeo(tempToolArray.ToArray()); + } + else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) + { + if (string.IsNullOrEmpty(obj.Question)) + { + NiuSceneMng._Instance.GetNeedClickTools(obj); + } + else + { + NiuSceneMng._Instance.AnswerSystemInStep(obj); + } + } + } + if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoiceVideoQuestion)) + { + if (NiuSceneMng._Instance._CurSceneStep != obj) + {//区分是否是点击UI,直接进行的步骤跳转 + NiuSceneMng._Instance.JumpTimeline(obj, true); + } + bool isExam = GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"); + string[] answers = obj.OptionsAll.Split("|"); + if (answers.Length % 2 != 0) + { + PopUpMng.ThreeVideoChoicePanel(obj.Question, answers, answers, NiuSceneMng._Instance.GetOptionIndex(obj.OptionRight), isExam, () => + { + GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(); + }); + } + } + if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoicePicQuestion)) + { + if (NiuSceneMng._Instance._CurSceneStep != obj) + {//区分是否是点击UI,直接进行的步骤跳转 + NiuSceneMng._Instance.JumpTimeline(obj, true); + } + NiuSceneMng._Instance.ChoiceImgInStep(obj.ModelBT.Split("|")); + } if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Video)) { if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))