/// <summary>
        /// When the technique is activated
        /// </summary>
        public override void OnActivation(VRIL_ControllerActionEventArgs e)
        {
            // only ray hand triggers WIM
            if (e.ControllerIndex != 1)
            {
                return;
            }

            if (RegisteredControllers.Count > 1)
            {
                // differentiate between ButtonStates
                if (TravelOnRelease && e.ButtonInteractionType == VRIL_ButtonInteractionType.Released)
                {
                    OnTravel(e);
                }
                else if (e.ButtonInteractionType == VRIL_ButtonInteractionType.Pressed)
                {
                    if (!IsActivated && !DelayToNextTravel)
                    {
                        TargetPosition = Viewpoint.transform.position - new Vector3(0, DistanceViewpointToGround, 0);
                        Velocity       = ViewpointVelocity;
                        CurrentScale   = Vector3.one;
                        CurrentScale  *= ScaleFactor;
                        CreateWim();
                        IsActivated = true;
                        StartCoroutine(WIM());
                    }
                }
            }
            else
            {
                Debug.LogError($"<b>{nameof(VRIL_WIM)}:</b>\n This technique requires at least two controllers!");
            }
        }
예제 #2
0
 /// <summary>
 /// When the technique stops
 /// </summary>
 public override void OnStop(VRIL_ControllerActionEventArgs e)
 {
     // When a coroutine is stared via a IEnumerator, stopping it without the
     // same IEnumerator won't work. So this next line is useless without the object
     // StopCoroutine(ISith());
     IsActivated = false;
 }
        /// <summary>
        /// Called when the interaction technique selected an object
        /// </summary>
        /// <param name="e">ControllerActionEventArgs</param>
        public virtual void OnSelection(VRIL_ControllerActionEventArgs e)
        {
            foreach (VRIL_Interactable interactable in SelectableObjects)
            {
                if (interactable.Selection_ObjectAttachment == ObjectAttachmentTypes.NotAttached)
                {
                    interactable.OnSelection();
                }
                else if (interactable.Selection_ObjectAttachment == ObjectAttachmentTypes.AttachedToHand)
                {
                    interactable.OnSelection(RegisteredControllers[DominantControllerIndex]);
                }
                else
                {
                    interactable.OnSelection(RegisteredControllers[0].transform.position, interactable.transform.rotation);
                }

                if (!SelectedObjects.Contains(interactable))
                {
                    SelectedObjects.Add(interactable);
                }
            }

            SelectableObjects.Clear();
        }
예제 #4
0
 /// <summary>
 /// Technique selection
 /// </summary>
 /// <param name="e">ControllerEvent</param>
 public override void OnSelection(VRIL_ControllerActionEventArgs e)
 {
     if (!manipulationModeActivated)
     {
         base.OnSelection(e);
     }
 }
예제 #5
0
        protected IEnumerator GrabTheAir(VRIL_ControllerActionEventArgs e)
        {
            PrevPosition = RegisteredControllers[0].transform.position;
            while (IsActivated)
            {
                Vector3 newDiff      = (RegisteredControllers[0].transform.position - PrevPosition) * MovementScalor;
                Vector3 nextPosition = Vector3.zero;
                if (EnableNavigationX)
                {
                    nextPosition.x = newDiff.x;
                }

                if (EnableNavigationY)
                {
                    nextPosition.y = newDiff.y;
                }

                if (EnableNavigationZ)
                {
                    nextPosition.z = newDiff.z;
                }
                SaveDistancesToViewpoint();
                World.transform.position += nextPosition;
                PrevPosition              = RegisteredControllers[0].transform.position;
                TransferSelectedObjects();
                yield return(null);
            }
            StopAudio();
        }
 /// <summary>
 /// Called when the interaction technique should interact with the selected objects
 /// </summary>
 /// <param name="e">ControllerActionEventArgs</param>
 public virtual void OnInteraction(VRIL_ControllerActionEventArgs e)
 {
     foreach (VRIL_Interactable interactable in SelectableObjects)
     {
         bool pressed = (e.ButtonInteractionType == VRIL_ButtonInteractionType.Pressed) ? true : false;
         interactable.OnInteraction(pressed);
     }
 }
