Browse Source

【题库更新至流程列表】

CHIVA\bj 6 months ago
parent
commit
67daf4bec7

+ 77 - 11
Framework/BuilderDriver/OperationListener.cs

@@ -6,6 +6,7 @@ using UnityEngine;
 using ChivaXR.Op;
 using System.Linq;
 using UnityEngine.Events;
+using QFramework;
 
 public class OperationListener : MonoBehaviour
 {
@@ -15,7 +16,8 @@ public class OperationListener : MonoBehaviour
     {
         foreach (var item in opDataInfos)
         {
-            item.OpDataActive();
+            ///无步骤控制
+            item.OpDataActive(0);
         }
     }
 }
@@ -26,6 +28,8 @@ public class OpDataInfo
     [HideInInspector]
     public string operationDataName;
 
+    [HideInInspector]
+    public int ActiveStepID;
     [ShowInInspector]
     [PropertyOrder(-1)]
     [ValueDropdown("GetAllOperationDataNames", IsUniqueList = true)]
@@ -60,7 +64,11 @@ public class OpDataInfo
     public CVR_OpDataInfoEventHandle OperationDataFinished;
 
     [HideInInspector]
-    public bool finish = false;
+    public bool isOpFinished = false;
+    [HideInInspector]
+    public bool isQuestionFinished = false;
+    [HideInInspector]
+    public QuestionInfo m_QuesionInfo;
 
     public bool RangeCondition()
     {
@@ -90,8 +98,10 @@ public class OpDataInfo
         return AnimationManager.Instance.animationDatas.Select(s => new ValueDropdownItem(s.AniDataName, s.AniDataName));
     }
 
-    public void OpDataActive()
+    public void OpDataActive(int activeStepID)
     {
+        ActiveStepID = activeStepID;
+        InitQuestion();
         OpDataInfoManager.Instance.RegisterOpSystem(this);
 
         OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
@@ -108,6 +118,7 @@ public class OpDataInfo
     public void OpDataDisActive()
     {
         OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
+
         if (!itemOpData)
         {
             Debug.LogError("无该操作名称");
@@ -140,16 +151,27 @@ public class OpDataInfo
 
         if (finished)
         {
-            if (!string.IsNullOrEmpty(aniDataName))
-            {
-                AnimationManager.Instance.PlayAniData(aniDataName, OnOpListenerFinished);
-            }
-            else
-            {
-                OperationDataFinished?.Invoke(this, new ChivaVR_OpDataInfoEventArgs() { opDataInfo = this });
-            }
+            OpenQuestion();
+        }
+
+        if (isQuestionFinished)
+        {
+            PlayAnimation();
+        }
+    }
+
+    private void PlayAnimation()
+    {
+        if (!string.IsNullOrEmpty(aniDataName))
+        {
+            AnimationManager.Instance.PlayAniData(aniDataName, OnOpListenerFinished);
+        }
+        else
+        {
+            OperationDataFinished?.Invoke(this, new ChivaVR_OpDataInfoEventArgs() { opDataInfo = this });
         }
     }
+
     /// <summary> 
     /// 动画播放完成
     /// </summary>
@@ -161,6 +183,50 @@ public class OpDataInfo
         OperationDataFinished?.Invoke(this, new ChivaVR_OpDataInfoEventArgs() { opDataInfo = this });
     }
 
+    public void InitQuestion()
+    {
+        if (ActiveStepID == 0) return;
+        isQuestionFinished = false;
+        m_QuesionInfo = OperateSetting.Instance.GetQuestionInfo(ActiveStepID);
+    }
+    /// <summary>
+    /// 打开题库
+    /// </summary>
+    public void OpenQuestion()
+    {
+        if (m_QuesionInfo == null) isQuestionFinished = true;
+        else
+        {
+            if (m_QuesionInfo.QuestionType == "图文")
+            {
+                UIKit.OpenPanel<ImageAndTextNamePanel>(new ImageAndTextNamePanelData() { questionInfo = m_QuesionInfo, answerCallBack = AnswerCallBack });
+            }
+            else
+            {
+                UIKit.OpenPanel<QuestionPanel>(new QuestionPanelData() { questionInfo = m_QuesionInfo, answerCallBack = AnswerCallBack });
+            }
+        }
+    }
+    /// <summary>
+    /// 关闭题库
+    /// </summary>
+    public void CloseQuestion()
+    {
+        if (UIKit.GetPanel<ImageAndTextNamePanel>()) UIKit.ClosePanel<ImageAndTextNamePanel>();
+
+        if (UIKit.GetPanel<QuestionPanel>()) UIKit.ClosePanel<QuestionPanel>();
+    }
+    public void AnswerCallBack(bool result)
+    {
+        if (!result && OperateSetting.Instance.m_CurrentOperationMode == OperationMode.Exam)
+        {
+            ExamManagerForPC.instance.RecordFault(ProcessManagement.Instance.currentStepID, ErrorReason.AnswerWrong);
+        }
+        isQuestionFinished = true;
+
+        PlayAnimation();
+    }
+
     public OperationDataBase GetCurrentOpData()
     {
         return OperationManager.Instance.GetOpData(OperationDataName);

+ 12 - 1
Framework/Scripts/Proxys/FreeStepListProxy.cs

@@ -1,4 +1,5 @@
 using System.Collections.Generic;
+using System.IO;
 
 public class FreeStepListProxy : DataProxy
 {
@@ -40,4 +41,14 @@ public class FreeStepListProxy : DataProxy
     {
         return m_OpertaionFreeConditions.Find(t => int.Parse(t.id) == id);
     }
-}
+
+    /// <summary>
+    /// 保存当前数据
+    /// </summary>
+    public void SaveOperation(string TableName)
+    {
+        string tmpPath = Path.Combine(GlobalConfig.operateTablePath, m_TableName);
+
+        //ExcelHelper.WriteInfoToExcel<OperationStepDataInfo>(tmpPath, m_StepMsgInfos);
+    }
+}

+ 23 - 0
Framework/Scripts/UI/PCController/OperateSetting.cs

@@ -77,6 +77,13 @@ public class OperateSetting : MonoSingleton<OperateSetting>
 
     private PC_OperatePanel m_OperatePanel;
 
+    /// <summary>
+    /// 是否开启题库
+    /// </summary>
+    [HideInInspector]
+    public bool isOpenQuestion=true;
+
+    private List<QuestionInfo> m_QuestionList=new List<QuestionInfo>();
     #region 本地化语言
     public bool useLocalization = false;
     public string en_courseName;
@@ -179,6 +186,7 @@ public class OperateSetting : MonoSingleton<OperateSetting>
         if (!string.IsNullOrEmpty(m_CourseName))
             LoadCourse(m_CourseName);
 
+        InitQuestionInfo();
         InitOperationMode();
         ProcessManagement.Instance.awakePlay = false;
     }
