예제 #1
0
 public override void OnTriggerPress(Vector3 to)
 {
     arrow.gameObject.SetActive(true);
     arrow.SetOff();
     state = states.WAITING_TO_ACTIVE;
     HandEvents.Grab(HandController.types.LEFT);
 }
예제 #2
0
    void Start()
    {
        HandEvents.Grab(HandController.types.RIGHT);

        HandEvents.Grab    += Grab;
        HandEvents.Pointer += Pointer;
    }
예제 #3
0
 void Grab(HandController.types type)
 {
     if (type == HandController.types.LEFT)
     {
         bow.SetActive(true);
         HandEvents.Grab(HandController.types.RIGHT);
     }
 }
예제 #4
0
    void Idle()
    {
        HandEvents.Idle(HandController.types.LEFT);
        lastTimeShooted = Time.time;

        state = states.IDLE;
        bow.ResetRope();
        arrow.gameObject.SetActive(false);
    }
예제 #5
0
    void ChangeState(bool _isOn)
    {
        print("ChangeState " + _isOn);

        if (_isOn)
        {
            HandEvents.Pointer(HandController.types.RIGHT);
        }
        else
        {
            HandEvents.Idle(HandController.types.RIGHT);
        }
    }
예제 #6
0
    void LeftHand()
    {
        if (HandJointUtils.TryGetJointPose(TrackedHandJoint.Palm, myHandedness, out MixedRealityPose palmPose))
        {
            if (HandJointUtils.TryGetJointPose(TrackedHandJoint.IndexTip, leftHandedness, out MixedRealityPose poseL))
            {
                // ...

                if (HandJointUtils.TryGetJointPose(TrackedHandJoint.MiddleTip, leftHandedness, out MixedRealityPose midPoseL))
                {
                    // ...

                    if (HandJointUtils.TryGetJointPose(TrackedHandJoint.RingTip, leftHandedness, out MixedRealityPose pointerPoseL))
                    {
                        // ...

                        if (HandJointUtils.TryGetJointPose(TrackedHandJoint.Palm, leftHandedness, out MixedRealityPose palmPoseL))
                        {
                            HandEvents l_handEvent = new HandEvents(poseL.Position, Time.time);
                            l_indexHandEvents.Add(l_handEvent);

                            if (l_indexHandEvents.Count >= maxSize)
                            {
                                l_indexHandEvents.RemoveAt(0);
                            }

                            HandEvents l_midHandEvent = new HandEvents(midPoseL.Position, Time.time);

                            l_middleHandEvents.Add(l_midHandEvent);

                            if (l_middleHandEvents.Count >= maxSize)
                            {
                                l_middleHandEvents.RemoveAt(0);
                            }

                            HandEvents l_pointerHandEvent = new HandEvents(pointerPoseL.Position, Time.time);

                            l_ringHandEvents.Add(l_pointerHandEvent);

                            if (l_ringHandEvents.Count >= maxSize)
                            {
                                l_ringHandEvents.RemoveAt(0);
                            }

                            HandEvents l_palmHandEvent = new HandEvents(palmPoseL.Position, Time.time);

                            l_palmHandEvents.Add(l_palmHandEvent);

                            if (l_palmHandEvents.Count >= maxSize)
                            {
                                l_palmHandEvents.RemoveAt(0);
                            }


                            palmPointer.transform.position = palmPose.Position;

                            indexPointerL.transform.position  = poseL.Position;
                            middlePointerL.transform.position = midPoseL.Position;
                            ringPointerL.transform.position   = pointerPoseL.Position;
                            palmPointerL.transform.position   = palmPoseL.Position;


                            //Get distance from palm to palm
                            float palmToPalm  = Vector3.Distance(palmHandEvents[0].position, l_palmHandEvents[0].position);
                            float palmToPalm2 = Vector3.Distance(palmHandEvents[palmHandEvents.Count - 1].position, l_palmHandEvents[l_palmHandEvents.Count - 1].position);


                            indexTextL.text = (Mathf.Round(palmToPalm2 * 1000f) / 1000).ToString();
                            ringTextL.text  = (Mathf.Round(palmToPalm * 1000f) / 1000).ToString();


                            var indexRendererL  = indexPointerL.GetComponent <Renderer>();
                            var middleRendererL = middlePointerL.GetComponent <Renderer>();
                            var ringRendererL   = ringPointerL.GetComponent <Renderer>();
                            var palmRendererL   = palmPointerL.GetComponent <Renderer>();


                            //Hands comming together
                            if (palmToPalm <= .05f && palmToPalm2 <= 0.05f)
                            {
                                float currTime = Time.time;
                                if (currTime - lastCommand2 > delay)
                                {
                                    speechCommands.ChangeColor();
                                }
                                lastCommand2 = currTime;

                                indexRendererL.material.SetColor("_Color", Color.red);
                                middleRendererL.material.SetColor("_Color", Color.red);
                                ringRendererL.material.SetColor("_Color", Color.red);
                                palmRendererL.material.SetColor("_Color", Color.red);
                            }

                            else
                            {
                                float currTime = Time.time;
                                if (currTime - lastCommand2 > delay)
                                {
                                    indexRendererL.material.SetColor("_Color", Color.blue);
                                    middleRendererL.material.SetColor("_Color", Color.blue);
                                    ringRendererL.material.SetColor("_Color", Color.blue);
                                    palmRendererL.material.SetColor("_Color", Color.blue);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
예제 #7
0
    void RightHand()
    {
        if (HandJointUtils.TryGetJointPose(TrackedHandJoint.IndexTip, myHandedness, out MixedRealityPose pose))
        {
            // ...

            if (HandJointUtils.TryGetJointPose(TrackedHandJoint.MiddleTip, myHandedness, out MixedRealityPose midPose))
            {
                // ...

                if (HandJointUtils.TryGetJointPose(TrackedHandJoint.RingTip, myHandedness, out MixedRealityPose pointerPose))
                {
                    // ...

                    if (HandJointUtils.TryGetJointPose(TrackedHandJoint.Palm, myHandedness, out MixedRealityPose palmPose))
                    {
                        HandEvents handEvent = new HandEvents(pose.Position, Time.time);
                        indexHandEvents.Add(handEvent);

                        if (indexHandEvents.Count >= maxSize)
                        {
                            indexHandEvents.RemoveAt(0);
                        }

                        HandEvents midHandEvent = new HandEvents(midPose.Position, Time.time);

                        middleHandEvents.Add(midHandEvent);

                        if (middleHandEvents.Count >= maxSize)
                        {
                            middleHandEvents.RemoveAt(0);
                        }

                        HandEvents pointerHandEvent = new HandEvents(pointerPose.Position, Time.time);

                        ringHandEvents.Add(pointerHandEvent);

                        if (ringHandEvents.Count >= maxSize)
                        {
                            ringHandEvents.RemoveAt(0);
                        }

                        HandEvents palmHandEvent = new HandEvents(palmPose.Position, Time.time);

                        palmHandEvents.Add(palmHandEvent);

                        if (palmHandEvents.Count >= maxSize)
                        {
                            palmHandEvents.RemoveAt(0);
                        }



                        indexPointer.transform.position  = pose.Position;
                        middlePointer.transform.position = midPose.Position;
                        ringPointer.transform.position   = pointerPose.Position;
                        palmPointer.transform.position   = palmPose.Position;



                        //Get average distance to palm of first (right)
                        float distIndexPalmR = Vector3.Distance(indexHandEvents[0].position, palmHandEvents[0].position);
                        float distMidPalmR   = Vector3.Distance(middleHandEvents[0].position, palmHandEvents[0].position);
                        float distRingPalmR  = Vector3.Distance(ringHandEvents[0].position, palmHandEvents[0].position);

                        float avgFirst = (distIndexPalmR + distMidPalmR + distRingPalmR) / 3f;

                        float avgPointFirst = (distMidPalmR + distRingPalmR) / 2f;

                        //Get average distance of palm of last (right)
                        float dist2IndexPalmR = Vector3.Distance(indexHandEvents[indexHandEvents.Count - 1].position, palmHandEvents[palmHandEvents.Count - 1].position);
                        float dist2MidPalmR   = Vector3.Distance(middleHandEvents[middleHandEvents.Count - 1].position, palmHandEvents[palmHandEvents.Count - 1].position);
                        float dist2RingPalmR  = Vector3.Distance(ringHandEvents[ringHandEvents.Count - 1].position, palmHandEvents[palmHandEvents.Count - 1].position);

                        float avgSecond      = (dist2IndexPalmR + dist2MidPalmR + dist2RingPalmR) / 3f;
                        float avgPointSecond = (dist2MidPalmR + dist2RingPalmR) / 2f;


                        indexText.text = (Mathf.Round(avgSecond * 1000f) / 1000).ToString();
                        ringText.text  = (Mathf.Round(avgFirst * 1000f) / 1000).ToString();



                        var indexRenderer  = indexPointer.GetComponent <Renderer>();
                        var middleRenderer = middlePointer.GetComponent <Renderer>();
                        var ringRenderer   = ringPointer.GetComponent <Renderer>();
                        var palmRenderer   = palmPointer.GetComponent <Renderer>();



                        //Right hand check if hand becomes a fist
                        if (avgSecond <= avgFirst / 1.7 && avgFirst >= .03)
                        {
                            float currTime = Time.time;
                            if (currTime - lastCommand > delay)
                            {
                                returnGesture = true;
                                //speechCommands.Return();
                            }
                            lastCommand = currTime;

                            //var indexRenderer = indexPointer.GetComponent<Renderer>();
                            indexRenderer.material.SetColor("_Color", Color.white);
                            middleRenderer.material.SetColor("_Color", Color.white);
                            ringRenderer.material.SetColor("_Color", Color.white);
                            palmRenderer.material.SetColor("_Color", Color.white);
                        }
                        else
                        {
                            float currTime = Time.time;
                            if (currTime - lastCommand > delay)
                            {
                                returnGesture = false;
                                //var indexRenderer = indexPointer.GetComponent<Renderer>();
                                indexRenderer.material.SetColor("_Color", Color.black);
                                middleRenderer.material.SetColor("_Color", Color.black);
                                ringRenderer.material.SetColor("_Color", Color.black);
                                palmRenderer.material.SetColor("_Color", Color.black);
                            }
                        }

                        //Check if pointing

                        if (dist2IndexPalmR >= avgPointSecond * 1.2 && distIndexPalmR >= avgPointFirst * 1.2 && avgPointSecond <= .03 && avgPointFirst <= 0.03)
                        {
                            float currTime = Time.time;
                            if (currTime - lastCommand3 > delay)
                            {
                                pointGesture = true;
                                //speechCommands.Point();
                            }
                            lastCommand = currTime;

                            //var indexRenderer = indexPointer.GetComponent<Renderer>();
                            indexRenderer.material.SetColor("_Color", Color.magenta);
                            middleRenderer.material.SetColor("_Color", Color.magenta);
                            ringRenderer.material.SetColor("_Color", Color.magenta);
                            palmRenderer.material.SetColor("_Color", Color.magenta);
                        }
                        else
                        {
                            float currTime = Time.time;
                            if (currTime - lastCommand > delay)
                            {
                                pointGesture = false;
                                //var indexRenderer = indexPointer.GetComponent<Renderer>();
                                indexRenderer.material.SetColor("_Color", Color.black);
                                middleRenderer.material.SetColor("_Color", Color.black);
                                ringRenderer.material.SetColor("_Color", Color.black);
                                palmRenderer.material.SetColor("_Color", Color.black);
                            }
                        }


                        if (pointGesture)
                        {
                            speechCommands.Point();
                        }
                        else
                        {
                            speechCommands.NotPoint();
                            if (returnGesture)
                            {
                                speechCommands.Come();
                            }
                        }
                    }
                }
            }
        }
    }