Esempio n. 1
0
    void Update()
    {
        // start Kinect interaction as needed
        if (!interactionInited)
        {
            StartInteraction();

            if (!interactionInited)
            {
                Application.Quit();
                return;
            }
        }

        // update Kinect interaction
        if (InteractionWrapper.UpdateKinectInteraction() == 0)
        {
            //int lastSkeletonTrackingID = skeletonTrackingID;
            skeletonTrackingID = InteractionWrapper.GetSkeletonTrackingID();

            if (skeletonTrackingID != 0)
            {
                InteractionWrapper.InteractionHandEventType handEvent = InteractionWrapper.InteractionHandEventType.None;
                Vector4 handPos = Vector4.zero;
                Vector4 shoulderPos = Vector4.zero;
                Vector3 screenPos = Vector3.zero;

                // process left hand
                leftHandState = InteractionWrapper.GetLeftHandState();
                handEvent = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetLeftHandEvent();
                isLeftHandPress = InteractionWrapper.GetLeftHandPressed();

                InteractionWrapper.GetLeftCursorPos(ref handPos);
                leftHandScreenPos.x = Mathf.Clamp01(handPos.x);
                leftHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);
                //leftHandScreenPos.z = Mathf.Clamp01(handPos.z);
                leftHandScreenPos.z = handPos.z;

                bool bLeftHandPrimaryNow = (leftHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0;
                bool bRightHandPrimaryNow = (rightHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0;

                if ((bLeftHandPrimaryNow != isLeftHandPrimary) || (bRightHandPrimaryNow != isRightHandPrimary))
                {
                    if (controlMouseCursor && dragInProgress)
                    {
                        MouseControl.MouseRelease();
                        dragInProgress = false;
                    }

                    lastLeftHandEvent = InteractionWrapper.InteractionHandEventType.Release;
                    lastRightHandEvent = InteractionWrapper.InteractionHandEventType.Release;
                }

                if (controlMouseCursor && (handEvent != lastLeftHandEvent))
                {
                    if (!dragInProgress && (handEvent == InteractionWrapper.InteractionHandEventType.Grip))
                    {
                        dragInProgress = true;
                        MouseControl.MouseDrag();
                    }
                    else if (dragInProgress && (handEvent == InteractionWrapper.InteractionHandEventType.Release))
                    {
                        MouseControl.MouseRelease();
                        dragInProgress = false;
                    }
                }

                leftHandEvent = handEvent;
                if (handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastLeftHandEvent = handEvent;
                }

                // if the hand is primary, set the cursor position
                if (bLeftHandPrimaryNow)
                {
                    isLeftHandPrimary = true;
                    cursorScreenPos = Vector3.Lerp(cursorScreenPos, leftHandScreenPos, smoothFactor * Time.deltaTime);

                    if (controlMouseCursor)
                    {
                        MouseControl.MouseMove(cursorScreenPos);
                    }
                }
                else
                {
                    isLeftHandPrimary = false;
                }

                // check for left hand Pull-gesture
                if (lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (!bPullLeftHandStarted)
                    {
                        if (leftHandScreenPos.z > pullWhenPressLessThan)
                        {
                            bPullLeftHandStarted = true;
                            bPullLeftHandFinished = false;
                            pullLeftHandStartedAt = Time.realtimeSinceStartup;
                        }
                    }
                }

                // check for left hand Push-gesture
                if (lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (!bPushLeftHandStarted)
                    {
                        if (leftHandScreenPos.z < pushWhenPressMoreThan)
                        {
                            bPushLeftHandStarted = true;
                            bPushLeftHandFinished = false;
                            pushLeftHandStartedAt = Time.realtimeSinceStartup;
                        }
                    }
                }

                if (lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (bPullLeftHandStarted)
                    {
                        if ((Time.realtimeSinceStartup - pullLeftHandStartedAt) <= 1.5f)
                        {
                            if (leftHandScreenPos.z <= pullWhenPressLessThan)
                            {
                                bPullLeftHandFinished = true;
                                bPullLeftHandStarted = false;
                            }
                        }
                        else
                        {
                            bPullLeftHandStarted = false;
                        }
                    }
                }
                else
                {
                    // no more hand grip
                    bPullLeftHandFinished = false;
                    bPullLeftHandStarted = false;
                }

                if (lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (bPushLeftHandStarted)
                    {
                        if ((Time.realtimeSinceStartup - pushLeftHandStartedAt) <= 1.5f)
                        {
                            if (leftHandScreenPos.z > pushWhenPressMoreThan)
                            {
                                bPushLeftHandFinished = true;
                                bPushLeftHandStarted = false;
                            }
                        }
                        else
                        {
                            bPushLeftHandStarted = false;
                        }
                    }
                }
                else
                {
                    // no more hand release
                    bPushLeftHandFinished = false;
                    bPushLeftHandStarted = false;
                }

                // process right hand
                rightHandState = InteractionWrapper.GetRightHandState();
                handEvent = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetRightHandEvent();
                isRightHandPress = InteractionWrapper.GetRightHandPressed();

                InteractionWrapper.GetRightCursorPos(ref handPos);
                rightHandScreenPos.x = Mathf.Clamp01(handPos.x);
                rightHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);
                //rightHandScreenPos.z = Mathf.Clamp01(handPos.z);
                rightHandScreenPos.z = handPos.z;

                if (controlMouseCursor && (handEvent != lastRightHandEvent))
                {
                    if (!dragInProgress && (handEvent == InteractionWrapper.InteractionHandEventType.Grip))
                    {
                        dragInProgress = true;
                        MouseControl.MouseDrag();
                    }
                    else if (dragInProgress && (handEvent == InteractionWrapper.InteractionHandEventType.Release))
                    {
                        MouseControl.MouseRelease();
                        dragInProgress = false;
                    }
                }

                rightHandEvent = handEvent;
                if (handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastRightHandEvent = handEvent;
                }

                // if the hand is primary, set the cursor position
                if (bRightHandPrimaryNow)
                {
                    isRightHandPrimary = true;
                    cursorScreenPos = Vector3.Lerp(cursorScreenPos, rightHandScreenPos, smoothFactor * Time.deltaTime);

                    if (controlMouseCursor)
                    {
                        MouseControl.MouseMove(cursorScreenPos);
                    }
                }
                else
                {
                    isRightHandPrimary = false;
                }

                // check for right hand Pull-gesture
                if (lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (!bPullRightHandStarted)
                    {
                        if (rightHandScreenPos.z > pullWhenPressLessThan)
                        {
                            bPullRightHandStarted = true;
                            bPullRightHandFinished = false;
                            pullRightHandStartedAt = Time.realtimeSinceStartup;
                        }
                    }
                }

                // check for right hand Push-gesture
                if (lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (!bPushRightHandStarted)
                    {
                        if (rightHandScreenPos.z < pushWhenPressMoreThan)
                        {
                            bPushRightHandStarted = true;
                            bPushRightHandFinished = false;
                            pushRightHandStartedAt = Time.realtimeSinceStartup;
                        }
                    }
                }

                if (lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (bPullRightHandStarted)
                    {
                        if ((Time.realtimeSinceStartup - pullRightHandStartedAt) <= 1.5f)
                        {
                            if (rightHandScreenPos.z <= pullWhenPressLessThan)
                            {
                                bPullRightHandFinished = true;
                                bPullRightHandStarted = false;
                            }
                        }
                        else
                        {
                            bPullRightHandStarted = false;
                        }
                    }
                }
                else
                {
                    // no more hand grip
                    bPullRightHandFinished = false;
                    bPullRightHandStarted = false;
                }

                if (lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (bPushRightHandStarted)
                    {
                        if ((Time.realtimeSinceStartup - pushRightHandStartedAt) <= 1.5f)
                        {
                            if (rightHandScreenPos.z > pushWhenPressMoreThan)
                            {
                                bPushRightHandFinished = true;
                                bPushRightHandStarted = false;
                            }
                        }
                        else
                        {
                            bPushRightHandStarted = false;
                        }
                    }
                }
                else
                {
                    // no more hand release
                    bPushRightHandFinished = false;
                    bPushRightHandStarted = false;
                }

            }
            else
            {
                leftHandState = 0;
                rightHandState = 0;

                isLeftHandPrimary = false;
                isRightHandPrimary = false;

                isLeftHandPress = false;
                isRightHandPress = false;

                leftHandEvent = InteractionWrapper.InteractionHandEventType.None;
                rightHandEvent = InteractionWrapper.InteractionHandEventType.None;

                lastLeftHandEvent = InteractionWrapper.InteractionHandEventType.Release;
                lastRightHandEvent = InteractionWrapper.InteractionHandEventType.Release;

                if (controlMouseCursor && dragInProgress)
                {
                    MouseControl.MouseRelease();
                    dragInProgress = false;
                }
            }
        }
    }
