Esempio n. 1
0
        /// <summary>
        /// Starts dragging the object.
        /// </summary>
        public void StartDragging()
        {
            if (!IsDraggingEnabled)
            {
                return;
            }

            if (isDragging)
            {
                return;
            }

            // Add self as a modal input handler, to get all inputs during the manipulation
            InputManager.Instance.PushModalInputHandler(gameObject);

            isDragging = true;
            //GazeCursor.Instance.SetState(GazeCursor.State.Move);
            //GazeCursor.Instance.SetTargetObject(HostTransform);

            Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;
            Vector3 handPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

            //Debug.Log("Hand Position " + handPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            handRefDistance = Vector3.Magnitude(handPosition - pivotPosition);
            objRefDistance  = Vector3.Magnitude(gazeHitPosition - pivotPosition);

            Vector3 objForward = HostTransform.forward;
            Vector3 objUp      = HostTransform.up;

            // Store where the object was grabbed from
            objRefGrabPoint = mainCamera.transform.InverseTransformDirection(HostTransform.position - gazeHitPosition);

            Vector3 objDirection  = Vector3.Normalize(gazeHitPosition - pivotPosition);
            Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition);

            objForward    = mainCamera.transform.InverseTransformDirection(objForward);    // in camera space
            objUp         = mainCamera.transform.InverseTransformDirection(objUp);         // in camera space
            objDirection  = mainCamera.transform.InverseTransformDirection(objDirection);  // in camera space
            handDirection = mainCamera.transform.InverseTransformDirection(handDirection); // in camera space

            objRefForward = objForward;
            objRefUp      = objUp;

            // Store the initial offset between the hand and the object, so that we can consider it when dragging
            gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection);
            draggingPosition  = gazeHitPosition;

            StartedDragging.RaiseEvent();

            //hide some objects while dragging
            for (int i = 0; i < objectsToHide.Length; i++)
            {
                objectsToHide[i].SetActive(false); //or renderer instead?
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Starts dragging the object.
        /// </summary>
        public void StartDragging()
        {
            if (isDragging)
            {
                return;
            }

            // Add self as a modal input handler, to get all inputs during the manipulation
            InputManager.Instance.PushModalInputHandler(gameObject);

            isDragging = true;
            //GazeCursor.Instance.SetState(GazeCursor.State.Move);
            //GazeCursor.Instance.SetTargetObject(HostTransform);

            // Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;
            currentInputSource.TryGetPosition(currentInputSourceId, out startHandPosition);
            handPosition = startHandPosition;

            // Spawn Pokeball
            pokeballInstance = Instantiate(throwObjectPrefab, startHandPosition, Camera.main.transform.rotation);
            pokeballInstance.GetComponent <Collider>().enabled = false;
            aiming = true;

            //draggingPosition = gazeHitPosition;

            StartedDragging.RaiseEvent();
        }
        /// <summary>
        /// Uniform code for different types of manipulation complete (stopped, source lost, etc..)
        /// </summary>
        private void HandleRelease(bool lost)
        {
            mTempInputSource = null;

            Vector3 handPosition;

            mCurrentInputSource.TryGetPosition(mCurrentInputSourceId, out handPosition);

            mCurrentHandPosition = handPosition;
            Control.ManipulationUpdate(
                mStartHandPosition,
                mCurrentHandPosition,
                mStartHeadPosition,
                mStartHeadRay,
                lost ? GestureManipulationState.Lost : GestureManipulationState.None);

            InputManager.Instance.ClearModalInputStack();

            if (HasGaze)
            {
                base.OnInputUp(null);
            }
            else
            {
                base.OnInputUp(null);
                base.OnFocusExit();
            }

            mCurrentInputSource = null;

            HandleCursor(false);
        }
Esempio n. 4
0
    private void StartTransform()
    {
        InputManager.Instance.PushModalInputHandler(gameObject);
        isTransforming = true;

        Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;

        Vector3 handPosition;

        currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

        Vector3 pivotPosition = GetHandPivotPosition();

        handRefDistance = Vector3.Magnitude(handPosition - pivotPosition);
        objRefDistance  = Vector3.Magnitude(gazeHitPosition - pivotPosition);

        objRefGrabPoint = mainCamera.transform.InverseTransformDirection(HostTransform.position - gazeHitPosition);

        Vector3 objForward    = HostTransform.forward;
        Vector3 objDirection  = Vector3.Normalize(gazeHitPosition - pivotPosition);
        Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition);

        objForward    = mainCamera.transform.InverseTransformDirection(objForward);
        objDirection  = mainCamera.transform.InverseTransformDirection(objDirection);
        handDirection = mainCamera.transform.InverseTransformDirection(handDirection);

        objRefForward = objForward;

        gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection);
        draggingPosition  = gazeHitPosition;

        StartedTransformation.RaiseEvent();
    }