예제 #7
0
 /// <summary>
 /// When the technique is activated
 /// </summary>
 public override void OnActivation(VRIL_ControllerActionEventArgs e)
 {
     if (!IsActivated)
     {
         IsActivated = true;
         StartCoroutine(ISith());
     }
 }
예제 #8
0
 /// <summary>
 /// Select objects only if a button is pressed
 /// </summary>
 /// <param name="e"></param>
 public override void OnSelection(VRIL_ControllerActionEventArgs e)
 {
     // differentiate between ButtonStates
     if (e.ButtonInteractionType == VRIL_ButtonInteractionType.Released)
     {
         base.OnRelease(e);
     }
     else if (e.ButtonInteractionType == VRIL_ButtonInteractionType.Pressed)
     {
         base.OnSelection(e);
     }
 }
        /// <summary>
        /// Called when the interaction technique should release an object
        /// </summary>
        /// <param name="e">ControllerActionEventArgs</param>
        public virtual void OnRelease(VRIL_ControllerActionEventArgs e)
        {
            foreach (VRIL_Interactable interactable in SelectableObjects)
            {
                interactable.OnRelease(interactable.transform.position);
            }

            foreach (VRIL_Interactable interactable in SelectedObjects)
            {
                interactable.OnRelease(interactable.transform.position);
            }

            SelectableObjects.Clear();
            SelectedObjects.Clear();
        }
예제 #10
0
 /// <summary>
 /// Activate the technique which starts the coroutine. If no controllers are active, an error will be shown.
 /// </summary>
 /// <param name="e">ControllerEvent</param>
 public override void OnActivation(VRIL_ControllerActionEventArgs e)
 {
     if (this.RegisteredControllers.Count > 1)
     {
         if (!IsActivated)
         {
             IsActivated = true;
             StartCoroutine(ShowRay());
         }
     }
     else
     {
         Debug.LogError($"<b>{nameof(VRIL_DepthRay)}:</b>\n requires at least two controllers!");
     }
 }
예제 #11
0
 /// <summary>
 /// Technique is activated
 /// </summary>
 /// <param name="e"></param>
 public override void OnActivation(VRIL_ControllerActionEventArgs e)
 {
     if (RegisteredControllers.Count > 0)
     {
         if (!IsActivated)
         {
             IsActivated = true;
             StartCoroutine(ShowRay());
         }
     }
     else
     {
         Debug.LogError($"<b>{nameof(VRIL_SingleRayCast)}:</b>\n No controller registered");
     }
 }
예제 #12
0
 /// <summary>
 /// Technique activation
 /// </summary>
 /// <param name="e">ControllerEvent</param>
 public override void OnActivation(VRIL_ControllerActionEventArgs e)
 {
     if (this.RegisteredControllers.Count > 1)
     {
         if (!selectionModeActivated && !manipulationModeActivated)
         {
             LineRenderer.enabled   = true;
             selectionModeActivated = true;
             StartCoroutine(SpindleAndWheelSelection());
         }
     }
     else
     {
         Debug.LogError($"<b>{nameof(VRIL_SpindleAndWheel)}:</b>\n This technique requires at least two controllers!");
     }
 }
