internal static void SetNextPose(this XRControllerRecorder recorder, Vector3 position, Quaternion rotation, bool selectActive, bool activateActive, bool pressActive) { XRControllerRecording currentRecording = recorder.recording; currentRecording.InitRecording(); currentRecording.AddRecordingFrame(0.0f, position, rotation, selectActive, activateActive, pressActive); currentRecording.AddRecordingFrame(1000f, position, rotation, selectActive, activateActive, pressActive); recorder.recording = currentRecording; recorder.ResetPlayback(); recorder.isPlaying = true; }
public IEnumerator TrackedDevicesCanDriveUI() { TestObjects testObjects = SetupUIScene(); UICallbackReceiver leftUIReceiver = testObjects.leftUIReceiver; UICallbackReceiver rightUIReceiver = testObjects.rightUIReceiver; XRControllerRecorder recorder = testObjects.controllerRecorder; // Reset to Defaults recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -90.0f, 0.0f), false, false, false); yield return(TestUtilities.WaitForInteraction()); leftUIReceiver.Reset(); rightUIReceiver.Reset(); // Move over left child. recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, false); yield return(TestUtilities.WaitForInteraction()); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(1)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Enter)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Check basic down/up recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, true); yield return(TestUtilities.WaitForInteraction()); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Down)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.PotentialDrag)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, false); yield return(TestUtilities.WaitForInteraction()); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Up)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.Click)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Check down and drag recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, true); yield return(TestUtilities.WaitForInteraction()); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Down)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.PotentialDrag)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Move to new location on left child recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -10.0f, 0.0f), false, false, true); yield return(TestUtilities.WaitForInteraction()); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.BeginDrag)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.Dragging)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Move children recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, 30.0f, 0.0f), false, false, true); yield return(TestUtilities.WaitForInteraction()); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Exit)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.Dragging)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(1)); Assert.That(rightUIReceiver.events[0].type, Is.EqualTo(EventType.Enter)); rightUIReceiver.Reset(); //Deselect recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, 30.0f, 0.0f), false, false, false); yield return(TestUtilities.WaitForInteraction()); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Up)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.EndDrag)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(1)); Assert.That(rightUIReceiver.events[0].type, Is.EqualTo(EventType.Drop)); rightUIReceiver.Reset(); }
IEnumerator CheckEvents(TestObjects testObjects) { UICallbackReceiver leftUIReceiver = testObjects.leftUIReceiver; UICallbackReceiver rightUIReceiver = testObjects.rightUIReceiver; XRControllerRecorder recorder = testObjects.controllerRecorder; // Reset to Defaults recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -90.0f, 0.0f), false, false, false); yield return(new WaitForSeconds(0.1f)); leftUIReceiver.Reset(); rightUIReceiver.Reset(); // Move over left child. recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, false); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(1)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Enter)); Assert.That(leftUIReceiver.events[0].data, Is.TypeOf <TrackedDeviceEventData>()); TrackedDeviceEventData eventData = (TrackedDeviceEventData)leftUIReceiver.events[0].data; Assert.That(eventData.interactor, Is.EqualTo(testObjects.interactor)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Check basic down/up recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, true); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Down)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.PotentialDrag)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, false); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Up)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.Click)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Check down and drag recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, true); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Down)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.PotentialDrag)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Move to new location on left child recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -10.0f, 0.0f), false, false, true); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.BeginDrag)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.Dragging)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Move children recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, 30.0f, 0.0f), false, false, true); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Exit)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.Dragging)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(1)); Assert.That(rightUIReceiver.events[0].type, Is.EqualTo(EventType.Enter)); rightUIReceiver.Reset(); //Deselect recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, 30.0f, 0.0f), false, false, false); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Up)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.EndDrag)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(1)); Assert.That(rightUIReceiver.events[0].type, Is.EqualTo(EventType.Drop)); rightUIReceiver.Reset(); }
public IEnumerator TrackedDevicesCanDriveUI() { TestObjects testObjects = SetupUIScene(); UICallbackReceiver leftUIReceiver = testObjects.leftUIReceiver; UICallbackReceiver rightUIReceiver = testObjects.rightUIReceiver; XRControllerRecorder recorder = testObjects.controllerRecorder; // Reset to Defaults recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -90.0f, 0.0f), false, false, false); yield return(new WaitForSeconds(0.1f)); leftUIReceiver.Reset(); rightUIReceiver.Reset(); // Move over left child. recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, false); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(1)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Enter)); Assert.That(leftUIReceiver.events[0].data, Is.TypeOf <TrackedDeviceEventData>()); TrackedDeviceEventData eventData = (TrackedDeviceEventData)leftUIReceiver.events[0].data; Assert.That(eventData.interactor, Is.EqualTo(testObjects.interactor)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Check basic down/up recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, true); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Down)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.PotentialDrag)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, false); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Up)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.Click)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Check down and drag recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -30.0f, 0.0f), false, false, true); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Down)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.PotentialDrag)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Move to new location on left child recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, -10.0f, 0.0f), false, false, true); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.BeginDrag)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.Dragging)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(0)); // Move children recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, 30.0f, 0.0f), false, false, true); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Exit)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.Dragging)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(1)); Assert.That(rightUIReceiver.events[0].type, Is.EqualTo(EventType.Enter)); rightUIReceiver.Reset(); //Deselect recorder.SetNextPose(Vector3.zero, Quaternion.Euler(0.0f, 30.0f, 0.0f), false, false, false); yield return(new WaitForSeconds(0.1f)); Assert.That(leftUIReceiver.events, Has.Count.EqualTo(2)); Assert.That(leftUIReceiver.events[0].type, Is.EqualTo(EventType.Up)); Assert.That(leftUIReceiver.events[1].type, Is.EqualTo(EventType.EndDrag)); leftUIReceiver.Reset(); Assert.That(rightUIReceiver.events, Has.Count.EqualTo(1)); Assert.That(rightUIReceiver.events[0].type, Is.EqualTo(EventType.Drop)); rightUIReceiver.Reset(); // This suppresses a warning that would be logged by TrackedDeviceGraphicRaycaster if the Camera is destroyed first Object.Destroy(testObjects.eventSystem.gameObject); }