Esempio n. 5
0
        /// <summary>
        /// Starts dragging the object.
        /// </summary>
        private void StartDragging()
        {
            if (isDragging)
            {
                return;
            }

            StopPlacingWithGaze();

            isDragging = true;

            Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;

            Vector3 handPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            Vector3 objDirection  = Vector3.Normalize(gazeHitPosition - pivotPosition);
            Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition);

            objDirection  = Camera.main.transform.InverseTransformDirection(objDirection);
            handDirection = Camera.main.transform.InverseTransformDirection(handDirection);

            // Store the initial offset between the hand and the object, so that we can consider it when dragging.
            gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection);

            StartedDragging.RaiseEvent();
        }
Esempio n. 6
0
        public void StartDragging()
        {
            if (!IsDraggingEnable)
            {
                return;
            }
            if (isDragging)
            {
                return;
            }

            InputManager.Instance.PushModalInputHandler(gameObject);
            isDragging = true;

            Vector3 targetPosition = target.transform.position;

            Vector3 handPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            handRefDistance = Vector3.Magnitude(handPosition - pivotPosition);
            objRefDistance  = Vector3.Magnitude(targetPosition - pivotPosition);


            Vector3 objDirection  = Vector3.Normalize(targetPosition - pivotPosition);
            Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition);

            objDirection  = mainCamera.transform.InverseTransformDirection(objDirection);
            handDirection = mainCamera.transform.InverseTransformDirection(handDirection);

            gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection);
            draggingPosition  = targetPosition;
        }
Esempio n. 7
0
        /// <summary>
        /// Starts dragging the object.
        /// </summary>
        public void StartDragging()
        {
            if (!IsDraggingEnabled)
            {
                return;
            }

            if (isDragging)
            {
                return;
            }

            if (!gameObject.GetComponent <Rigidbody>())
            {
                gameObject.AddComponent <Rigidbody>();
                gameObject.GetComponent <Rigidbody>().mass = 0.5f;
            }

            gameObject.GetComponent <Rigidbody>().useGravity = false;

            // Add self as a modal input handler, to get all inputs during the manipulation
            InputManager.Instance.PushModalInputHandler(gameObject);

            isDragging = true;
            //GazeCursor.Instance.SetState(GazeCursor.State.Move);
            //GazeCursor.Instance.SetTargetObject(HostTransform);

            Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;
            Vector3 handPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            handRefDistance = Vector3.Magnitude(handPosition - pivotPosition);
            objRefDistance  = Vector3.Magnitude(gazeHitPosition - pivotPosition);

            Vector3 objForward = HostTransform.forward;
            Vector3 objUp      = HostTransform.up;

            // Store where the object was grabbed from
            objRefGrabPoint = mainCamera.transform.InverseTransformDirection(HostTransform.position - gazeHitPosition);

            Vector3 objDirection  = Vector3.Normalize(gazeHitPosition - pivotPosition);
            Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition);

            objForward    = mainCamera.transform.InverseTransformDirection(objForward);    // in camera space
            objUp         = mainCamera.transform.InverseTransformDirection(objUp);         // in camera space
            objDirection  = mainCamera.transform.InverseTransformDirection(objDirection);  // in camera space
            handDirection = mainCamera.transform.InverseTransformDirection(handDirection); // in camera space

            objRefForward = objForward;
            objRefUp      = objUp;

            // Store the initial offset between the hand and the object, so that we can consider it when dragging
            gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection);
            draggingPosition  = gazeHitPosition;

            StartedDragging.RaiseEvent();
        }
Esempio n. 8
0
        public void StartDragging()
        {
            if (!IsDraggingEnable)
            {
                return;
            }
            if (isDragging)
            {
                return;
            }

            InputManager.Instance.PushModalInputHandler(gameObject);
            isDragging = true;

            currentInputSource.TryGetPosition(currentInputSourceId, out startHandPosition);

            scaleAxisVect = transform.position - tc.transform.position;
            scaleAxisVect.Normalize();

            targetBaseScale = target.transform.localScale;

            startTransformControllerPosition = tc.transform.position;
            startDistance          = Vector3.Distance(startTransformControllerPosition, transform.position);
            startTargetPosition    = target.transform.position;
            startDiffPivotToCenter = startTargetPosition - startTransformControllerPosition;
        }