예제 #13
0
 /// <summary>
 /// Technique interaction
 /// </summary>
 /// <param name="e">ControllerEvent</param>
 public override void OnInteraction(VRIL_ControllerActionEventArgs e)
 {
     if (this.RegisteredControllers.Count > 1)
     {
         if (SelectedObjects.Count >= 1 && !manipulationModeActivated)
         {
             base.OnInteraction(e);
             selectionModeActivated    = false;
             manipulationModeActivated = true;
             StartCoroutine(SpindleAndWheelManpulation());
         }
     }
     else
     {
         Debug.LogError($"<b>{nameof(VRIL_SpindleAndWheel)}:</b>\n This technique requires at least two controllers!");
     }
 }
 /// <summary>
 /// Technique is activated
 /// </summary>
 /// <param name="e"></param>
 public override void OnActivation(VRIL_ControllerActionEventArgs e)
 {
     if (RegisteredControllers.Count > 0)
     {
         if (!TravelDisablesTechnique)
         {
             if (e.ButtonInteractionType == VRIL_ButtonInteractionType.Pressed)
             {
                 if (IsActivated)
                 {
                     IsActivated      = false;
                     PositionSelected = false;
                     if (HitEntity != null)
                     {
                         HitEntity.SetActive(false);
                     }
                 }
                 else
                 {
                     IsActivated = true;
                     StartCoroutine(SelectPosition(e));
                 }
             }
         }
         else
         {
             // differentiate between ButtonStates
             if (TravelOnRelease && e.ButtonInteractionType == VRIL_ButtonInteractionType.Released)
             {
                 OnTravel(e);
             }
             else if (e.ButtonInteractionType == VRIL_ButtonInteractionType.Pressed)
             {
                 if (!IsActivated)
                 {
                     IsActivated = true;
                     StartCoroutine(SelectPosition(e));
                 }
             }
         }
     }
     else
     {
         Debug.LogError($"<b>{nameof(VRIL_BlinkTeleport)}:</b>\n No controller registered");
     }
 }
예제 #15
0
        /// <summary>
        /// Notify manager with action event
        /// </summary>
        /// <param name="fromSource">Source input from SteamVR</param>
        /// <param name="vRIL_ButtonType">Specified VRIL ButtonType in Inspector</param>
        /// <param name="vRIL_ButtonInteractionType">Specified VRIL InteractionType in Inspector</param>
        public void NotifyControllerActionEvent(SteamVR_Input_Sources fromSource, VRIL_ButtonType vRIL_ButtonType, VRIL_ButtonInteractionType vRIL_ButtonInteractionType)
        {
            VRIL_ControllerActionEventArgs v = new VRIL_ControllerActionEventArgs
            {
                ButtonType            = vRIL_ButtonType,
                ButtonInteractionType = vRIL_ButtonInteractionType
            };

            if (fromSource == SteamVR_Input_Sources.LeftHand)
            {
                v.ControllerIndex = 0;
            }
            else if (fromSource == SteamVR_Input_Sources.RightHand)
            {
                v.ControllerIndex = 1;
            }
            manager.OnControllerAction(v);
        }
        public override void OnTravel(VRIL_ControllerActionEventArgs e)
        {
            // if a valid position is selected, travel is triggered
            if (PositionSelected && !DelayToNextTravel)
            {
                // allow no other input while travelling to target position
                Manager.InputLocked = true;
                TravelMode          = true;
                SaveDistancesToViewpoint();
                PlayAudio();
                StartCoroutine(DashMovement());
                DelayToNextTravel = true;
            }

            if (HitEntity)
            {
                HitEntity.SetActive(false);
            }

            IsActivated = false;
        }
        //[HideInInspector] public bool InputLocked = false;

        /// <summary>
        /// Should be called when a Controller input happened (Button pressed for example)
        /// <para>Notifies all registered techniques for a specific controller</para>
        /// </summary>
        /// <param name="e">VRIL_ControllerActionEventArgs</param>
        /// <see cref="VRIL_ControllerActionEventArgs"/>
        public void OnControllerAction(VRIL_ControllerActionEventArgs e)
        {
            if (InputLocked)
            {
                return;
            }

            if (e == null)
            {
                Debug.LogWarning(
                    $"<b>{nameof(VRIL_Manager)}:</b>\n {nameof(VRIL_ControllerActionEventArgs)} was null at {nameof(OnControllerAction)}");
                return;
            }

            if (e.ControllerIndex > RegisteredControllers.Count - 1)
            {
                Debug.LogWarning(
                    $"<b>{nameof(VRIL_Manager)}:</b>\n {nameof(VRIL_ControllerActionEventArgs)} ControllerIndex was greater than registered controller number at {nameof(OnControllerAction)}");
                return;
            }

            foreach (VRIL_InteractionTechniqueBase technique in RegisteredControllers[e.ControllerIndex]
                     .InteractionTechniques)
            {
                if (technique != null)
                {
                    technique.ControllerAction(this, e);
                }
            }

            foreach (VRIL_NavigationTechniqueBase technique in RegisteredControllers[e.ControllerIndex]
                     .NavigationTechniques)
            {
                if (technique != null)
                {
                    technique.ControllerAction(this, e);
                }
            }
        }
