From 1a0b118da1cbd929cbdb24c74b83ec7e094db593 Mon Sep 17 00:00:00 2001
From: terric <terric.ying@gmail.com>
Date: Mon, 27 Nov 2023 14:46:43 +0800
Subject: [PATCH] bugfix

---
 Assets/Resources/Animation/Nod.anim           |  2 +-
 Assets/Resources/Animation/ShakeHead.anim     | 42 +++++++++----------
 Assets/Scripts/PoseCheck/LeftLateralHead.cs   | 10 ++---
 Assets/Scripts/PoseCheck/PoseBase.cs          | 18 ++++----
 Assets/Scripts/PoseCheck/RightLateralHead.cs  | 10 ++---
 Assets/Scripts/Service/YogaManager.cs         |  5 +++
 .../UI/Component/CaptureManagerBase.cs        |  2 +-
 Assets/Scripts/YogaDataLoader.cs              | 12 +++---
 8 files changed, 55 insertions(+), 46 deletions(-)

diff --git a/Assets/Resources/Animation/Nod.anim b/Assets/Resources/Animation/Nod.anim
index 9b52ab2..f4b5199 100644
--- a/Assets/Resources/Animation/Nod.anim
+++ b/Assets/Resources/Animation/Nod.anim
@@ -130145,7 +130145,7 @@ AnimationClip:
     intParameter: 0
     messageOptions: 0
   - time: 41.133335
-    functionName: PlayCountDownSE
+    functionName: ActionBackStart
     data: 
     objectReferenceParameter: {fileID: 0}
     floatParameter: 0
diff --git a/Assets/Resources/Animation/ShakeHead.anim b/Assets/Resources/Animation/ShakeHead.anim
index f236014..92a7a72 100644
--- a/Assets/Resources/Animation/ShakeHead.anim
+++ b/Assets/Resources/Animation/ShakeHead.anim
@@ -183949,21 +183949,21 @@ AnimationClip:
     intParameter: 1
     messageOptions: 0
   - time: 1.2333333
-    functionName: ActionHold
+    functionName: ActionRecheck
     data: 
     objectReferenceParameter: {fileID: 0}
     floatParameter: 0
     intParameter: 1
     messageOptions: 0
-  - time: 2.9
-    functionName: StartSampling
+  - time: 2.9333334
+    functionName: PlayCountDownSE
     data: 
     objectReferenceParameter: {fileID: 0}
     floatParameter: 0
     intParameter: 0
     messageOptions: 0
   - time: 3.1333334
-    functionName: PlayCountDownSE
+    functionName: StartSampling
     data: 
     objectReferenceParameter: {fileID: 0}
     floatParameter: 0
@@ -183990,13 +183990,6 @@ AnimationClip:
     floatParameter: 0
     intParameter: 0
     messageOptions: 0
-  - time: 6.5666666
-    functionName: ActionHold
-    data: 
-    objectReferenceParameter: {fileID: 0}
-    floatParameter: 0
-    intParameter: 12
-    messageOptions: 0
   - time: 6.8
     functionName: ActionBackStart
     data: 
@@ -184004,13 +183997,6 @@ AnimationClip:
     floatParameter: 0
     intParameter: 0
     messageOptions: 0
-  - time: 9.766666
-    functionName: ActionHold
-    data: 
-    objectReferenceParameter: {fileID: 0}
-    floatParameter: 0
-    intParameter: 0
-    messageOptions: 0
   - time: 10.3
     functionName: Evaluate
     data: 
@@ -184025,8 +184011,22 @@ AnimationClip:
     floatParameter: 0
     intParameter: 0
     messageOptions: 0
+  - time: 16.466667
+    functionName: StartSampling
+    data: 
+    objectReferenceParameter: {fileID: 0}
+    floatParameter: 0
+    intParameter: 0
+    messageOptions: 0
+  - time: 17.733334
+    functionName: EndSampling
+    data: 
+    objectReferenceParameter: {fileID: 0}
+    floatParameter: 0
+    intParameter: 0
+    messageOptions: 0
   - time: 18.1
-    functionName: ActionHold
+    functionName: ActionRecheck
     data: 
     objectReferenceParameter: {fileID: 0}
     floatParameter: 0
@@ -184103,7 +184103,7 @@ AnimationClip:
     intParameter: 1
     messageOptions: 0
   - time: 34.433334
-    functionName: ActionHold
+    functionName: ActionRecheck
     data: 
     objectReferenceParameter: {fileID: 0}
     floatParameter: 0
@@ -184180,7 +184180,7 @@ AnimationClip:
     intParameter: 0
     messageOptions: 0
   - time: 51.166668
