Esempio n. 1
0
 // Update is called once per frame
 private void Update()
 {
     if (Controller.GrabAction())
     {
         if (grabDecorator.HasObjectGrabbed)
         {
             grabDecorator.DetachObject();
         }
         else
         {
             grabDecorator.AttemptToGrab();
         }
     }
 }
Esempio n. 2
0
    IEnumerator GrabbingCoroutine()
    {
        _isGrabbingInProgress = true;
        var distanceBetweenBeakAndCollider = Vector3.Distance(BeakToMove.transform.position,
                                                              CollidertoGoTo.transform.position) + distanceCorrection;
        var vectorToTest = CollidertoGoTo.gameObject.transform.position;

        vectorToTest = BeakToMove.transform.InverseTransformPoint(vectorToTest);
        var positionTogoTo = vectorToTest.normalized * distanceBetweenBeakAndCollider;

        originalPosition = BeakToMove.transform.localPosition.Clone();
        while (positionTogoTo != BeakToMove.transform.localPosition)
        {
            BeakToMove.transform.localPosition = Vector3.MoveTowards(BeakToMove.transform.localPosition, positionTogoTo,
                                                                     speed * Time.deltaTime);
            yield return(null);
        }
        if (!internalGrabbing.AttemptToGrab())
        {
            _isDetachingInProgress = true;
            while (_isDetachingInProgress)
            {
                StartCoroutine(DetachingCoroutine());
                yield return(null);
            }
        }
        else
        {
            while (Vector3.Distance(BeakToMove.transform.localPosition, originalPosition) >= distanceToKeepAfterGrab)
            {
                BeakToMove.transform.localPosition = Vector3.MoveTowards(BeakToMove.transform.localPosition, originalPosition,
                                                                         speedBackwards * Time.deltaTime);
                grabbingScript.ObjectGrabbed.transform.localPosition = Vector3.MoveTowards(grabbingScript.ObjectGrabbed.transform.localPosition, originalPosition,
                                                                                           speedBackwards * Time.deltaTime);
                yield return(null);
            }

            _isGrabbingInProgress = false;
        }
    }