Beispiel #1
0
        public IEnumerator InputSimulationHandsFreeInteraction()
        {
            var iss = PlayModeTestUtilities.GetInputSimulationService();

            TestUtilities.PlayspaceToOriginLookingForward();
            yield return(null);

            // Subscribe to interactable's on click so we know the click went through
            bool wasClicked = false;

            interactable.OnClick.AddListener(() => { wasClicked = true; });

            // start click on the cube
            KeyInputSystem.PressKey(iss.InputSimulationProfile.InteractionButton);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // release the click on the cube
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.InteractionButton);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(null);

            // Check to see that the cube was clicked on
            Assert.True(wasClicked);
        }
Beispiel #2
0
        public IEnumerator InputSimulationArticulatedHandGesture()
        {
            var iss = PlayModeTestUtilities.GetInputSimulationService();

            TestUtilities.PlayspaceToOriginLookingForward();
            yield return(null);

            // Check that gaze cursor is initially visible
            Assert.True(CoreServices.InputSystem.GazeProvider.GazeCursor.IsVisible);

            // Begin right hand manipulation
            KeyInputSystem.PressKey(iss.InputSimulationProfile.RightHandManipulationKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(null);

            // Make sure right hand is tracked
            Assert.True(iss.HandDataRight.IsTracked);
            Assert.True(!iss.HandDataLeft.IsTracked);

            // Make sure gaze cursor is not visible
            Assert.True(!CoreServices.InputSystem.GazeProvider.GazeCursor.IsVisible);

            // start click
            KeyInputSystem.PressKey(iss.InputSimulationProfile.InteractionButton);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure correct hand is pinching
            Assert.True(iss.HandDataRight.IsPinching);
            Assert.True(!iss.HandDataLeft.IsPinching);

            // release the click
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.InteractionButton);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(null);

            // Make sure hands are not pinching anymore
            Assert.True(!iss.HandDataRight.IsPinching);
            Assert.True(!iss.HandDataLeft.IsPinching);

            // End right hand manipulation
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.RightHandManipulationKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            // Wait for the hand hide timeout to hide the hands
            yield return(new WaitForSeconds(iss.InputSimulationProfile.HandHideTimeout + 0.1f));

            // Make sure right hand is not tracked
            Assert.True(!iss.HandDataRight.IsTracked);
            Assert.True(!iss.HandDataLeft.IsTracked);

            // Check that gaze cursor is visible
            Assert.True(CoreServices.InputSystem.GazeProvider.GazeCursor.IsVisible);

            // Repeat with left hand
            // Begin left hand manipulation
            KeyInputSystem.PressKey(iss.InputSimulationProfile.LeftHandManipulationKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure left hand is tracked
            Assert.True(!iss.HandDataRight.IsTracked);
            Assert.True(iss.HandDataLeft.IsTracked);

            // Make sure gaze cursor is not visible
            Assert.True(!CoreServices.InputSystem.GazeProvider.GazeCursor.IsVisible);

            // start click
            KeyInputSystem.PressKey(iss.InputSimulationProfile.InteractionButton);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure correct hand is pinching
            Assert.True(!iss.HandDataRight.IsPinching);
            Assert.True(iss.HandDataLeft.IsPinching);

            // release the click
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.InteractionButton);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure hands are not pinching anymore
            Assert.True(!iss.HandDataRight.IsPinching);
            Assert.True(!iss.HandDataLeft.IsPinching);


            // End left hand manipulation
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.LeftHandManipulationKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            // Wait for the hand hide timeout to hide the hands
            yield return(new WaitForSeconds(iss.InputSimulationProfile.HandHideTimeout + 0.1f));

            // Make sure left hand is not tracked
            Assert.True(!iss.HandDataRight.IsTracked);
            Assert.True(!iss.HandDataLeft.IsTracked);

            // Check that gaze cursor is visible
            Assert.True(CoreServices.InputSystem.GazeProvider.GazeCursor.IsVisible);

            // Lastly with 2 hands
            // Begin hand manipulation
            KeyInputSystem.PressKey(iss.InputSimulationProfile.RightHandManipulationKey);
            KeyInputSystem.PressKey(iss.InputSimulationProfile.LeftHandManipulationKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure hands are tracked
            Assert.True(iss.HandDataRight.IsTracked);
            Assert.True(iss.HandDataLeft.IsTracked);

            // Make sure gaze cursor is not visible
            Assert.True(!CoreServices.InputSystem.GazeProvider.GazeCursor.IsVisible);

            // start click
            KeyInputSystem.PressKey(iss.InputSimulationProfile.InteractionButton);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure hands are pinching
            Assert.True(iss.HandDataRight.IsPinching);
            Assert.True(iss.HandDataLeft.IsPinching);

            // release the click
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.InteractionButton);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure hands are not pinching anymore
            Assert.True(!iss.HandDataRight.IsPinching);
            Assert.True(!iss.HandDataLeft.IsPinching);


            // End hand manipulation
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.RightHandManipulationKey);
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.LeftHandManipulationKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            // Wait for the hand hide timeout to hide the hands
            yield return(new WaitForSeconds(iss.InputSimulationProfile.HandHideTimeout + 0.1f));


            // Make sure hands are not tracked
            Assert.True(!iss.HandDataRight.IsTracked);
            Assert.True(!iss.HandDataLeft.IsTracked);

            // Check that gaze cursor is visible
            Assert.True(CoreServices.InputSystem.GazeProvider.GazeCursor.IsVisible);
        }
        public IEnumerator InputSimulationBothMotionControllerButtonState()
        {
            var iss = PlayModeTestUtilities.GetInputSimulationService();
            // Switch to motion controller
            var oldHandSimMode = iss.ControllerSimulationMode;

            iss.ControllerSimulationMode = ControllerSimulationMode.MotionController;
            TestUtilities.PlayspaceToOriginLookingForward();
            yield return(null);

            // Check that gaze cursor is initially visible
            Assert.True(CoreServices.InputSystem.GazeProvider.GazeCursor.IsVisible);

            // Begin both motion controller manipulation
            KeyInputSystem.PressKey(iss.InputSimulationProfile.LeftControllerManipulationKey);
            KeyInputSystem.PressKey(iss.InputSimulationProfile.RightControllerManipulationKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(null);

            // Make sure both motion controllers are tracked
            Assert.True(iss.MotionControllerDataLeft.IsTracked);
            Assert.True(iss.MotionControllerDataRight.IsTracked);

            // Make sure gaze cursor is not visible
            Assert.True(!CoreServices.InputSystem.GazeProvider.GazeCursor.IsVisible);

            // press trigger
            KeyInputSystem.PressKey(iss.InputSimulationProfile.MotionControllerTriggerKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure both motion controllers are selecting
            Assert.True(iss.MotionControllerDataLeft.ButtonState.IsSelecting);
            Assert.True(iss.MotionControllerDataRight.ButtonState.IsSelecting);

            // release the button
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.MotionControllerTriggerKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(null);

            // Make sure motion controllers are not selecting anymore
            Assert.True(!iss.MotionControllerDataLeft.ButtonState.IsSelecting);
            Assert.True(!iss.MotionControllerDataRight.ButtonState.IsSelecting);

            // press grab
            KeyInputSystem.PressKey(iss.InputSimulationProfile.MotionControllerGrabKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure both motion controllers are grabbing
            Assert.True(iss.MotionControllerDataLeft.ButtonState.IsGrabbing);
            Assert.True(iss.MotionControllerDataRight.ButtonState.IsGrabbing);

            // release the button
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.MotionControllerGrabKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(null);

            // Make sure motion controllers are not grabbing anymore
            Assert.True(!iss.MotionControllerDataLeft.ButtonState.IsGrabbing);
            Assert.True(!iss.MotionControllerDataRight.ButtonState.IsGrabbing);

            // press menu
            KeyInputSystem.PressKey(iss.InputSimulationProfile.MotionControllerMenuKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure both motion controllers are pressing menu
            Assert.True(iss.MotionControllerDataLeft.ButtonState.IsPressingMenu);
            Assert.True(iss.MotionControllerDataRight.ButtonState.IsPressingMenu);

            // release the button
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.MotionControllerMenuKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(null);

            // Make sure motion controllers are not pressing menu anymore
            Assert.True(!iss.MotionControllerDataLeft.ButtonState.IsPressingMenu);
            Assert.True(!iss.MotionControllerDataRight.ButtonState.IsPressingMenu);

            // press all three buttons
            KeyInputSystem.PressKey(iss.InputSimulationProfile.MotionControllerTriggerKey);
            KeyInputSystem.PressKey(iss.InputSimulationProfile.MotionControllerGrabKey);
            KeyInputSystem.PressKey(iss.InputSimulationProfile.MotionControllerMenuKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(PlayModeTestUtilities.WaitForInputSystemUpdate());

            // Make sure both motion controllers are pressing three buttons
            Assert.True(iss.MotionControllerDataLeft.ButtonState.IsSelecting);
            Assert.True(iss.MotionControllerDataRight.ButtonState.IsSelecting);
            Assert.True(iss.MotionControllerDataLeft.ButtonState.IsGrabbing);
            Assert.True(iss.MotionControllerDataRight.ButtonState.IsGrabbing);
            Assert.True(iss.MotionControllerDataLeft.ButtonState.IsPressingMenu);
            Assert.True(iss.MotionControllerDataRight.ButtonState.IsPressingMenu);

            // release the button
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.MotionControllerTriggerKey);
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.MotionControllerGrabKey);
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.MotionControllerMenuKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            yield return(null);

            // Make sure motion controllers are not pressing three buttons anymore
            Assert.True(!iss.MotionControllerDataLeft.ButtonState.IsSelecting);
            Assert.True(!iss.MotionControllerDataRight.ButtonState.IsSelecting);
            Assert.True(!iss.MotionControllerDataLeft.ButtonState.IsGrabbing);
            Assert.True(!iss.MotionControllerDataRight.ButtonState.IsGrabbing);
            Assert.True(!iss.MotionControllerDataLeft.ButtonState.IsPressingMenu);
            Assert.True(!iss.MotionControllerDataRight.ButtonState.IsPressingMenu);


            // End both motion controller manipulation
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.LeftControllerManipulationKey);
            KeyInputSystem.ReleaseKey(iss.InputSimulationProfile.RightControllerManipulationKey);
            yield return(null);

            KeyInputSystem.AdvanceSimulation();
            // Wait for the motion controller hide timeout to hide the motion controllers
            yield return(new WaitForSeconds(iss.InputSimulationProfile.ControllerHideTimeout + 0.1f));

            // Make sure both motion controllers are not tracked
            Assert.True(!iss.MotionControllerDataLeft.IsTracked);
            Assert.True(!iss.MotionControllerDataRight.IsTracked);


            // Restore the input simulation profile
            iss.ControllerSimulationMode = oldHandSimMode;
            yield return(null);
        }