public void PageDriveAttached(Hand hand)
        {
            isDriving          = true;
            attachedHandleType = hand.LastCollider.GetComponent <PageHandle>().handleType;
            switch (attachedHandleType)
            {
            case PageHandle.Type.Cover:
                baseProgress--;
                Book.pageMapping.value = 1f;
                SyncRigidbodyToMapping(1f);
                state = PageState.Cover;
                break;

            case PageHandle.Type.Back:
                Book.pageMapping.value = 0f;
                SyncRigidbodyToMapping(0f);
                state = PageState.Back;
                break;
            }
            Unlock();
            if (leftHandColliders == null)
            {
                leftHandColliders = hand.GetComponent <HandPhysics>().handCollider.GetComponentsInChildren <Collider>();
                SetLeftHandCollisionState(false);
            }
        }
Exemplo n.º 2
0
        protected virtual void OnDetachedFromHand(Hand hand)
        {
            attachedHandleType = PageHandle.Type.None;
            if (rotateGameObject && rotateAfterDetach)
            {
                transform.localRotation = start * Quaternion.AngleAxis(outAngle, localPlaneNormal);
            }

            if (Book.pagePhysicsController != null)
            {
                Book.pagePhysicsController.PageDriveDetached(hand.GetTrackedObjectVelocity(), Book.pageMapping.value - lastMappingValue);
            }
        }
Exemplo n.º 3
0
        // ebaender
        protected virtual void OnAttachedToHand(Hand hand)
        {
            firstComputationAfterAttached = true;
            attachedHandleType            = hand.LastCollider.GetComponent <PageHandle>().handleType;
            hand.Hide();
            if (rotateGameObject && rotateAfterDetach)
            {
                transform.localRotation = start;
            }

            if (Book.pagePhysicsController != null)
            {
                Book.pagePhysicsController.PageDriveAttached(hand);
            }
        }
Exemplo n.º 4
0
        // ebaender
        protected virtual void OnAttachedToHand(Hand hand)
        {
            firstComputationAfterAttached = true;
            attachedHandleType            = Book.coverMapping.value > 0.5f ? PageHandle.Type.Cover : PageHandle.Type.Back;
            hand.Hide();
            if (rotateGameObject && rotateAfterDetach)
            {
                transform.localRotation = start;
            }

            if (Book.coverPhysicsController != null)
            {
                Book.coverPhysicsController.DriveAttached();
            }
        }
Exemplo n.º 5
0
        // ebaender - get angle between projected transform and starting transform
        private void ComputeSimpleAngle(Hand hand)
        {
            Vector3 toTransformProjected = ComputeToTransformProjected(hand.hoverSphereTransform);
            Vector3 fromTransform        = transform.parent.localToWorldMatrix.MultiplyVector(new Vector3(-1f, 0f, 0f)).normalized;
            float   newAngle             = Vector3.SignedAngle(fromTransform, toTransformProjected, worldPlaneNormal);

            if (newAngle < 0f)
            {
                if (outAngle < 0.5f * currentCoverLimit)
                {
                    outAngle = 0f;
                }
                else
                {
                    outAngle = currentCoverLimit;
                }
            }
            else if (newAngle > currentCoverLimit)
            {
                outAngle = currentCoverLimit;
            }
            else
            {
                outAngle = newAngle;
            }

            if (firstComputationAfterAttached)
            {
                firstComputationAfterAttached = false;
                if (attachedHandleType == PageHandle.Type.Back && outAngle > 0.5f * currentCoverLimit)
                {
                    handleError = PageHandle.Type.Back;
                }
                if (attachedHandleType == PageHandle.Type.Cover && outAngle < 0.5f * currentCoverLimit)
                {
                    handleError = PageHandle.Type.Cover;
                }
            }

            if (attachedHandleType == PageHandle.Type.Back && outAngle < 0.5f * currentCoverLimit)
            {
                handleError = PageHandle.Type.None;
            }
            if (attachedHandleType == PageHandle.Type.Cover && outAngle > 0.5f * currentCoverLimit)
            {
                handleError = PageHandle.Type.None;
            }

            switch (handleError)
            {
            case PageHandle.Type.Back:
                // Debug.Log("error back");
                outAngle = 0f;
                break;

            case PageHandle.Type.Cover:
                // Debug.Log("error cover");
                outAngle = currentCoverLimit;
                break;

            default:
                // Debug.Log("no error");
                break;
            }
        }
 public void PageDriveDetached(Vector3 handVelocity, float pageMappingDelta)
 {
     isDriving          = false;
     pageTorque         = Mathf.Pow(handVelocity.magnitude, 2f) * Mathf.Sign(pageMappingDelta);
     attachedHandleType = PageHandle.Type.None;
 }