Esempio n. 9
0
    /// <summary>
    /// Starts dragging the object.
    /// </summary>
    public void StartRotating()
    {
        if (!IsRotatingEnabled)
        {
            return;
        }

        if (isRotating)
        {
            return;
        }

        // Add self as a modal input handler, to get all inputs during the manipulation
        InputManager.Instance.PushModalInputHandler(gameObject);

        isRotating = true;

        Vector3 handPosition;

        currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

        // Store the initial offset between the hand and the object, so that we can consider it when dragging
        startRotation     = HostTransform.rotation;
        startHandPosition = handPosition;
        startDir          = Vector3.Normalize(HostTransform.position - handPosition);
        StartedRotating.RaiseEvent();
    }
Esempio n. 10
0
 void Update()
 {
     if (isRotating)
     {
         currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);
         rotationFactor = handPosition.x * RotationSensitivity;
         transform.Rotate(new Vector3(0, -1 * rotationFactor, 0));
     }
 }
Esempio n. 11
0
        /// <summary>
        /// Starts dragging the object.
        /// </summary>
        public void StartDragging()
        {
            if (!IsDraggingEnabled)
            {
                return;
            }

            if (isDragging)
            {
                return;
            }

            // Add self as a modal input handler, to get all inputs during the manipulation
            InputManager.Instance.PushModalInputHandler(gameObject);

            isDragging = true;

            Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;
            Vector3 handPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            handRefDistance = Vector3.Magnitude(handPosition - pivotPosition);
            objRefDistance  = Vector3.Magnitude(gazeHitPosition - pivotPosition);

            Vector3 objForward = HostTransform.forward;
            Vector3 objUp      = HostTransform.up;

            // Store where the object was grabbed from
            objRefGrabPoint = mainCamera.transform.InverseTransformDirection(HostTransform.position - gazeHitPosition);

            Vector3 objDirection  = Vector3.Normalize(gazeHitPosition - pivotPosition);
            Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition);

            objForward    = mainCamera.transform.InverseTransformDirection(objForward);    // in camera space
            objUp         = mainCamera.transform.InverseTransformDirection(objUp);         // in camera space
            objDirection  = mainCamera.transform.InverseTransformDirection(objDirection);  // in camera space
            handDirection = mainCamera.transform.InverseTransformDirection(handDirection); // in camera space

            objRefForward = objForward;
            objRefUp      = objUp;

            // Store the initial offset between the hand and the object, so that we can consider it when dragging
            gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection);
            draggingPosition  = gazeHitPosition;

            if (popupMenu)
            {
                popupMenu.parent = transform;
                popupMenu.gameObject.SetActive(false);
            }

            StartedDragging.RaiseEvent();
        }
Esempio n. 12
0
        /// <summary>
        /// Starts dragging the object.
        /// </summary>
        public void StartDragging()
        {
            if (!IsDraggingEnabled)
            {
                return;
            }

            if (isDragging)
            {
                Debug.Log("Still Dragging " + this.name);
                return;
            }

            // Add self as a modal input handler, to get all inputs during the manipulation
            InputManager.Instance.PushModalInputHandler(gameObject);

            isDragging = true;
            Debug.Log("Starting Dragging " + this.name);
            GameObject.Find("StageCollection").SendMessage("UpdateDragging", this.name);
            //GazeCursor.Instance.SetState(GazeCursor.State.Move);
            //GazeCursor.Instance.SetTargetObject(HostTransform);

            Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;
            Vector3 handPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            handRefDistance = Vector3.Magnitude(handPosition - pivotPosition);
            objRefDistance  = Vector3.Magnitude(gazeHitPosition - pivotPosition);

            Vector3 objForward = HostTransform.forward;

            // Store where the object was grabbed from
            objRefGrabPoint = mainCamera.transform.InverseTransformDirection(HostTransform.position - gazeHitPosition);

            Vector3 objDirection  = Vector3.Normalize(gazeHitPosition - pivotPosition);
            Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition);

            objForward    = mainCamera.transform.InverseTransformDirection(objForward);    // in camera space
            objDirection  = mainCamera.transform.InverseTransformDirection(objDirection);  // in camera space
            handDirection = mainCamera.transform.InverseTransformDirection(handDirection); // in camera space

            objRefForward = objForward;

            // Store the initial offset between the hand and the object, so that we can consider it when dragging
            gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection);
            draggingPosition  = gazeHitPosition;

            StartedDragging.RaiseEvent();
        }