@@ -198,6 +206,21 @@ public class OperateSetting : MonoSingleton<OperateSetting>
         RoamCameraController.Instance.MouseScrollMoveSpeed = settingInfo.mouseSpeedValue * 2;
     }
 
+    /// <summary>
+    /// 初始化题库
+    /// </summary>
+    private void InitQuestionInfo()
+    {
+        m_QuestionList = DAL.Instance.Get<QuestionProxy>().ReadStepMsgInfoFromTable(OperateSetting.Instance.m_CourseName + "_题库");
+    }
+
+    public QuestionInfo GetQuestionInfo(int stepID)
+    {
+        QuestionInfo tmpQuestionInfo = m_QuestionList.Find(t => t.StepId == ProcessManagement.Instance.currentStepID.ToString());
+
+        return tmpQuestionInfo;
+    }
+
     private void Start()
     {
         if (CameraRayCastManager.Instance != null) Debug.Log("<color=green>检测已开启</color>");

+ 1 - 2
Framework/SimulationToolDev/CVR_Interactable/Example/Scripts/OperationData-Example/OPTrigger_OpQuestionElement.cs

@@ -58,5 +58,4 @@ public class OPTrigger_OpQuestionElement : OperationData_TriggerMode
         }
         isAnswer = true;
     }
-
-}
+}

+ 1 - 1
Framework/SimulationToolDev/OperationDriver/OperationData-Example/TriggerMode/OpTrigger_Toolbackpack/OpTrigger_ToolPack.cs

@@ -262,7 +262,7 @@ public class OpTrigger_ToolPack : OperationData_TriggerMode
                 timer = 0;
                 OperateSetting.Instance.m_CurrentStepRightToolNames = choseToolNames;
 
-                this.GetComponent<ToolPackInteractive_IndependentAni>().Init();
+                //this.GetComponent<ToolPackInteractive_IndependentAni>().Init();
 
                 break;
         }

+ 2 - 2
Framework/SimulationToolDev/Process/Scripts/Manager/ProcessBase-Example/OpDataRule/Rule_OrderFinished.cs

@@ -14,7 +14,7 @@ public class Rule_OrderFinished : OpDataGroup_RuleBase
             return;
         }
         orderCurrentDataID = 0;
-        opDataGroup.opDataInfos[orderCurrentDataID].OpDataActive();
+        opDataGroup.opDataInfos[orderCurrentDataID].OpDataActive(opDataGroup.currentProcessElement.stepID);
     }
 
     public override void Exit()
@@ -37,7 +37,7 @@ public class Rule_OrderFinished : OpDataGroup_RuleBase
             }
             else
             {
-                opDataGroup.opDataInfos[orderCurrentDataID].OpDataActive();
+                opDataGroup.opDataInfos[orderCurrentDataID].OpDataActive(opDataGroup.currentProcessElement.stepID);
                 opDataGroup.opDataInfos[orderCurrentDataID].OpenHit();
             }
         }

+ 1 - 1
Framework/SimulationToolDev/Process/Scripts/Manager/ProcessBase-Example/PB_OpData.cs

@@ -10,7 +10,7 @@ public class PB_OpData : ProcessBase
     public override void Enter(ProcessElement p)
     {
         base.Enter(p);
-        opData.OpDataActive();
+        opData.OpDataActive(currentProcessElement.stepID);
         opData.OpenHit();
         opData.OperationDataFinished += OperationDataFinished;
     }

+ 3 - 3
Framework/SimulationToolDev/Process/Scripts/Manager/ProcessBase-Example/PB_OpDataGroup.cs

@@ -118,7 +118,7 @@ public class PB_OpDataGroup : ProcessBase
         {
             if (state)
             {
-                opDataInfos[i].OpDataActive();
+                opDataInfos[i].OpDataActive(currentProcessElement.stepID);
             }
             else
             {
@@ -129,12 +129,12 @@ public class PB_OpDataGroup : ProcessBase
 
     public void OpDataInfoFinished(object sender, ChivaVR_OpDataInfoEventArgs e)
     {
-        e.opDataInfo.finish = true;
+        e.opDataInfo.isOpFinished = true;
         e.opDataInfo.CloseHit();
 
         foreach (var item in opDataInfos)
         {
-            if (!item.finish)
+            if (!item.isOpFinished)
             {
                 item.OpenHit();
                 break;