예제 #18
0
 public override void OnActivation(VRIL_ControllerActionEventArgs e)
 {
     if (RegisteredControllers.Count > 0)
     {
         // differentiate between ButtonStates
         if (e.ButtonInteractionType == VRIL_ButtonInteractionType.Released)
         {
             IsActivated = false;
         }
         else if (e.ButtonInteractionType == VRIL_ButtonInteractionType.Pressed)
         {
             if (!IsActivated)
             {
                 OnTravel(e);
             }
         }
     }
     else
     {
         Debug.LogError($"<b>{nameof(VRIL_GrabTheAir)}:</b>\n No controller registered");
     }
 }
        /// <summary>
        /// Called from <see cref="VRIL_Manager"/> when a button is pressed
        /// </summary>
        /// <param name="sender">sending class</param>
        /// <param name="e">EventArgs that contains the controller, buttonType, buttonInteractionType</param>
        /// <see cref="VRIL_Manager"/>
        /// <seealso cref="VRIL_ControllerActionEventArgs"/>
        public override void ControllerAction(object sender, VRIL_ControllerActionEventArgs e)
        {
            bool actionDone = false;

            foreach (VRIL_ActionMapping mapping in Mappings)
            {
                if (mapping.ButtonType == e.ButtonType)
                {
                    switch (mapping.ActionType)
                    {
                    case VRIL_ActionTypes.None:
                        actionDone = true;
                        break;

                    case VRIL_ActionTypes.OnActivation:
                        // invoked once
                        if (!actionDone)
                        {
                            actionDone = true;
                            OnActivation(e);
                        }
                        break;

                    case VRIL_ActionTypes.OnTravel:
                        // invoked once
                        if (!actionDone)
                        {
                            actionDone = true;
                            OnTravel(e);
                        }
                        break;

                    case VRIL_ActionTypes.CustomScript:
                        mapping.Script.OnCall();
                        break;
                    }
                }
            }
        }
        /// <summary>
        /// Called when the travel should be performed
        /// </summary>
        /// <param name="e">ControllerActionEventArgs</param>
        public override void OnTravel(VRIL_ControllerActionEventArgs e)
        {
            if (IsActivated && !DelayToNextTravel)
            {
                // if a valid position is selected, travel is triggered
                if (PositionSelected)
                {
                    PlayAudio();
                    SaveDistancesToViewpoint();
                    Viewpoint.transform.position = TargetPosition;
                    TransferSelectedObjects();
                    PositionSelected  = false;
                    Timer             = 0.0f;
                    DelayToNextTravel = true;

                    // blink scene away immediately
                    if (SceneBlinksAway)
                    {
                        SteamVR_Fade.View(SceneOffColor, 0);
                        SceneOff = true;
                    }
                }

                if (HitEntity != null)
                {
                    HitEntity.SetActive(false);
                }

                IsActivated = false;

                // in case travel does not disabled technique, selection mode is actived again
                if (!TravelDisablesTechnique)
                {
                    IsActivated = true;
                    StartCoroutine(SelectPosition(e));
                }
            }
        }
        /// <summary>
        /// Called from <see cref="VRIL_Manager"/> when a button is pressed
        /// </summary>
        /// <param name="sender">sending class</param>
        /// <param name="e">EventArgs that contains the controller, buttonType, buttonInteractionType</param>
        /// <see cref="VRIL_Manager"/>
        /// <seealso cref="VRIL_ControllerActionEventArgs"/>
        public override void ControllerAction(object sender, VRIL_ControllerActionEventArgs e)
        {
            foreach (VRIL_ActionMapping mapping in Mappings)
            {
                if (mapping.ButtonType == e.ButtonType)
                {
                    switch (mapping.ActionType)
                    {
                    case VRIL_ActionTypes.None:
                        break;

                    case VRIL_ActionTypes.OnSelection:
                        OnSelection(e);
                        break;

                    case VRIL_ActionTypes.OnActivation:
                        OnActivation(e);
                        break;

                    case VRIL_ActionTypes.OnInteraction:
                        OnInteraction(e);
                        break;

                    case VRIL_ActionTypes.OnRelease:
                        OnRelease(e);
                        break;

                    case VRIL_ActionTypes.OnStop:
                        OnStop(e);
                        break;

                    case VRIL_ActionTypes.CustomScript:
                        mapping.Script.OnCall();
                        break;
                    }
                }
            }
        }
    void Update()
    {
        if (LeftHand != null && RightHand != null)
        {
            if (Input.GetKeyDown(KeyCode.Alpha1))
            {
                selectedController = Controller.LeftController;
                UIText.text        = "Selected Controller: LeftController";
            }

            if (Input.GetKeyDown(KeyCode.Alpha2))
            {
                selectedController = Controller.RightController;
                UIText.text        = "Selected Controller: RightController";
            }

            if (Input.GetKeyDown(KeyCode.Alpha3))
            {
                selectedController = Controller.AdditionalController;
                UIText.text        = "Selected Controller: 3rd Controller";
            }

            if (Input.GetMouseButtonDown(0))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(0, VRIL.Base.VRIL_ButtonType.Button1, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager?.OnControllerAction(e);
            }

            if (Input.GetMouseButtonUp(0))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(0, VRIL.Base.VRIL_ButtonType.Button1, VRIL.Base.VRIL_ButtonInteractionType.Released);
                Manager?.OnControllerAction(e);
            }

            if (Input.GetMouseButtonDown(1))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(2, VRIL.Base.VRIL_ButtonType.Button1, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager?.OnControllerAction(e);
            }

            if (Input.GetMouseButtonUp(1))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(2, VRIL.Base.VRIL_ButtonType.Button1, VRIL.Base.VRIL_ButtonInteractionType.Released);
                Manager?.OnControllerAction(e);
            }

            if (Input.GetKeyDown(KeyCode.R))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(1, VRIL.Base.VRIL_ButtonType.Touchpad, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager?.OnControllerAction(e);
            }

            if (Input.GetKeyDown(KeyCode.F) && pressedF == false)
            {
                if (selectedController == Controller.LeftController)
                {
                    VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(0, VRIL.Base.VRIL_ButtonType.Trigger, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                    Manager?.OnControllerAction(e);
                }
                else if (selectedController == Controller.RightController)
                {
                    VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(1, VRIL.Base.VRIL_ButtonType.Trigger, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                    Manager?.OnControllerAction(e);
                }
                else
                {
                    VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(2, VRIL.Base.VRIL_ButtonType.Trigger, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                    Manager?.OnControllerAction(e);
                }

                pressedF = true;
            }

            if (Input.GetKeyUp(KeyCode.F) && pressedF)
            {
                if (selectedController == Controller.LeftController)
                {
                    VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(0, VRIL.Base.VRIL_ButtonType.Trigger, VRIL.Base.VRIL_ButtonInteractionType.Released);
                    Manager?.OnControllerAction(e);
                }
                else if (selectedController == Controller.RightController)
                {
                    VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(1, VRIL.Base.VRIL_ButtonType.Trigger, VRIL.Base.VRIL_ButtonInteractionType.Released);
                    Manager?.OnControllerAction(e);
                }
                else
                {
                    VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(2, VRIL.Base.VRIL_ButtonType.Trigger, VRIL.Base.VRIL_ButtonInteractionType.Released);
                    Manager?.OnControllerAction(e);
                }

                pressedF = false;
            }

            // stop all
            if (Input.GetKey(KeyCode.Space))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(0, VRIL.Base.VRIL_ButtonType.Button2, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager?.OnControllerAction(e);

                VRIL_ControllerActionEventArgs e2 = new VRIL_ControllerActionEventArgs(2, VRIL.Base.VRIL_ButtonType.Button2, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager?.OnControllerAction(e2);
            }

            // rotation
            if (Input.GetKey(KeyCode.Q))
            {
                if (selectedController == Controller.LeftController)
                {
                    LeftHand.transform.Rotate(0, -RotationFactor, 0);
                }
                else if (selectedController == Controller.RightController)
                {
                    RightHand.transform.Rotate(0, -RotationFactor, 0);
                }
                else
                {
                    AdditionalHand.transform.Rotate(0, -RotationFactor, 0);
                }
            }

            if (Input.GetKey(KeyCode.E))
            {
                if (selectedController == Controller.LeftController)
                {
                    LeftHand.transform.Rotate(0, RotationFactor, 0);
                }
                else if (selectedController == Controller.RightController)
                {
                    RightHand.transform.Rotate(0, RotationFactor, 0);
                }
                else
                {
                    AdditionalHand.transform.Rotate(0, RotationFactor, 0);
                }
            }
            // up down
            if (Input.GetKey(KeyCode.W))
            {
                if (selectedController == Controller.LeftController)
                {
                    LeftHand.transform.localPosition = new Vector3(LeftHand.transform.position.x, LeftHand.transform.position.y + MoveFactor, LeftHand.transform.position.z);
                }
                else if (selectedController == Controller.RightController)
                {
                    RightHand.transform.localPosition = new Vector3(RightHand.transform.position.x, RightHand.transform.position.y + MoveFactor, RightHand.transform.position.z);
                }
                else
                {
                    AdditionalHand.transform.localPosition = new Vector3(AdditionalHand.transform.position.x, AdditionalHand.transform.position.y + MoveFactor, AdditionalHand.transform.position.z);
                }
            }

            if (Input.GetKey(KeyCode.S))
            {
                if (selectedController == Controller.LeftController)
                {
                    LeftHand.transform.localPosition = new Vector3(LeftHand.transform.position.x, LeftHand.transform.position.y - MoveFactor, LeftHand.transform.position.z);
                }
                else if (selectedController == Controller.RightController)
                {
                    RightHand.transform.localPosition = new Vector3(RightHand.transform.position.x, RightHand.transform.position.y - MoveFactor, RightHand.transform.position.z);
                }
                else
                {
                    AdditionalHand.transform.localPosition = new Vector3(AdditionalHand.transform.position.x, AdditionalHand.transform.position.y - MoveFactor, AdditionalHand.transform.position.z);
                }
            }
        }
    }
    void Update()
    {
        if (LeftHand != null && RightHand != null && Manager != null && Viewpoint != null)
        {
            if (Input.GetKeyDown(KeyCode.Alpha1))
            {
                SelectedController = Controller.LeftController;
                UIText.text        = "Selected Controller: LeftController";
            }

            if (Input.GetKeyDown(KeyCode.Alpha2))
            {
                SelectedController = Controller.RightController;
                UIText.text        = "Selected Controller: RightController";
            }

            if (Input.GetMouseButtonDown(0))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(ControllerNumberMapping[SelectedController], VRIL.Base.VRIL_ButtonType.Button1, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager.OnControllerAction(e);
            }

            if (Input.GetMouseButtonUp(0))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(ControllerNumberMapping[SelectedController], VRIL.Base.VRIL_ButtonType.Button1, VRIL.Base.VRIL_ButtonInteractionType.Released);
                Manager.OnControllerAction(e);
            }

            if (Input.GetMouseButtonDown(1))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(ControllerNumberMapping[SelectedController], VRIL.Base.VRIL_ButtonType.Button1, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager.OnControllerAction(e);
            }

            if (Input.GetMouseButtonUp(1))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(ControllerNumberMapping[SelectedController], VRIL.Base.VRIL_ButtonType.Button1, VRIL.Base.VRIL_ButtonInteractionType.Released);
                Manager.OnControllerAction(e);
            }

            if (Input.GetKeyDown(KeyCode.R))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(ControllerNumberMapping[SelectedController], VRIL.Base.VRIL_ButtonType.Touchpad, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager.OnControllerAction(e);
            }

            if (Input.GetKeyDown(KeyCode.F) && pressedF == false)
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(ControllerNumberMapping[SelectedController], VRIL.Base.VRIL_ButtonType.Trigger, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager.OnControllerAction(e);
                pressedF = true;
            }
            if (Input.GetKeyUp(KeyCode.F) && pressedF)
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(ControllerNumberMapping[SelectedController], VRIL.Base.VRIL_ButtonType.Trigger, VRIL.Base.VRIL_ButtonInteractionType.Released);
                Manager.OnControllerAction(e);
                pressedF = false;
            }

            // stop all
            if (Input.GetKey(KeyCode.Space))
            {
                VRIL_ControllerActionEventArgs e = new VRIL_ControllerActionEventArgs(0, VRIL.Base.VRIL_ButtonType.Button2, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager.OnControllerAction(e);

                VRIL_ControllerActionEventArgs e2 = new VRIL_ControllerActionEventArgs(2, VRIL.Base.VRIL_ButtonType.Button2, VRIL.Base.VRIL_ButtonInteractionType.Pressed);
                Manager.OnControllerAction(e2);
            }

            // rotation
            if (Input.GetKey(KeyCode.Q))
            {
                Viewpoint.transform.Rotate(0, -RotationFactor, 0);
            }

            if (Input.GetKey(KeyCode.E))
            {
                Viewpoint.transform.Rotate(0, RotationFactor, 0);
            }
            if (Input.GetKey(KeyCode.W))
            {
                if (SelectedController == Controller.LeftController)
                {
                    LeftHand.transform.position = new Vector3(LeftHand.transform.position.x, LeftHand.transform.position.y + MoveFactor, LeftHand.transform.position.z);
                }
                else if (SelectedController == Controller.RightController)
                {
                    RightHand.transform.position = new Vector3(RightHand.transform.position.x, RightHand.transform.position.y + MoveFactor, RightHand.transform.position.z);
                }
            }

            if (Input.GetKey(KeyCode.S))
            {
                if (SelectedController == Controller.LeftController)
                {
                    LeftHand.transform.position = new Vector3(LeftHand.transform.position.x, LeftHand.transform.position.y - MoveFactor, LeftHand.transform.position.z);
                }
                else if (SelectedController == Controller.RightController)
                {
                    RightHand.transform.position = new Vector3(RightHand.transform.position.x, RightHand.transform.position.y - MoveFactor, RightHand.transform.position.z);
                }
            }

            if (Input.GetKey(KeyCode.Y))
            {
                if (SelectedController == Controller.LeftController)
                {
                    LeftHand.transform.Rotate(-RotationFactor, 0, 0);
                }
                else if (SelectedController == Controller.RightController)
                {
                    RightHand.transform.Rotate(-RotationFactor, 0, 0);
                }
            }

            if (Input.GetKey(KeyCode.X))
            {
                if (SelectedController == Controller.LeftController)
                {
                    LeftHand.transform.Rotate(RotationFactor, 0, 0);
                }
                else if (SelectedController == Controller.RightController)
                {
                    RightHand.transform.Rotate(RotationFactor, 0, 0);
                }
            }

            if (Input.GetKey(KeyCode.A))
            {
                if (SelectedController == Controller.LeftController)
                {
                    LeftHand.transform.Rotate(0, -RotationFactor, 0);
                }
                else if (SelectedController == Controller.RightController)
                {
                    RightHand.transform.Rotate(0, -RotationFactor, 0);
                }
            }

            if (Input.GetKey(KeyCode.D))
            {
                if (SelectedController == Controller.LeftController)
                {
                    LeftHand.transform.Rotate(0, RotationFactor, 0);
                }
                else if (SelectedController == Controller.RightController)
                {
                    RightHand.transform.Rotate(0, RotationFactor, 0);
                }
            }
        }
        else
        {
            Debug.LogWarning("Controller, Manager or Viewpoint not set! No action is performed.");
        }
    }
 /// <summary>
 /// Called when the travel should be performed
 /// </summary>
 /// <param name="e">ControllerActionEventArgs</param>
 public abstract void OnTravel(VRIL_ControllerActionEventArgs e);
