Pārlūkot izejas kodu

[+]打包暂存

FYX 4 mēneši atpakaļ
vecāks
revīzija
6ed1dc761d

+ 267 - 263
Framework/BuilderDriver/OperationListener.cs

@@ -1,264 +1,268 @@
-using ChivaXR;
-using Sirenix.OdinInspector;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using ChivaXR.Op;
-using System.Linq;
-using UnityEngine.Events;
-using QFramework;
-
-public class OperationListener : MonoBehaviour
-{
-    public List<OpDataInfo> opDataInfos = new List<OpDataInfo>();
-
-    public void Awake()
-    {
-        foreach (var item in opDataInfos)
-        {
-            ///无步骤控制
-            item.OpDataActive(0);
-        }
-    }
-}
-
-[System.Serializable]
-public class OpDataInfo
-{
-    [HideInInspector]
-    public string operationDataName;
-
-    [HideInInspector]
-    public int ActiveStepID;
-    [ShowInInspector]
-    [PropertyOrder(-1)]
-    [ValueDropdown("GetAllOperationDataNames", IsUniqueList = true)]
-    public string OperationDataName
-    {
-        get { return operationDataName; }
-        set
-        {
-            if (operationDataName != value)
-            {
-                operationDataName = value;
-                OnOperationDataNameChanged();
-            }
-        }
-    }
-
-    [HorizontalGroup("ValueCondition")]
-    [LabelText("监听条件")]
-    public ValueCondition condition = ValueCondition.equal;
-
-    public OperationDataType operationDataType;
-
-    [HideLabel]
-    [HorizontalGroup("ValueCondition")]
-    public float targetValue = 1;
-
-    [HideLabel]
-    [ShowIf("RangeCondition")]
-    [HorizontalGroup("ValueCondition")]
-    public float maxValue;
-
-    public CVR_OpDataInfoEventHandle OperationDataFinished;
-
-    [HideInInspector]
-    public bool isOpFinished = false;
-    [HideInInspector]
-    public bool isQuestionFinished = false;
-    [HideInInspector]
-    public QuestionInfo m_QuesionInfo;
-
-    public bool RangeCondition()
-    {
-        return condition == ValueCondition.range;
-    }
-
-    public void OnOperationDataNameChanged()
-    {
-        OperationDataBase item = OperationManager.Instance.GetOpData(operationDataName);
-        if (item)
-        {
-            operationDataType = item.OperationType;
-        }
-    }
-
-    private static IEnumerable GetAllOperationDataNames()
-    {
-        return OperationManager.Instance.operationDataContainers.Select(s => new ValueDropdownItem(s.OpDataName, s.OpDataName));
-    }
-
-    [LabelText("执行动画")]
-    [ValueDropdown("GetAllAnimationNames", IsUniqueList = true)]
-    public string aniDataName;
-
-    private static IEnumerable GetAllAnimationNames()
-    {
-        return AnimationManager.Instance.animationDatas.Select(s => new ValueDropdownItem(s.AniDataName, s.AniDataName));
-    }
-
-    public void OpDataActive(int activeStepID)
-    {
-        ActiveStepID = activeStepID;
-        InitQuestion();
-        OpDataInfoManager.Instance.RegisterOpSystem(this);
-
-        OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
-
-        if (!itemOpData)
-        {
-            Debug.LogError("无该操作名称:" + operationDataName);
-        }
-        Debug.Log("激活操作点:" + operationDataName);
-        itemOpData.OperationStatus = OperationDataStatus.Listening;
-        itemOpData.OperationValueChanged += Trigger;
-    }
-
-    public void OpDataDisActive()
-    {
-        OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
-
-        if (!itemOpData)
-        {
-            Debug.LogError("无该操作名称");
-        }
-        itemOpData.OperationStatus = OperationDataStatus.InActive;
-        itemOpData.OperationValueChanged -= Trigger;
-    }
-
-    public void Trigger(object sender, OperationEventArgs e)
-    {
-        bool finished = false;
-        switch (condition)
-        {
-            case ValueCondition.bigger:
-                finished = (e.opData.OpValue > targetValue);
-                break;
-            case ValueCondition.equal:
-                finished = (targetValue == e.opData.OpValue);
-                break;
-            case ValueCondition.less:
-                finished = (e.opData.OpValue < targetValue);
-                break;
-            case ValueCondition.unequal:
-                finished = (targetValue != e.opData.OpValue);
-                break;
-            case ValueCondition.range:
-                finished = (e.opData.OpValue >= targetValue && e.opData.OpValue <= maxValue);
-                break;
-        }
-
-        if (finished)
-        {
-            //操作时停止语音播放
-            SoundManager.Instance.StopBg();
-            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>
-    public void OnOpListenerFinished()
-    {
-        OperationDataBase itemOpData = GetCurrentOpData();
-        itemOpData.OperationStatus = OperationDataStatus.InActive;
-        itemOpData.OperationValueChanged -= Trigger;
-        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(int stepID,bool result)
-    {
-        if (OperateSetting.Instance.m_CurrentOperationMode == OperationMode.Exam
-            || OperateSetting.Instance.m_CurrentOperationMode == OperationMode.FreeExam)
-        {
-            if (!result)
-            {
-                ExamManagerForPC.instance.RecordFault(stepID, ErrorReason.AnswerWrong);
-            }
-        }
-        isQuestionFinished = true;
-
-        PlayAnimation();
-    }
-
-    public OperationDataBase GetCurrentOpData()
-    {
-        return OperationManager.Instance.GetOpData(OperationDataName);
-    }
-    public AniData GetCurrentAniData()
-    {
-        return AnimationManager.Instance.GetAniData(aniDataName);
-    }
-    public void OpenHit()
-    {
-        OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
-        if (itemOpData != null) itemOpData.OpenHint();
-    }
-
-    public void CloseHit()
-    {
-        OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
-        if (itemOpData != null) itemOpData.CloseHint();
-    }
-}
-
-public enum ValueCondition
-{
-    bigger,
-    equal,
-    less,
-    unequal,
-    range
+using ChivaXR;
+using Sirenix.OdinInspector;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using ChivaXR.Op;
+using System.Linq;
+using UnityEngine.Events;
+using QFramework;
+
+public class OperationListener : MonoBehaviour
+{
+    public List<OpDataInfo> opDataInfos = new List<OpDataInfo>();
+
+    public void Awake()
+    {
+        foreach (var item in opDataInfos)
+        {
+            ///无步骤控制
+            item.OpDataActive(0);
+        }
+    }
+}
+
+[System.Serializable]
+public class OpDataInfo
+{
+    [HideInInspector]
+    public string operationDataName;
+
+    [HideInInspector]
+    public int ActiveStepID;
+    [ShowInInspector]
+    [PropertyOrder(-1)]
+    [ValueDropdown("GetAllOperationDataNames", IsUniqueList = true)]
+    public string OperationDataName
+    {
+        get { return operationDataName; }
+        set
+        {
+            if (operationDataName != value)
+            {
+                operationDataName = value;
+                OnOperationDataNameChanged();
+            }
+        }
+    }
+
+    [HorizontalGroup("ValueCondition")]
+    [LabelText("监听条件")]
+    public ValueCondition condition = ValueCondition.equal;
+
+    public OperationDataType operationDataType;
+
+    [HideLabel]
+    [HorizontalGroup("ValueCondition")]
+    public float targetValue = 1;
+
+    [HideLabel]
+    [ShowIf("RangeCondition")]
+    [HorizontalGroup("ValueCondition")]
+    public float maxValue;
+
+    public CVR_OpDataInfoEventHandle OperationDataFinished;
+
+    [HideInInspector]
+    public bool isOpFinished = false;
+    [HideInInspector]
+    public bool isQuestionFinished = false;
+    [HideInInspector]
+    public QuestionInfo m_QuesionInfo;
+
+    public bool RangeCondition()
+    {
+        return condition == ValueCondition.range;
+    }
+
+    public void OnOperationDataNameChanged()
+    {
+        OperationDataBase item = OperationManager.Instance.GetOpData(operationDataName);
+        if (item)
+        {
+            operationDataType = item.OperationType;
+        }
+    }
+
+    private static IEnumerable GetAllOperationDataNames()
+    {
+        return OperationManager.Instance.operationDataContainers.Select(s => new ValueDropdownItem(s.OpDataName, s.OpDataName));
+    }
+
+    [LabelText("执行动画")]
+    [ValueDropdown("GetAllAnimationNames", IsUniqueList = true)]
+    public string aniDataName;
+
+    private static IEnumerable GetAllAnimationNames()
+    {
+        return AnimationManager.Instance.animationDatas.Select(s => new ValueDropdownItem(s.AniDataName, s.AniDataName));
+    }
+
+    public void OpDataActive(int activeStepID)
+    {
+        ActiveStepID = activeStepID;
+        InitQuestion();
+        OpDataInfoManager.Instance.RegisterOpSystem(this);
+
+        OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
+
+        if (!itemOpData)
+        {
+            Debug.LogError("无该操作名称:" + operationDataName);
+        }
+        Debug.Log("激活操作点:" + operationDataName);
+        itemOpData.OperationStatus = OperationDataStatus.Listening;
+        itemOpData.OperationValueChanged += Trigger;
+    }
+
+    public void OpDataDisActive()
+    {
+        OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
+
+        if (!itemOpData)
+        {
+            Debug.LogError("无该操作名称");
+        }
+        itemOpData.OperationStatus = OperationDataStatus.InActive;
+        itemOpData.OperationValueChanged -= Trigger;
+    }
+
+    public void Trigger(object sender, OperationEventArgs e)
+    {
+        bool finished = false;
+        switch (condition)
+        {
+            case ValueCondition.bigger:
+                finished = (e.opData.OpValue > targetValue);
+                break;
+            case ValueCondition.equal:
+                finished = (targetValue == e.opData.OpValue);
+                break;
+            case ValueCondition.less:
+                finished = (e.opData.OpValue < targetValue);
+                break;
+            case ValueCondition.unequal:
+                finished = (targetValue != e.opData.OpValue);
+                break;
+            case ValueCondition.range:
+                finished = (e.opData.OpValue >= targetValue && e.opData.OpValue <= maxValue);
+                break;
+        }
+
+        if (finished)
+        {
+            //操作时停止语音播放
+            SoundManager.Instance.StopBg();
+
+            if (OperateSetting.Instance.m_CurrentOperationMode != OperationMode.Learn)
+            {
+                OpenQuestion();
+            }
+        }
+
+        if (isQuestionFinished || OperateSetting.Instance.m_CurrentOperationMode == OperationMode.Learn)
+        {
+            PlayAnimation();
+        }
+    }
+
+    private void PlayAnimation()
+    {
+        if (!string.IsNullOrEmpty(aniDataName))
+        {
+            AnimationManager.Instance.PlayAniData(aniDataName, OnOpListenerFinished);
+        }
+        else
+        {
+            OperationDataFinished?.Invoke(this, new ChivaVR_OpDataInfoEventArgs() { opDataInfo = this });
+        }
+    }
+
+    /// <summary> 
+    /// 动画播放完成
+    /// </summary>
+    public void OnOpListenerFinished()
+    {
+        OperationDataBase itemOpData = GetCurrentOpData();
+        itemOpData.OperationStatus = OperationDataStatus.InActive;
+        itemOpData.OperationValueChanged -= Trigger;
+        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(int stepID, bool result)
+    {
+        if (OperateSetting.Instance.m_CurrentOperationMode == OperationMode.Exam
+            || OperateSetting.Instance.m_CurrentOperationMode == OperationMode.FreeExam)
+        {
+            if (!result)
+            {
+                ExamManagerForPC.instance.RecordFault(stepID, ErrorReason.AnswerWrong);
+            }
+        }
+        isQuestionFinished = true;
+
+        PlayAnimation();
+    }
+
+    public OperationDataBase GetCurrentOpData()
+    {
+        return OperationManager.Instance.GetOpData(OperationDataName);
+    }
+    public AniData GetCurrentAniData()
+    {
+        return AnimationManager.Instance.GetAniData(aniDataName);
+    }
+    public void OpenHit()
+    {
+        OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
+        if (itemOpData != null) itemOpData.OpenHint();
+    }
+
+    public void CloseHit()
+    {
+        OperationDataBase itemOpData = OperationManager.Instance.GetOpData(OperationDataName);
+        if (itemOpData != null) itemOpData.CloseHint();
+    }
+}
+
+public enum ValueCondition
+{
+    bigger,
+    equal,
+    less,
+    unequal,
+    range
 }

+ 11 - 7
Framework/SimulationToolDev/CVR_Interactable/Example/Scripts/OperationData-Example/OPTrigger_SelectToolElemet.cs

@@ -57,13 +57,17 @@ public class OPTrigger_SelectToolElemet : OperationData_TriggerMode
             case OperationDataStatus.Listening:
 
                 if (UIKit.GetPanel<ToolLibraryForm>() == null)
-                {
-                    UIKit.OpenPanel<ToolLibraryForm>(new ToolLibraryFormData()
-                    {
-                        toolLibraryType = ToolLibraryType.ToolRoom,
-                        selectAction = Check,
-                        rightTools = choseToolNames
-                    });
+                {
+                    if (OperateSetting.Instance.m_CurrentOperationMode != OperationMode.Learn)
+                    {
+                        UIKit.OpenPanel<ToolLibraryForm>(new ToolLibraryFormData()
+                        {
+                            toolLibraryType = ToolLibraryType.ToolRoom,
+                            selectAction = Check,
+                            rightTools = choseToolNames
+                        });
+                    }
+
                 }
                 //UIKit.OpenPanel<ToolLibraryForm>(new ToolLibraryFormData()
                 //{