Esempio n. 13
0
        /// <summary>
        /// Starts dragging the object.
        /// </summary>
        public void StartDragging(Vector3 initialDraggingPosition)
        {
            if (!IsDraggingEnabled)
            {
                return;
            }

            if (isDragging)
            {
                return;
            }

            // TODO: robertes: Fix push/pop and single-handler model so that multiple HandDraggable components
            //       can be active at once.

            // Add self as a modal input handler, to get all inputs during the manipulation
            InputManager.Instance.PushModalInputHandler(gameObject);

            isDragging = true;
            //GazeCursor.Instance.SetState(GazeCursor.State.Move);
            //GazeCursor.Instance.SetTargetObject(HostTransform);

            Vector3 handPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            handRefDistance = Vector3.Magnitude(handPosition - pivotPosition);
            objRefDistance  = Vector3.Magnitude(initialDraggingPosition - pivotPosition);

            Vector3 objForward = HostTransform.forward;

            // Store where the object was grabbed from
            objRefGrabPoint = mainCamera.transform.InverseTransformDirection(HostTransform.position - initialDraggingPosition);

            Vector3 objDirection  = Vector3.Normalize(initialDraggingPosition - pivotPosition);
            Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition);

            objForward    = mainCamera.transform.InverseTransformDirection(objForward);    // in camera space
            objDirection  = mainCamera.transform.InverseTransformDirection(objDirection);  // in camera space
            handDirection = mainCamera.transform.InverseTransformDirection(handDirection); // in camera space

            objRefForward = objForward;

            // Store the initial offset between the hand and the object, so that we can consider it when dragging
            gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection);
            draggingPosition  = initialDraggingPosition;

            StartedDragging.RaiseEvent();
        }
Esempio n. 14
0
    public void OnInputDown(InputEventData eventData)
    {
        isDown = false;
        Vector3 pos;

        inputSource   = eventData.InputSource;
        inputSourceId = eventData.SourceId;
        Debug.Log(inputSourceId);
        inputSource.TryGetPosition(inputSourceId, out pos);
        pos += cam.transform.rotation * InputOffset;
        //Debug.Log(pos);
        Ray        inputRay = new Ray(cam.transform.position, pos - cam.transform.position);
        RaycastHit hit;
        var        colliders = Physics.OverlapSphere(pos, 0.1f);

        if (colliders.Length > 0)
        {
            Draggable draggable = colliders[0].gameObject.GetComponent <Draggable>();
            if (draggable)
            {
                interacted = colliders[0].gameObject;
                draggable.updateInputPos(pos);
                draggable.onInputDown();
                isDown = true;
            }
        }
    }