Esempio n. 2
0
    void Update()
    {
        // start Kinect interaction as needed
        if (!interactionInited)
        {
            StartInteraction();

            if (!interactionInited)
            {
                Application.Quit();
                return;
            }
        }

        // update Kinect interaction
        if (InteractionWrapper.UpdateKinectInteraction() == 0)
        {
            //int lastSkeletonTrackingID = skeletonTrackingID;
            skeletonTrackingID = InteractionWrapper.GetSkeletonTrackingID();

            if (skeletonTrackingID != 0)
            {
                InteractionWrapper.InteractionHandEventType handEvent = InteractionWrapper.InteractionHandEventType.None;
                Vector4 handPos = Vector4.zero;
                //Vector4 shoulderPos = Vector4.zero;
                //Vector3 screenPos = Vector3.zero;

                // process left hand
                leftHandState   = InteractionWrapper.GetLeftHandState();
                handEvent       = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetLeftHandEvent();
                isLeftHandPress = InteractionWrapper.GetLeftHandPressed();

                InteractionWrapper.GetLeftCursorPos(ref handPos);
                leftHandScreenPos.x = Mathf.Clamp01(handPos.x);
                leftHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);
                //leftHandScreenPos.z = Mathf.Clamp01(handPos.z);
                leftHandScreenPos.z = handPos.z;

                bool bLeftHandPrimaryNow  = (leftHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0;
                bool bRightHandPrimaryNow = (rightHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0;

                if ((bLeftHandPrimaryNow != isLeftHandPrimary) || (bRightHandPrimaryNow != isRightHandPrimary))
                {
                    if (controlMouseCursor && dragInProgress)
                    {
                        MouseControl.MouseRelease();
                        dragInProgress = false;
                    }

                    lastLeftHandEvent  = InteractionWrapper.InteractionHandEventType.Release;
                    lastRightHandEvent = InteractionWrapper.InteractionHandEventType.Release;
                }

                if (controlMouseCursor && (handEvent != lastLeftHandEvent))
                {
                    if (controlMouseDrag && !dragInProgress && (handEvent == InteractionWrapper.InteractionHandEventType.Grip))
                    {
                        dragInProgress = true;
                        MouseControl.MouseDrag();
                    }
                    else if (dragInProgress && (handEvent == InteractionWrapper.InteractionHandEventType.Release))
                    {
                        MouseControl.MouseRelease();
                        dragInProgress = false;
                    }
                }

                leftHandEvent = handEvent;
                if (handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastLeftHandEvent = handEvent;
                }

                // if the hand is primary, set the cursor position
                if (bLeftHandPrimaryNow)
                {
                    isLeftHandPrimary = true;

                    // check for left hand click
                    float fClickDist = (leftHandScreenPos - lastLeftHandPos).magnitude;
                    if (!dragInProgress && fClickDist < InteractionWrapper.Constants.ClickMaxDistance)
                    {
                        if ((Time.realtimeSinceStartup - lastLeftHandTime) >= InteractionWrapper.Constants.ClickStayDuration)
                        {
                            if (!isLeftHandClick)
                            {
                                isLeftHandClick       = true;
                                leftHandClickProgress = 1f;

                                if (controlMouseCursor)
                                {
                                    MouseControl.MouseClick();

                                    isLeftHandClick       = false;
                                    leftHandClickProgress = 0f;
                                    lastLeftHandPos       = Vector3.zero;
                                    lastLeftHandTime      = Time.realtimeSinceStartup;
                                }
                            }
                        }
                        else
                        {
                            leftHandClickProgress = (Time.realtimeSinceStartup - lastLeftHandTime) / InteractionWrapper.Constants.ClickStayDuration;
                        }
                    }
                    else
                    {
                        isLeftHandClick       = false;
                        leftHandClickProgress = 0f;
                        lastLeftHandPos       = leftHandScreenPos;
                        lastLeftHandTime      = Time.realtimeSinceStartup;
                    }

                    if ((leftHandClickProgress < 0.7f) /**&& !isLeftHandPress*/)
                    {
                        cursorScreenPos = Vector3.Lerp(cursorScreenPos, leftHandScreenPos, smoothFactor * Time.deltaTime);
                    }
                    else
                    {
                        leftHandScreenPos = cursorScreenPos;
                    }

                    if (controlMouseCursor)
                    {
                        MouseControl.MouseMove(cursorScreenPos, debugText);
                    }
                }
                else
                {
                    isLeftHandPrimary = false;
                }

//				// check for left hand Pull-gesture
//				if(lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
//				{
//					if(!bPullLeftHandStarted)
//					{
//						if(leftHandScreenPos.z > pushWhenPressMoreThan)
//						{
//							bPullLeftHandStarted = true;
//							bPullLeftHandFinished = false;
//							pullLeftHandStartedAt = Time.realtimeSinceStartup;
//						}
//					}
//				}

                // check for left hand Push-gesture
                if (lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (!bPushLeftHandStarted)
                    {
                        if (!isLeftHandPress)
                        {
                            bPushLeftHandStarted  = true;
                            bPushLeftHandFinished = false;
                            pushLeftHandStartedAt = Time.realtimeSinceStartup;
                        }
                    }
                }

//				if(lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
//				{
//					if(bPullLeftHandStarted)
//					{
//						if((Time.realtimeSinceStartup - pullLeftHandStartedAt) <= 1.5f)
//						{
//							if(leftHandScreenPos.z <= pullWhenPressLessThan)
//							{
//								bPullLeftHandFinished = true;
//								bPullLeftHandStarted = false;
//							}
//						}
//						else
//						{
//							bPullLeftHandStarted = false;
//						}
//					}
//				}
//				else
//				{
//					// no more hand grip
//					bPullLeftHandFinished = false;
//					bPullLeftHandStarted = false;
//				}

                if (lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (bPushLeftHandStarted)
                    {
                        if ((Time.realtimeSinceStartup - pushLeftHandStartedAt) <= 1.5f)
                        {
                            if (isLeftHandPress)
                            {
                                bPushLeftHandFinished = true;
                                bPushLeftHandStarted  = false;
                            }
                        }
                        else
                        {
                            bPushLeftHandStarted = false;
                        }
                    }
                }
                else
                {
                    // no more hand release
                    bPushLeftHandFinished = false;
                    bPushLeftHandStarted  = false;
                }

                // process right hand
                rightHandState   = InteractionWrapper.GetRightHandState();
                handEvent        = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetRightHandEvent();
                isRightHandPress = InteractionWrapper.GetRightHandPressed();

                InteractionWrapper.GetRightCursorPos(ref handPos);
                rightHandScreenPos.x = Mathf.Clamp01(handPos.x);
                rightHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);
                //rightHandScreenPos.z = Mathf.Clamp01(handPos.z);
                rightHandScreenPos.z = handPos.z;

                if (controlMouseCursor && (handEvent != lastRightHandEvent))
                {
                    if (controlMouseDrag && !dragInProgress && (handEvent == InteractionWrapper.InteractionHandEventType.Grip))
                    {
                        dragInProgress = true;
                        MouseControl.MouseDrag();
                    }
                    else if (dragInProgress && (handEvent == InteractionWrapper.InteractionHandEventType.Release))
                    {
                        MouseControl.MouseRelease();
                        dragInProgress = false;
                    }
                }

                rightHandEvent = handEvent;
                if (handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastRightHandEvent = handEvent;
                }

                // if the hand is primary, set the cursor position
                if (bRightHandPrimaryNow)
                {
                    isRightHandPrimary = true;

                    // check for right hand click
                    float fClickDist = (rightHandScreenPos - lastRightHandPos).magnitude;
                    if (!dragInProgress && fClickDist < InteractionWrapper.Constants.ClickMaxDistance)
                    {
                        if ((Time.realtimeSinceStartup - lastRightHandTime) >= InteractionWrapper.Constants.ClickStayDuration)
                        {
                            if (!isRightHandClick)
                            {
                                isRightHandClick       = true;
                                rightHandClickProgress = 1f;

                                if (controlMouseCursor)
                                {
                                    MouseControl.MouseClick();

                                    isRightHandClick       = false;
                                    rightHandClickProgress = 0f;
                                    lastRightHandPos       = Vector3.zero;
                                    lastRightHandTime      = Time.realtimeSinceStartup;
                                }
                            }
                        }
                        else
                        {
                            rightHandClickProgress = (Time.realtimeSinceStartup - lastRightHandTime) / InteractionWrapper.Constants.ClickStayDuration;
                        }
                    }
                    else
                    {
                        isRightHandClick       = false;
                        rightHandClickProgress = 0f;
                        lastRightHandPos       = rightHandScreenPos;
                        lastRightHandTime      = Time.realtimeSinceStartup;
                    }

                    if ((rightHandClickProgress < 0.7f) /**&& !isRightHandPress*/)
                    {
                        cursorScreenPos = Vector3.Lerp(cursorScreenPos, rightHandScreenPos, smoothFactor * Time.deltaTime);
                    }
                    else
                    {
                        rightHandScreenPos = cursorScreenPos;
                    }

                    if (controlMouseCursor)
                    {
                        MouseControl.MouseMove(cursorScreenPos, debugText);
                    }
                }
                else
                {
                    isRightHandPrimary = false;
                }

//				// check for right hand Pull-gesture
//				if(lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
//				{
//					if(!bPullRightHandStarted)
//					{
//						if(rightHandScreenPos.z > pushWhenPressMoreThan)
//						{
//							bPullRightHandStarted = true;
//							bPullRightHandFinished = false;
//							pullRightHandStartedAt = Time.realtimeSinceStartup;
//						}
//					}
//				}

                // check for right hand Push-gesture
                if (lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (!bPushRightHandStarted)
                    {
                        if (!isRightHandPress)
                        {
                            bPushRightHandStarted  = true;
                            bPushRightHandFinished = false;
                            pushRightHandStartedAt = Time.realtimeSinceStartup;
                        }
                    }
                }

//				if(lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
//				{
//					if(bPullRightHandStarted)
//					{
//						if((Time.realtimeSinceStartup - pullRightHandStartedAt) <= 1.5f)
//						{
//							if(rightHandScreenPos.z <= pullWhenPressLessThan)
//							{
//								bPullRightHandFinished = true;
//								bPullRightHandStarted = false;
//							}
//						}
//						else
//						{
//							bPullRightHandStarted = false;
//						}
//					}
//				}
//				else
//				{
//					// no more hand grip
//					bPullRightHandFinished = false;
//					bPullRightHandStarted = false;
//				}

                if (lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if (bPushRightHandStarted)
                    {
                        if ((Time.realtimeSinceStartup - pushRightHandStartedAt) <= 1.5f)
                        {
                            if (isRightHandPress)
                            {
                                bPushRightHandFinished = true;
                                bPushRightHandStarted  = false;
                            }
                        }
                        else
                        {
                            bPushRightHandStarted = false;
                        }
                    }
                }
                else
                {
                    // no more hand grip
                    bPushRightHandFinished = false;
                    bPushRightHandStarted  = false;
                }
            }
            else
            {
                leftHandState  = 0;
                rightHandState = 0;

                isLeftHandPrimary  = false;
                isRightHandPrimary = false;

                isLeftHandPress  = false;
                isRightHandPress = false;

                leftHandEvent  = InteractionWrapper.InteractionHandEventType.None;
                rightHandEvent = InteractionWrapper.InteractionHandEventType.None;

                lastLeftHandEvent  = InteractionWrapper.InteractionHandEventType.Release;
                lastRightHandEvent = InteractionWrapper.InteractionHandEventType.Release;

                if (controlMouseCursor && dragInProgress)
                {
                    MouseControl.MouseRelease();
                    dragInProgress = false;
                }
            }
        }
    }