-    functionName: ActionHold
+    functionName: ActionRecheck
     data: 
     objectReferenceParameter: {fileID: 0}
     floatParameter: 0
diff --git a/Assets/Scripts/PoseCheck/LeftLateralHead.cs b/Assets/Scripts/PoseCheck/LeftLateralHead.cs
index 298095c..8c349cc 100644
--- a/Assets/Scripts/PoseCheck/LeftLateralHead.cs
+++ b/Assets/Scripts/PoseCheck/LeftLateralHead.cs
@@ -15,15 +15,15 @@ public class LeftLateralHead : PoseBase
         var pointList = points.OrderBy(p => p.Item1);
         var startP = points.First().Item2;
         var endP = points.Last().Item2;
-
-        var startDir = "Nose".vector(startP) - "Neck".vector(startP);
-        var endDir = "Nose".vector(endP) - "Neck".vector(endP);
+        //"REye", "LEye"
+        var startDir = "REye".vector(startP) - "LEye".vector(startP);
+        var endDir = "REye".vector(endP) - "LEye".vector(endP);
 
         var angle = Vector2.SignedAngle(startDir, endDir);
 
-        LogPrint.Log($"angle: {angle}", PrintLevel.Normal);
+        LogPrint.Warning($"angle: {angle}", PrintLevel.Normal);
 
-        if (MathF.Abs(angle) > 10)
+        if (angle > 10)
         {
             return true;
         }
diff --git a/Assets/Scripts/PoseCheck/PoseBase.cs b/Assets/Scripts/PoseCheck/PoseBase.cs
index 5ce0bca..1eead61 100644
--- a/Assets/Scripts/PoseCheck/PoseBase.cs
+++ b/Assets/Scripts/PoseCheck/PoseBase.cs
@@ -106,15 +106,17 @@ public abstract class PoseBase
 
             var vector = GetBasicVectorDirection(p1, p2);
             distance += vector;
-            if (vector.magnitude > 0.1f) //如果矢量长度大于0.1f,说明有运动
-            {
-                TimeSpan timeSpan = points[i + 1].Item1 - points[i].Item1;
+            //if (vector.magnitude > 0.1f) //如果矢量长度大于0.1f,说明有运动
+            //{
+            //    TimeSpan timeSpan = points[i + 1].Item1 - points[i].Item1;
 
-                if (totalTimeSpan == TimeSpan.MinValue)
-                    totalTimeSpan = timeSpan;
-                else
-                    totalTimeSpan += timeSpan;
-            }
+            //    if (totalTimeSpan == TimeSpan.MinValue)
+            //        totalTimeSpan = timeSpan;
+            //    else
+            //        totalTimeSpan += timeSpan;
+            //}
+            TimeSpan timeSpan = points[i + 1].Item1 - points[i].Item1;
+            totalTimeSpan = timeSpan;
         }
         LogPrint.Log($"distance: {distance}, totalTimeSpan: {totalTimeSpan}", PrintLevel.Normal);
 
diff --git a/Assets/Scripts/PoseCheck/RightLateralHead.cs b/Assets/Scripts/PoseCheck/RightLateralHead.cs
index 30d0029..758a0cc 100644
--- a/Assets/Scripts/PoseCheck/RightLateralHead.cs
+++ b/Assets/Scripts/PoseCheck/RightLateralHead.cs
@@ -15,15 +15,15 @@ public class RightLateralHead : PoseBase
         var pointList = points.OrderBy(p => p.Item1);
         var startP = points.First().Item2;
         var endP = points.Last().Item2;
-
-        var startDir = "Nose".vector(startP) - "Neck".vector(startP);
-        var endDir = "Nose".vector(endP) - "Neck".vector(endP);
+        //"REye", "LEye"
+        var startDir = "REye".vector(startP) - "LEye".vector(startP);
+        var endDir = "REye".vector(endP) - "LEye".vector(endP);
 
         var angle = Vector2.SignedAngle(startDir, endDir);
 
-        LogPrint.Log($"angle: {angle}", PrintLevel.Normal);
+        LogPrint.Warning($"angle: {angle}", PrintLevel.Normal);
 
-        if (MathF.Abs(angle) > 10)
+        if (angle < -10)
         {
             return true;
         }
diff --git a/Assets/Scripts/Service/YogaManager.cs b/Assets/Scripts/Service/YogaManager.cs
index bc314ff..0aac4d3 100644
--- a/Assets/Scripts/Service/YogaManager.cs
+++ b/Assets/Scripts/Service/YogaManager.cs
@@ -104,6 +104,9 @@ public class YogaManager : MonoSingleton<YogaManager>
         _actions[AvatarAction.HeadTurnDown] = new HeadTurnDown();
         _actions[AvatarAction.HandsUp] = new HandsUp();
         _actions[AvatarAction.HandsDown] = new HandsHold();