Esempio n. 15
0
        /// <summary>
        /// Starts scaling the object with the given input source.
        /// </summary>
        public void StartScaling(IInputSource inputSource, uint inputSourceId)
        {
            if (isScaling)
            {
                return;
            }

            if (inputSource == null || !inputSource.SupportsInputInfo(inputSourceId, SupportedInputInfo.Position))
            {
                Debug.Log("The provided input source does not support the required positional info.");
                return;
            }

            currentInputSource   = inputSource;
            currentInputSourceId = inputSourceId;

            // Add self as a modal input handler, to get all inputs during the manipulation.
            InputManager.Instance.PushModalInputHandler(gameObject);

            currentInputSource.TryGetPosition(currentInputSourceId, out prevHandPosition);
            grabPoint     = prevHandPosition;
            scaleUpVector = Vector3.Normalize(grabPoint - TargetGameObject.transform.position);

            isScaling = true;
            StartedScaling.RaiseEvent();
        }
        void UpdateRotation()
        {
            Vector3 newHandA, newHandB;

            handAInputSource.TryGetPosition(handASourceId, out newHandA);
            handBInputSource.TryGetPosition(handBSourceId, out newHandB);
            float newHandLineSlope = (newHandA.y - newHandB.y) / (newHandA.x - newHandB.x);
            float oldHandLineSlope = (handAPos.y - handBPos.y) / (handAPos.x - handBPos.x);
            float newRotation      = (float)Math.Atan(newHandLineSlope);
            float oldRotation      = (float)Math.Atan(oldHandLineSlope);
            float deltaRotation    = 180 * (newRotation - oldRotation) / (float)Math.PI;

            if (float.IsNaN(deltaRotation))
            {
                return;
            }
            armRotation -= deltaRotation;

            if (logging)
            {
                Debug.Log("Rotate: Object angle " + thermostatArm.transform.eulerAngles.z + " at " + Time.time);
                Debug.Log("Rotate: Hand A: " + newHandA.x + "," + newHandA.y + "," + newHandA.z + " at " + Time.time);
                Debug.Log("Rotate: Hand B: " + newHandB.x + "," + newHandB.y + "," + newHandB.z + " at " + Time.time);
            }
            handAPos = newHandA;
            handBPos = newHandB;
        }
        public void OnInputDown(InputEventData eventData)
        {
            if (ExperimentManager.Instance.IsOnCountdown())
            {
                return;
            }

            if (!eventData.InputSource.SupportsInputInfo(eventData.SourceId, SupportedInputInfo.Position))
            {
                // The input source must provide positional data for this script to be usable
                return;
            }

            if (RepositionManager.Instance.GetWallStatusMode(instanceId) == WallStatusModes.DRAGGING)
            {
                // We're already handling drag input, so we can't start a new drag operation.
                return;
            }

            if (RepositionManager.Instance.GetWallStatusMode(instanceId) == WallStatusModes.IDLE)
            {
                currentInputSource   = eventData.InputSource;
                currentInputSourceId = eventData.SourceId;

                // Add self as a modal input handler, to get all inputs during the manipulation
                InputManager.Instance.AddMultiModalInputHandler(currentInputSourceId, gameObject);
                RepositionManager.Instance.SetWallMode(gameObject, WallStatusModes.DRAGGING);

                // calculate initial positions
                Vector3 initialHandPosition;
                currentInputSource.TryGetPosition(currentInputSourceId, out initialHandPosition);
                initialObjPosition = HostTransform.position;
                lockedObjPosition  = HostTransform.position;
                initialHandVector  = initialHandPosition - mainCamera.transform.position;
                prevHandPosition   = initialHandPosition;
            }
            else if (RepositionManager.Instance.GetWallStatusMode(instanceId) == WallStatusModes.LOCKED)
            {
                if (Time.unscaledTime - lastInputUpTime < doubleTapDuration)
                {
                    OnInputDoubleTapped(eventData);
                }
                else
                {
                    currentInputSource   = eventData.InputSource;
                    currentInputSourceId = eventData.SourceId;

                    // Add self as a modal input handler, to get all inputs during the manipulation
                    InputManager.Instance.AddMultiModalInputHandler(currentInputSourceId, gameObject);
                    RepositionManager.Instance.SetWallMode(gameObject, WallStatusModes.DRAGGING);

                    // calculate initial positions
                    Vector3 initialHandPosition;
                    currentInputSource.TryGetPosition(currentInputSourceId, out initialHandPosition);
                    lockedObjPosition = HostTransform.position;
                    initialHandVector = initialHandPosition - mainCamera.transform.position;
                    prevHandPosition  = initialHandPosition;
                }
            }
        }
Esempio n. 18
0
        /// <summary>
        /// Update the position of the object being dragged.
        /// </summary>
        private void UpdateDragging()
        {
            //extract the only input source
            IInputSource currentInputSource   = currentInputSources.Values.ToArray()[0];
            uint         currentInputSourceId = handsPositions.Keys.ToArray()[0];

            Vector3 newHandPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out newHandPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            Vector3 newHandDirection = Vector3.Normalize(newHandPosition - pivotPosition);

            newHandDirection = mainCamera.transform.InverseTransformDirection(newHandDirection); // in camera space
            Vector3 targetDirection = Vector3.Normalize(gazeAngularOffset * newHandDirection);

            targetDirection = mainCamera.transform.TransformDirection(targetDirection); // back to world space

            float currenthandDistance = Vector3.Magnitude(newHandPosition - pivotPosition);

            float distanceRatio  = currenthandDistance / handRefDistance;
            float distanceOffset = distanceRatio > 0 ? (distanceRatio - 1f) * DistanceScale : 0;
            float targetDistance = objRefDistance + distanceOffset;

            handsPositions[currentInputSourceId] = pivotPosition + (targetDirection * targetDistance);



            // Apply Final Position
            HostTransform.position = Vector3.Lerp(HostTransform.position, handsPositions[currentInputSourceId] + mainCamera.transform.TransformDirection(objRefGrabPoint), PositionLerpSpeed);
        }
        private Vector3 GetCurrentInputPosition()
        {
            Vector3 currentHandPos;

            currentInputSource.TryGetPosition(currentInputSourceId, out currentHandPos);
            return(currentHandPos);
        }