예제 #25
0
 public override void OnTravel(VRIL_ControllerActionEventArgs e)
 {
     PlayAudio();
     IsActivated = true;
     StartCoroutine(GrabTheAir(e));
 }
예제 #26
0
 /// <summary>
 /// Called when the technique is activated
 /// </summary>
 /// <param name="e">ControllerActionEventArgs</param>
 public abstract void OnActivation(VRIL_ControllerActionEventArgs e);
예제 #27
0
 /// <summary>
 /// Technique stop
 /// </summary>
 /// <param name="e">ControllerEvent</param>
 public override void OnStop(VRIL_ControllerActionEventArgs e)
 {
     selectionModeActivated    = false;
     manipulationModeActivated = false;
     LineRenderer.enabled      = false;
 }
예제 #28
0
 /// <summary>
 /// Stop interaction technique and coroutine
 /// </summary>
 /// <param name="e"></param>
 public override void OnStop(VRIL_ControllerActionEventArgs e)
 {
     IsActivated = false;
 }
        /// <summary>
        /// Coroutine for vizualization of the target selection
        /// It is "virtual" to allow custom ray implementation in future (such as curved trajectories or just a straight line)
        /// </summary>
        /// <returns>WaitForSeconds()</returns>
        protected virtual IEnumerator SelectPosition(VRIL_ControllerActionEventArgs e)
        {
            TeleportLineRenderer.enabled = true;
            while (IsActivated)
            {
                // disable hit entity to avoid ray cast blocking
                if (HitEntity != null)
                {
                    HitEntity.SetActive(false);
                }

                TeleportLineRenderer.startColor = InvalidPositionColor;
                TeleportLineRenderer.endColor   = InvalidPositionColor;

                // first point of curve is at controller
                Vector3        p0        = RegisteredControllers[0].transform.position;
                List <Vector3> positions = new List <Vector3>()
                {
                    p0
                };

                // save last point
                Vector3 lastPoint       = p0;
                bool    hit             = false;
                Vector3 InitialVelocity = RegisteredControllers[0].transform.forward * CurveVelocity;
                Vector3 velocity        = transform.TransformDirection(InitialVelocity);
                float   t = 0;

                // calculate all points
                for (int i = 1; i <= NumberOfRayFragments && !hit; i++)
                {
                    t += 0.3f / ParabolicCurveDeriv(velocity, Physics.gravity, t).magnitude;
                    Vector3 curPoint = GetTrajectoryVector(p0, velocity, Physics.gravity, t);
                    Vector3 diff     = curPoint - lastPoint;
                    Ray     ray      = new Ray(lastPoint, diff.normalized);

                    // check next trajectory part for object collision
                    if (Physics.Raycast(ray, out RaycastHit raycastHit, diff.magnitude))
                    {
                        VRIL_Navigable navigableObject = raycastHit.transform.gameObject.GetComponent <VRIL_Navigable>();

                        // valid position in case it is navigable and angle is allowed
                        if (navigableObject && Vector3.Angle(raycastHit.normal, Vector3.up) <= MaximumSurfaceAngle)
                        {
                            TargetPosition   = raycastHit.point;
                            PositionSelected = true;
                            if (HitEntity != null)
                            {
                                HitEntity.transform.position =
                                    TargetPosition + new Vector3(0f, DistanceHitEntityToGround, 0f);
                                HitEntity.SetActive(true);
                                HitEntity.transform.up = raycastHit.normal;
                            }

                            TargetPosition += new Vector3(0, DistanceViewpointToGround, 0);
                            TeleportLineRenderer.startColor = ValidPositionColor;
                            TeleportLineRenderer.endColor   = ValidPositionColor;
                        }
                        else
                        {
                            PositionSelected = false;
                        }

                        positions.Add(raycastHit.point);
                        hit = true;
                    }
 /// <summary>
 /// Called when the interaction technique should stop
 /// </summary>
 /// <param name="e">ControllerActionEventArgs</param>
 public abstract void OnStop(VRIL_ControllerActionEventArgs e);