+        _actions[AvatarAction.LeftLateralHead] = new LeftLateralHead();
+        _actions[AvatarAction.RightLateralHead] = new RightLateralHead();
+        _actions[AvatarAction.Hold] = new HoldPosition();
 
         _currentCheckPointCount = 0;
         _currentCheckPointSuccessCount = 0;
@@ -119,6 +122,8 @@ public class YogaManager : MonoSingleton<YogaManager>
 
         EventManager.Instance.AddEventListener(YogaEventType.Action_Success, OnActionSuccess);
         EventManager.Instance.AddEventListener(YogaEventType.Action_Fail, OnActionFailed);
+        EventManager.Instance.AddEventListener(YogaEventType.Action_StartSampling, OnSamplingStart);
+        EventManager.Instance.AddEventListener(YogaEventType.Action_EndSampling, OnSamplingEnd);
         EventManager.Instance.AddEventListener(YogaEventType.Action_Evaluate, OnEvaluation);
         //extra event 
         EventManager.Instance.AddEventListener(YogaEventType.Action_MoveDistanceExactly, ExtraMoveDistanceExactly);
diff --git a/Assets/Scripts/UI/Component/CaptureManagerBase.cs b/Assets/Scripts/UI/Component/CaptureManagerBase.cs
index e4e980f..5f9c01d 100644
--- a/Assets/Scripts/UI/Component/CaptureManagerBase.cs
+++ b/Assets/Scripts/UI/Component/CaptureManagerBase.cs
@@ -43,7 +43,7 @@ namespace Yoga
         }
         private void GCCollection()
         {
-            if (_isOnCamCapture && enabled == true)
+            if (_isOnCamCapture && enabled == true && gameObject.activeInHierarchy == true)
                 StartCoroutine(CleanUp());
         }
         private IEnumerator CleanUp()
diff --git a/Assets/Scripts/YogaDataLoader.cs b/Assets/Scripts/YogaDataLoader.cs
index ffc3739..c8807d9 100644
--- a/Assets/Scripts/YogaDataLoader.cs
+++ b/Assets/Scripts/YogaDataLoader.cs
@@ -14,20 +14,20 @@ public class YogaDataLoader
         data[-1] = new YogaData()
         {
             VideoPath = "Video/Action3",
-            Actions = new List<AvatarAction>() { AvatarAction.SitUpright, AvatarAction.SitUpright, AvatarAction.Nod },
+            Actions = new List<AvatarAction>() { AvatarAction.SitUpright, AvatarAction.HeadShake },
             Action = AvatarAction.Nod,
             ModelType = ModelType.OpenPose,
             MaxCheckPointCount = 1000,
             TotalSeconds = 20.0f,
             RectCutRate = 0.2f,
-            MustPoints = new List<string>() { "Nose", /*"REye", "LEye", */"Neck" },
+            MustPoints = new List<string>()  { "Nose", "Neck" },//{"REye", "LEye"}
             //AnyPoints = new List<string>() { "RWrist", "LWrist" }
         };
 #endif
         data[1] = new YogaData()
         {
             VideoPath = "Video/Action1",
-            Actions = new List<AvatarAction>() { AvatarAction.SitUpright, AvatarAction.SitUpright, AvatarAction.SitUpright, AvatarAction.HeadShake },
+            Actions = new List<AvatarAction>() { AvatarAction.SitUpright, AvatarAction.HeadShake },
             Action = AvatarAction.HeadShake,
             ModelType = ModelType.OpenPose,
             MaxCheckPointCount = 4,
@@ -38,6 +38,7 @@ public class YogaDataLoader
         data[2] = new YogaData()
         {
             VideoPath = "Video/Action2",
+            Actions = new List<AvatarAction>() { AvatarAction.SitUpright, AvatarAction.Nod },
             Action = AvatarAction.Nod,
             ModelType = ModelType.OpenPose,
             MaxCheckPointCount = 4,
@@ -48,11 +49,12 @@ public class YogaDataLoader
         data[3] = new YogaData()
         {
             VideoPath = "Video/Action3",
+            Actions = new List<AvatarAction>() { AvatarAction.SitUpright, AvatarAction.LateralHead },
             Action = AvatarAction.LateralHead,
-            ModelType = ModelType.MediapipePose,
+            ModelType = ModelType.OpenPose,
             MaxCheckPointCount = 4,
             TotalSeconds = 12.66f,
-            MustPoints = new List<string>() { "Nose", "RShoulder", "LShoulder", "RElbow", "LElbow" }
+            MustPoints = new List<string>() { "REye", "LEye" }
         };
 
         if (data.ContainsKey(index))