Esempio n. 20
0
    // Update is called once per frame
    void Update()
    {
        if (isDrag)
        {
            currentInputSource.TryGetPosition(id, out pos);

            //Debug.Log(pos);
            obj.transform.position = pos;

            //CustomMessages.Instance.Send3dDraw(pos);
        }

        CustomMessages.Instance.Send3dDraw(pos, isDragShare);


        RaycastHit hitInfo;

        hit = Physics.Raycast(Camera.main.transform.position,
                              Camera.main.transform.forward,
                              out hitInfo,
                              20f);

        if (hit && hitInfo.collider.tag == "DummyAnchor")
        {
            returnToMenuFlag = 1;
            Debug.Log(hitInfo.collider.tag);
        }

        //CustomMessages.Instance.MessageHandlers[CustomMessages.TestMessageID.Draw3d] = Shared3dDraw;
    }
Esempio n. 21
0
    public void OnInputDown(InputEventData eventData)
    {
        //Debug.Log("InputDown");
        //hide the main cursor while selecting
        mainCursor.SetVisiblity(false);

        isHolding         = true;
        currInputSource   = eventData.InputSource;
        currInputSourceId = eventData.SourceId;

        // Add self as a modal input handler, to get all inputs during the manipulation
        InputManager.Instance.PushModalInputHandler(gameObject);

        //save the first hit point
        firstHitPoint = GazeManager.Instance.HitPosition;
        forwardDir    = Camera.main.transform.forward;
        upDir         = Camera.main.transform.up;
        rightDir      = Vector3.Cross(upDir, forwardDir);

        currInputSource.TryGetPosition(currInputSourceId, out firstHandPosition);
        //initialise the currHandPosition
        currHandPosition = firstHandPosition;

        //put a dot cursor where we first hit the stone
        dotRect.SetActive(true);
        dotRect.transform.position   = mainCursor.Dot.transform.position;
        dotRect.transform.forward    = mainCursor.Dot.transform.forward; // look at user
        dotRect.transform.localScale = (originalDotScale * this.transform.localScale.x) / originalScale.x;

        UpdateQuadVertices();
        quad.SetActive(true);
    }
 void UpdateRotation()
 {
     Vector3 newHandA, newHandB;
     handAInputSource.TryGetPosition(handASourceId, out newHandA);
     handBInputSource.TryGetPosition(handBSourceId, out newHandB);
     float newHandLineSlope = (newHandA.y - newHandB.y) / (newHandA.x - newHandB.x);
     float oldHandLineSlope = (handAPos.y - handBPos.y) / (handAPos.x - handBPos.x);
     float newRotation = (float)Math.Atan(newHandLineSlope);
     float oldRotation = (float)Math.Atan(oldHandLineSlope);
     float deltaRotation = 180 * (newRotation - oldRotation) / (float)Math.PI;
     if (Math.Abs(deltaRotation) < 50)
     {
         zoomedImage.gameObject.transform.eulerAngles = new Vector3(zoomedImage.gameObject.transform.eulerAngles.x,
                                                        zoomedImage.gameObject.transform.eulerAngles.y,
                                                        zoomedImage.gameObject.transform.eulerAngles.z + deltaRotation);
         if (logging)
         {
             Debug.Log("Rotate: Object angle " + zoomedImage.gameObject.transform.eulerAngles.z + " at " + Time.time);
             Debug.Log("Rotate: Hand A: " + newHandA.x + "," + newHandA.y + "," + newHandA.z + " at " + Time.time);
             Debug.Log("Rotate: Hand B: " + newHandB.x + "," + newHandB.y + "," + newHandB.z + " at " + Time.time);
         }
     }
     handAPos = newHandA;
     handBPos = newHandB;
 }
    private void StartDragging()
    {
        if (_isHolding)
        {
            return;
        }

        InputManager.Instance.PushModalInputHandler(sphere.gameObject);
        _isHolding = true;

        Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;
        Vector3 handPosition;

        currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);
        prevHandPosX = handPosition.x;
        prevHandPosY = handPosition.y;
    }
