예제 #1
0
    private void UpdatePinchSingle(PinchDetector pinchDetector, ClosestNode closestNode, ref PinchInfo pinchInfo)
    {
        // if pinch detected, update pinch info
        if (pinchDetector.DidStartPinch)
        {
            pinchInfo = GetPinchInfo(pinchDetector, closestNode);
        }

        if (pinchInfo.node != null)
        {
            // set node as pinched when pinch starts
            if (pinchDetector.DidStartPinch)
            {
                pinchInfo.node.Pinched = true;
            }

            // update node position to match pinch movement
            if (pinchDetector.IsPinching)
            {
                transformSingleAnchor(pinchDetector, pinchInfo);
            }

            // release node when pinch ends
            if (pinchDetector.DidEndPinch)
            {
                pinchInfo.node.Pinched = false;
            }
        }
    }
예제 #2
0
 private PinchInfo GetPinchInfo(PinchDetector pinchDetector, ClosestNode closestNode)
 {
     return new PinchInfo {
         node = closestNode.curr,
         nodeInitialPosition = (closestNode.curr == null) ? Vector3.zero : closestNode.curr.gameObject.transform.position,
         pinchDetectorInitialPosition = pinchDetector.Position,
     };
 }
예제 #3
0
 private PinchInfo GetPinchInfo(PinchDetector pinchDetector, ClosestNode closestNode)
 {
     return(new PinchInfo {
         node = closestNode.curr,
         nodeInitialPosition = (closestNode.curr == null) ? Vector3.zero : closestNode.curr.gameObject.transform.position,
         pinchDetectorInitialPosition = pinchDetector.Position,
     });
 }
예제 #4
0
 private void UpdateClosestNodeSelection(ref ClosestNode closestNodeParams)
 {
     if (closestNodeParams.prev != closestNodeParams.curr)
     {
         if (closestNodeParams.prev != null)
         {
             closestNodeParams.prev.Selected = false;
         }
         if (closestNodeParams.curr != null)
         {
             closestNodeParams.curr.Selected = true;
         }
     }
 }
예제 #5
0
    private void UpdateClosestNode(PinchDetector pinchDetector, ClosestNode closestNode)
    {
        closestNode.prev = closestNode.curr;

        // get closest node to index tip
        var handModel = pinchDetector.GetComponentInParent<IHandModel>();
        if (handModel != null) {
            var index = handModel.GetLeapHand().Fingers[1];
            var indexTipPosition = index.TipPosition.ToVector3();

            var closestNodeToIndexTip = gameObject.GetComponent<Graph>().GetClosestNodeOrNull(indexTipPosition);
            const float maxDistance = 0.03f;
            closestNode.curr = Vector3.Distance(indexTipPosition, closestNodeToIndexTip.transform.position) <= maxDistance ? closestNodeToIndexTip : null;
        }
        else {
            closestNode.curr = null;
        }

        UpdateClosestNodeSelection(ref closestNode);
    }
예제 #6
0
    private void UpdateClosestNode(PinchDetector pinchDetector, ClosestNode closestNode)
    {
        closestNode.prev = closestNode.curr;

        // get closest node to index tip
        var handModel = pinchDetector.HandModel;

        if (handModel.IsTracked)
        {
            var index            = handModel.GetLeapHand().Fingers[1];
            var indexTipPosition = index.TipPosition.ToVector3();

            var         closestNodeToIndexTip = gameObject.GetComponent <Graph>().GetClosestNodeOrNull(indexTipPosition);
            const float maxDistance           = 0.03f;
            closestNode.curr = Vector3.Distance(indexTipPosition, closestNodeToIndexTip.transform.position) <= maxDistance ? closestNodeToIndexTip : null;
        }
        else
        {
            closestNode.curr = null;
        }

        UpdateClosestNodeSelection(ref closestNode);
    }
예제 #7
0
    private void UpdatePinchSingle(PinchDetector pinchDetector, ClosestNode closestNode, ref PinchInfo pinchInfo)
    {
        // if pinch detected, update pinch info
        if (pinchDetector.DidStartPinch) {
            pinchInfo = GetPinchInfo(pinchDetector, closestNode);
        }

        if (pinchInfo.node != null) {
            // set node as pinched when pinch starts
            if (pinchDetector.DidStartPinch) {
                pinchInfo.node.Pinched = true;
            }

            // update node position to match pinch movement
            if (pinchDetector.IsPinching) {
                transformSingleAnchor(pinchDetector, pinchInfo);
            }

            // release node when pinch ends
            if (pinchDetector.DidEndPinch) {
                pinchInfo.node.Pinched = false;
            }
        }
    }
예제 #8
0
 private void UpdateClosestNodeSelection(ref ClosestNode closestNodeParams)
 {
     if (closestNodeParams.prev != closestNodeParams.curr) {
         if (closestNodeParams.prev != null) {
             closestNodeParams.prev.Selected = false;
         }
         if (closestNodeParams.curr != null) {
             closestNodeParams.curr.Selected = true;
         }
     }
 }