Esempio n. 3
0
    void Update()
    {
        // start Kinect interaction as needed
        if (!interactionInited)
        {
            StartInteraction();

            if (!interactionInited)
            {
                Application.Quit();
                return;
            }
        }

        // update Kinect interaction
        if (InteractionWrapper.UpdateKinectInteraction() == 0)
        {
            //int lastSkeletonTrackingID = skeletonTrackingID;
            skeletonTrackingID = (int)InteractionWrapper.GetSkeletonTrackingID();

            if (skeletonTrackingID != 0)
            {
                InteractionWrapper.InteractionHandEventType handEvent = InteractionWrapper.InteractionHandEventType.None;
                Vector4 handPos     = Vector4.zero;
                Vector4 shoulderPos = Vector4.zero;
                Vector3 screenPos   = Vector3.zero;

                // process left hand
                leftHandState = InteractionWrapper.GetLeftHandState();
                handEvent     = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetLeftHandEvent();

//				InteractionWrapper.GetLeftHandPos(ref handPos);
//				Vector3 handWorldPos = kinectToWorld.MultiplyPoint3x4(handPos);
//
//				InteractionWrapper.GetLeftShoulderPos(ref shoulderPos);
//				Vector3 shoulderWorldPos = kinectToWorld.MultiplyPoint3x4(shoulderPos);
//
//				Vector3 shoulderToHand =  handWorldPos - shoulderWorldPos;
//				if(leftHandScreenMag == 0f || skeletonTrackingID != lastSkeletonTrackingID)
//				{
//					leftHandScreenMag = shoulderToHand.magnitude;
//				}
//
//				if(leftHandScreenMag > 0f)
//				{
//					screenPos.x = Mathf.Clamp01((leftHandScreenMag / 2 + shoulderToHand.x) / leftHandScreenMag);
//					screenPos.y = Mathf.Clamp01((leftHandScreenMag / 2 + shoulderToHand.y) / leftHandScreenMag);
//					leftHandScreenPos = screenPos;
//				}

                InteractionWrapper.GetLeftCursorPos(ref handPos);
                leftHandScreenPos.x = Mathf.Clamp01(handPos.x);
                leftHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);

                leftHandEvent = handEvent;
                if (handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastLeftHandEvent = handEvent;
                }

                if ((leftHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0)
                {
                    cursorScreenPos = leftHandScreenPos;
                }

                // process right hand
                rightHandState = InteractionWrapper.GetRightHandState();
                handEvent      = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetRightHandEvent();

//				InteractionWrapper.GetRightHandPos(ref handPos);
//				handWorldPos = kinectToWorld.MultiplyPoint3x4(handPos);
//
//				InteractionWrapper.GetRightShoulderPos(ref shoulderPos);
//				shoulderWorldPos = kinectToWorld.MultiplyPoint3x4(shoulderPos);
//
//				shoulderToHand =  handWorldPos - shoulderWorldPos;
//				if(rightHandScreenMag == 0f || skeletonTrackingID != lastSkeletonTrackingID)
//				{
//					rightHandScreenMag = shoulderToHand.magnitude;
//				}
//
//				if(rightHandScreenMag > 0f)
//				{
//					screenPos.x = Mathf.Clamp01((rightHandScreenMag / 2 + shoulderToHand.x) / rightHandScreenMag);
//					screenPos.y = Mathf.Clamp01((rightHandScreenMag / 2 + shoulderToHand.y) / rightHandScreenMag);
//					rightHandScreenPos = screenPos;
//				}

                InteractionWrapper.GetRightCursorPos(ref handPos);
                rightHandScreenPos.x = Mathf.Clamp01(handPos.x);
                rightHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);

                rightHandEvent = handEvent;
                if (handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastRightHandEvent = handEvent;
                }

                if ((rightHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0)
                {
                    cursorScreenPos = rightHandScreenPos;
                }
            }
            else
            {
                leftHandState  = 0;
                rightHandState = 0;

                leftHandEvent  = lastLeftHandEvent = InteractionWrapper.InteractionHandEventType.None;
                rightHandEvent = lastRightHandEvent = InteractionWrapper.InteractionHandEventType.None;
            }
        }
    }
    void Update()
    {
        // start Kinect interaction as needed
        if(!interactionInited)
        {
            StartInteraction();

            if(!interactionInited)
            {
                Application.Quit();
                return;
            }
        }

        // update Kinect interaction
        if(InteractionWrapper.UpdateKinectInteraction() == 0)
        {
            int lastSkeletonTrackingID = skeletonTrackingID;
            skeletonTrackingID = (int)InteractionWrapper.GetSkeletonTrackingID();

            if(skeletonTrackingID != 0)
            {
                InteractionWrapper.InteractionHandEventType handEvent = InteractionWrapper.InteractionHandEventType.None;
                Vector4 handPos = Vector4.zero;
                Vector4 shoulderPos = Vector4.zero;
                Vector3 screenPos = Vector3.zero;

                // process left hand
                leftHandState = InteractionWrapper.GetLeftHandState();
                handEvent = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetLeftHandEvent();

                InteractionWrapper.GetLeftCursorPos(ref handPos);
                leftHandScreenPos.x = Mathf.Clamp01(handPos.x);
                leftHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);
                //leftHandScreenPos.z = Mathf.Clamp01(handPos.z);
                leftHandScreenPos.z = handPos.z;

                leftHandEvent = handEvent;
                if(handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastLeftHandEvent = handEvent;
                }

                // if the hand is primary, set the cursor position
                if((leftHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0)
                {
                    cursorScreenPos = leftHandScreenPos;
                }

                // check for right hand Pull-gesture
                if(lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if(!bPullLeftHandStarted)
                    {
                        if(leftHandScreenPos.z > 0.5f)
                        {
                            bPullLeftHandStarted = true;
                            pullLeftHandPos = leftHandScreenPos;
                            pullLeftHandStartedAt = Time.realtimeSinceStartup;
                        }
                    }
                }

                if(lastLeftHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if(bPullLeftHandStarted)
                    {
                        if((Time.realtimeSinceStartup - pullLeftHandStartedAt) <= pullTimeoutSeconds)
                        {
                            if(leftHandScreenPos.z <= pullWhenPressLessThan)
                            {
                                bPullLeftHandFinished = true;
                                bPullLeftHandStarted = false;
                            }
                        }
                        else
                        {
                            bPullLeftHandStarted = false;
                        }
                    }
                }
                else
                {
                    // grip released
                    bPullLeftHandFinished = false;
                    bPullLeftHandStarted = false;
                }

                // process right hand
                rightHandState = InteractionWrapper.GetRightHandState();
                handEvent = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetRightHandEvent();

                InteractionWrapper.GetRightCursorPos(ref handPos);
                rightHandScreenPos.x = Mathf.Clamp01(handPos.x);
                rightHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);
                //rightHandScreenPos.z = Mathf.Clamp01(handPos.z);
                rightHandScreenPos.z = handPos.z;

                rightHandEvent = handEvent;
                if(handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastRightHandEvent = handEvent;
                }

                // if the hand is primary, set the cursor position
                if((rightHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0)
                {
                    cursorScreenPos = rightHandScreenPos;
                }

                // check for right hand Pull-gesture
                if(lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if(!bPullRightHandStarted)
                    {
                        if(rightHandScreenPos.z > 0.5f)
                        {
                            bPullRightHandStarted = true;
                            pullRightHandPos = rightHandScreenPos;
                            pullRightHandStartedAt = Time.realtimeSinceStartup;
                        }
                    }
                }

                if(lastRightHandEvent == InteractionWrapper.InteractionHandEventType.Grip)
                {
                    if(bPullRightHandStarted)
                    {
                        if((Time.realtimeSinceStartup - pullRightHandStartedAt) <= pullTimeoutSeconds)
                        {
                            if(rightHandScreenPos.z <= pullWhenPressLessThan)
                            {
                                bPullRightHandFinished = true;
                                bPullRightHandStarted = false;
                            }
                        }
                        else
                        {
                            bPullRightHandStarted = false;
                        }
                    }
                }
                else
                {
                    // grip released
                    bPullRightHandFinished = false;
                    bPullRightHandStarted = false;
                }

            }
            else
            {
                leftHandState = 0;
                rightHandState = 0;

                leftHandEvent = lastLeftHandEvent = InteractionWrapper.InteractionHandEventType.None;
                rightHandEvent = lastRightHandEvent = InteractionWrapper.InteractionHandEventType.None;
            }
        }
    }
    void Update()
    {
        // start Kinect interaction as needed
        if(!interactionInited)
        {
            StartInteraction();

            if(!interactionInited)
            {
                Application.Quit();
                return;
            }
        }

        // update Kinect interaction
        if(InteractionWrapper.UpdateKinectInteraction() == 0)
        {
            int lastSkeletonTrackingID = skeletonTrackingID;
            skeletonTrackingID = (int)InteractionWrapper.GetSkeletonTrackingID();

            if(skeletonTrackingID != 0)
            {
                InteractionWrapper.InteractionHandEventType handEvent = InteractionWrapper.InteractionHandEventType.None;
                Vector4 handPos = Vector4.zero;
                Vector4 shoulderPos = Vector4.zero;
                Vector3 screenPos = Vector3.zero;

                // process left hand
                leftHandState = InteractionWrapper.GetLeftHandState();
                handEvent = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetLeftHandEvent();

        //				InteractionWrapper.GetLeftHandPos(ref handPos);
        //				Vector3 handWorldPos = kinectToWorld.MultiplyPoint3x4(handPos);
        //
        //				InteractionWrapper.GetLeftShoulderPos(ref shoulderPos);
        //				Vector3 shoulderWorldPos = kinectToWorld.MultiplyPoint3x4(shoulderPos);
        //
        //				Vector3 shoulderToHand =  handWorldPos - shoulderWorldPos;
        //				if(leftHandScreenMag == 0f || skeletonTrackingID != lastSkeletonTrackingID)
        //				{
        //					leftHandScreenMag = shoulderToHand.magnitude;
        //				}
        //
        //				if(leftHandScreenMag > 0f)
        //				{
        //					screenPos.x = Mathf.Clamp01((leftHandScreenMag / 2 + shoulderToHand.x) / leftHandScreenMag);
        //					screenPos.y = Mathf.Clamp01((leftHandScreenMag / 2 + shoulderToHand.y) / leftHandScreenMag);
        //					leftHandScreenPos = screenPos;
        //				}

                InteractionWrapper.GetLeftCursorPos(ref handPos);
                leftHandScreenPos.x = Mathf.Clamp01(handPos.x);
                leftHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);
                leftHandScreenPos.z = Mathf.Clamp01(handPos.z);

                leftHandEvent = handEvent;
                if(handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastLeftHandEvent = handEvent;
                }

                if((leftHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0)
                {
                    cursorScreenPos = leftHandScreenPos;
                }

                // process right hand
                rightHandState = InteractionWrapper.GetRightHandState();
                handEvent = (InteractionWrapper.InteractionHandEventType)InteractionWrapper.GetRightHandEvent();

        //				InteractionWrapper.GetRightHandPos(ref handPos);
        //				handWorldPos = kinectToWorld.MultiplyPoint3x4(handPos);
        //
        //				InteractionWrapper.GetRightShoulderPos(ref shoulderPos);
        //				shoulderWorldPos = kinectToWorld.MultiplyPoint3x4(shoulderPos);
        //
        //				shoulderToHand =  handWorldPos - shoulderWorldPos;
        //				if(rightHandScreenMag == 0f || skeletonTrackingID != lastSkeletonTrackingID)
        //				{
        //					rightHandScreenMag = shoulderToHand.magnitude;
        //				}
        //
        //				if(rightHandScreenMag > 0f)
        //				{
        //					screenPos.x = Mathf.Clamp01((rightHandScreenMag / 2 + shoulderToHand.x) / rightHandScreenMag);
        //					screenPos.y = Mathf.Clamp01((rightHandScreenMag / 2 + shoulderToHand.y) / rightHandScreenMag);
        //					rightHandScreenPos = screenPos;
        //				}

                InteractionWrapper.GetRightCursorPos(ref handPos);
                rightHandScreenPos.x = Mathf.Clamp01(handPos.x);
                rightHandScreenPos.y = 1.0f - Mathf.Clamp01(handPos.y);
                rightHandScreenPos.z = Mathf.Clamp01(handPos.z);

                rightHandEvent = handEvent;
                if(handEvent != InteractionWrapper.InteractionHandEventType.None)
                {
                    lastRightHandEvent = handEvent;
                }

                if((rightHandState & (uint)InteractionWrapper.NuiHandpointerState.PrimaryForUser) != 0)
                {
                    cursorScreenPos = rightHandScreenPos;
                }

            }
            else
            {
                leftHandState = 0;
                rightHandState = 0;

                leftHandEvent = lastLeftHandEvent = InteractionWrapper.InteractionHandEventType.None;
                rightHandEvent = lastRightHandEvent = InteractionWrapper.InteractionHandEventType.None;
            }
        }
    }