Esempio n. 24
0
    public void StartDragging()
    {
        if (!gizmoSetting.IsDraggingEnabled)
        {
            return;
        }
        if (isDragging)
        {
            return;
        }

        InputManager.Instance.PushModalInputHandler(gameObject);
        isDragging = true;

        currentInputSource.TryGetPosition(currentInputSourceId, out startHandPosition);

        Vector3 rotationAxisVec;

        switch (rotationType)
        {
        case RotationType.Roll:
            rotationAxisVec = gizmoSetting.HostTransform.right;
            break;

        case RotationType.Yaw:
            rotationAxisVec = gizmoSetting.HostTransform.up;
            break;

        case RotationType.Pitch:
            rotationAxisVec = gizmoSetting.HostTransform.forward;
            break;

        default:
            return;
        }

        Vector3 projectionVect = Vector3.ProjectOnPlane(rotationAxisVec, mainCamera.transform.forward);

        projectionVect.Normalize();
        orthogonalRotationAxisVec = Vector3.Cross(mainCamera.transform.forward, projectionVect);
        orthogonalRotationAxisVec.Normalize();
        rend.material.color            = gizmoSetting.rotDraggingColor;
        gizmoSetting.IsDraggingRotator = true;
        StartedDragging.RaiseEvent();
    }
        /// <summary>
        /// Update the position of the object being dragged.
        /// </summary>
        private void UpdateDragging()
        {
            Vector3 newHandPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out newHandPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            Vector3 newHandDirection = Vector3.Normalize(newHandPosition - pivotPosition);

            newHandDirection = mainCamera.transform.InverseTransformDirection(newHandDirection); // in camera space
            Vector3 targetDirection = Vector3.Normalize(gazeAngularOffset * newHandDirection);

            targetDirection = mainCamera.transform.TransformDirection(targetDirection); // back to world space

            float currenthandDistance = Vector3.Magnitude(newHandPosition - pivotPosition);

            float distanceRatio  = currenthandDistance / handRefDistance;
            float distanceOffset = distanceRatio > 0 ? (distanceRatio - 1f) * DistanceScale : 0;
            float targetDistance = objRefDistance + distanceOffset;

            draggingPosition = pivotPosition + (targetDirection * targetDistance);

            if (IsOrientTowardsUser)
            {
                draggingRotation = Quaternion.LookRotation(HostTransform.position - pivotPosition);
            }
            else
            {
                Vector3 objForward = mainCamera.transform.TransformDirection(objRefForward); // in world space
                draggingRotation = Quaternion.LookRotation(objForward);
            }

            // Apply Final Position
            HostTransform.position = draggingPosition + mainCamera.transform.TransformDirection(objRefGrabPoint);
            HostTransform.rotation = draggingRotation;

            if (IsKeepUpright)
            {
                Quaternion upRotation = Quaternion.FromToRotation(HostTransform.up, Vector3.up);
                HostTransform.rotation = upRotation * HostTransform.rotation;
            }

            SV_ShareTransform();
        }
Esempio n. 26
0
    // Update is called once per frame
    // FixedUpdate is called in a regular timeline, same time between each call, to use for physics
    void FixedUpdate()
    {
        // bit shift the index of the layer to get a bit mask
        int layerMask = 1 << 8; // the layer 8 is the kern layer

        RaycastHit gazeHitResult = GazeManager.Instance.HitInfo;

        if (!isInputUp)
        {
            Debug.DrawLine(drawOriginPosition, drawOriginPosition + (replacedHandPosition - drawOriginPosition) * 2);

            //get current inputsource Position information if we can
            if (currentInputSource.SupportsInputInfo(currentInputSourceId, SupportedInputInfo.Position))
            {
                currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);
                //Debug.Log("Hand Position " + handPosition);
                //replacing hand close to the user gaze direction to avoid occlusion issues
                replacedHandPosition = handPosition + replacingHand;

                //Raycast(originPoint, DIRECTION, etc.)
                if (Physics.Raycast(drawOriginPosition, replacedHandPosition - drawOriginPosition, out hit, Mathf.Infinity, layerMask))
                {
                    //drawingCursor show current drawing position and orientation
                    Vector3 lookForward = -GazeManager.Instance.GazeNormal; //Get the forward vector looking back at camera
                    drawingCursor.transform.position = hit.point + (lookForward * 0.02f);
                    drawingCursor.transform.rotation = Quaternion.LookRotation(Vector3.Lerp(gazeHitResult.normal, lookForward, 0.5f), Vector3.up);
                    drawingCursor.transform.Rotate(new Vector3(90.0f, 0.0f, 0.0f));

                    if (currentPoints.Count == 1)//first time in the loop
                    {
                        drawingCursor.SetActive(true);
                        mainCursor.SetVisiblity(false);
                    }
                    //to avoid a point repetitions
                    if (currentPoints.Count != 0 && currentPoints[currentPoints.Count - 1] != hit.point)
                    {
                        currentPoints.Add(hit.point + hit.normal * 0.0015f);
                    }
                    //drawing the line
                    if (currentPoints.Count != 0)
                    {
                        //setting the points of the line one by one
                        //using this instead of setPositions because it's more logical to use list here
                        currentLine.positionCount = currentPoints.Count;
                        for (int i = 0; i < currentPoints.Count; i++)
                        {
                            currentLine.SetPosition(i, currentPoints[i]);
                        }
                    }
                }
                else //no collision found between drawOriginPosition, handPosition and 3Dmodel
                {
                    drawingCursor.transform.position = replacedHandPosition + Vector3.Normalize(replacedHandPosition - drawOriginPosition) * 1.5f;
                }
            }
        }
    }
