BodyComparer.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Kinect = Windows.Kinect;
  5. using Valve.VR;
  6. public class BodyComparer : MonoBehaviour
  7. {
  8. public BodySourceView bsv;
  9. private List<JointsData> jointsDataDemo = new List<JointsData>();
  10. private List<float> recordingTimesDemo = new List<float>();
  11. public void SetDataDemo(List<JointsData> jointsDataDemo, List<float> recordingTimesDemo)
  12. {
  13. this.jointsDataDemo = jointsDataDemo;
  14. this.recordingTimesDemo = recordingTimesDemo;
  15. }
  16. public IEnumerator StartCompare()
  17. {
  18. for (int i = 0; i < jointsDataDemo.Count; i++)
  19. {
  20. Transform body = bsv.body.transform;
  21. for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++)
  22. {
  23. // Skip these joints
  24. if (jt == Kinect.JointType.Head || jt == Kinect.JointType.ThumbLeft || jt == Kinect.JointType.ThumbRight
  25. || jt == Kinect.JointType.HandLeft || jt == Kinect.JointType.HandRight
  26. || jt == Kinect.JointType.HandTipLeft || jt == Kinect.JointType.HandTipRight)
  27. continue;
  28. JointsData jd = jointsDataDemo[i];
  29. Vector3 posJointDemo = new Vector3(jd.jointsPositionsX[(int)jt], jd.jointsPositionsY[(int)jt], jd.jointsPositionsZ[(int)jt]);
  30. //float distance = (joints[index].position - posJointDemo).magnitude;
  31. float distance = (body.GetChild((int)jt).position - posJointDemo).magnitude;
  32. if (distance > 0.15f)
  33. {
  34. //joints[index].GetComponent<Renderer>().material.color = Color.red;
  35. body.GetChild((int)jt).GetComponent<Renderer>().material.color = Color.red;
  36. // TODO: Haptic feedback
  37. //SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.LeftHand].Execute(0, 0.01f, 10, 1);
  38. //SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.RightHand].Execute(0, 0.01f, 10, 1);
  39. }
  40. else
  41. {
  42. //joints[index].GetComponent<Renderer>().material.color = Color.white;
  43. body.GetChild((int)jt).GetComponent<Renderer>().material.color = Color.white;
  44. }
  45. }
  46. float waitTime = 0.01f;
  47. if (i < recordingTimesDemo.Count - 1)
  48. {
  49. waitTime = recordingTimesDemo[i + 1] - recordingTimesDemo[i];
  50. }
  51. yield return new WaitForSeconds(waitTime);
  52. }
  53. // Make all joints white
  54. Transform bodyEnd = bsv.body.transform;
  55. for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++)
  56. {
  57. // Skip these joints
  58. if (jt == Kinect.JointType.Head || jt == Kinect.JointType.ThumbLeft || jt == Kinect.JointType.ThumbRight
  59. || jt == Kinect.JointType.HandLeft || jt == Kinect.JointType.HandRight
  60. || jt == Kinect.JointType.HandTipLeft || jt == Kinect.JointType.HandTipRight)
  61. continue;
  62. bodyEnd.GetChild((int)jt).GetComponent<Renderer>().material.color = Color.white;
  63. }
  64. }
  65. }