Esempio n. 27
0
        /// <summary>
        /// Starts dragging the object.
        /// </summary>
        public void StartDragging()
        {
            if (!IsDraggingAndScalingEnabled)
            {
                return;
            }

            if (isDragging)
            {
                return;
            }

            //extract the only input source
            IInputSource currentInputSource   = currentInputSources.Values.ToArray()[0];
            uint         currentInputSourceId = handsPositions.Keys.ToArray()[0];

            // Add self as a modal input handler, to get all inputs during the manipulation
            //InputManager.Instance.PushModalInputHandler(gameObject);

            isDragging = true;
            //GazeCursor.Instance.SetState(GazeCursor.State.Move);
            //GazeCursor.Instance.SetTargetObject(HostTransform);

            Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;
            Vector3 handPosition;

            currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);

            Vector3 pivotPosition = GetHandPivotPosition();

            handRefDistance = Vector3.Magnitude(handPosition - pivotPosition);
            objRefDistance  = Vector3.Magnitude(gazeHitPosition - pivotPosition);

            Vector3 objForward = HostTransform.forward;
            Vector3 objUp      = HostTransform.up;

            // Store where the object was grabbed from
            objRefGrabPoint = mainCamera.transform.InverseTransformDirection(HostTransform.position - gazeHitPosition);

            Vector3 objDirection  = Vector3.Normalize(gazeHitPosition - pivotPosition);
            Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition);

            objForward    = mainCamera.transform.InverseTransformDirection(objForward);    // in camera space
            objUp         = mainCamera.transform.InverseTransformDirection(objUp);         // in camera space
            objDirection  = mainCamera.transform.InverseTransformDirection(objDirection);  // in camera space
            handDirection = mainCamera.transform.InverseTransformDirection(handDirection); // in camera space

            objRefForward = objForward;
            objRefUp      = objUp;

            // Store the initial offset between the hand and the object, so that we can consider it when dragging
            gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection);
            //draggingPosition = gazeHitPosition;
            handsPositions[currentInputSourceId] = gazeHitPosition;

            StartedDragging.RaiseEvent();
        }
Esempio n. 28
0
    // Update is called once per frame
    void Update()
    {
        if (isHolding)
        {
            currInputSource.TryGetPosition(currInputSourceId, out currHandPosition);

            UpdateQuadVertices();
        }
    }
Esempio n. 29
0
        public void StartDragging()
        {
            if (!IsDraggingEnable)
            {
                return;
            }
            if (isDragging)
            {
                return;
            }

            InputManager.Instance.PushModalInputHandler(gameObject);
            isDragging = true;

            currentInputSource.TryGetPosition(currentInputSourceId, out startHandPosition);

            Vector3 rotaitonAxisVect;

            switch (axis)
            {
            case RotationAxis.x:
                rotaitonAxisVect = target.transform.right;
                break;

            case RotationAxis.y:
                rotaitonAxisVect = target.transform.up;
                break;

            case RotationAxis.z:
                rotaitonAxisVect = target.transform.forward;
                break;

            default:
#if UNITY_EDITOR
                Debug.LogError("Parameter 'axis' is not set.");
#endif
                return;
            }
            Vector3 projectionVect = Vector3.ProjectOnPlane(rotaitonAxisVect, mainCamera.transform.forward);
            projectionVect.Normalize();
            orthogonalRotationAxisVect = Vector3.Cross(mainCamera.transform.forward, projectionVect);
            orthogonalRotationAxisVect.Normalize();
        }
        private void StartDragging()
        {
            if (_isHolding) return;

            InputManager.Instance.PushModalInputHandler(viewport.gameObject);
            _isHolding = true;

            Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point;
            Vector3 handPosition;
            currentInputSource.TryGetPosition(currentInputSourceId, out handPosition);
            prevHandPosX = handPosition.x;
            prevHandPosY = handPosition.y;
            if (logging)
            {
                Debug.Log("Translate: Object Position " + viewport.gameObject.transform.position.x + "," +
                          viewport.gameObject.transform.position.y + viewport.gameObject.transform.position.z + " at " + Time.time);
                Debug.Log("Translate: Hand: " + handPosition.x + "," + handPosition.y + "," + handPosition.z + " at " + Time.time);
            }
        }