Exemplo n.º 1
0
        void OnRayEntered(GameObject gameObject, TrackedDeviceEventData eventData)
        {
            var dropReceiver = ComponentUtils <IDropReceiver> .GetComponent(gameObject);

            if (dropReceiver != null)
            {
                var rayOrigin = eventData.interactor;
                if (dropReceiver.CanDrop(GetCurrentDropObject(rayOrigin)))
                {
                    dropReceiver.OnDropHoverStarted();
                    m_HoverObjects[rayOrigin] = gameObject;
                    SetCurrentDropReceiver(rayOrigin, dropReceiver);
                }
            }
        }
Exemplo n.º 2
0
        void OnDragEnded(GameObject gameObject, TrackedDeviceEventData eventData)
        {
            var droppable = ComponentUtils <IDroppable> .GetComponent(gameObject);

            if (droppable != null)
            {
                var rayOrigin = eventData.interactor;
                m_Droppables.Remove(rayOrigin);

                var dropReceiver = GetCurrentDropReceiver(rayOrigin);
                var dropObject   = droppable.GetDropObject();
                if (dropReceiver != null && dropReceiver.CanDrop(dropObject))
                {
                    dropReceiver.ReceiveDrop(droppable.GetDropObject());
                }
            }
        }
Exemplo n.º 3
0
        void OnRayExited(GameObject gameObject, TrackedDeviceEventData eventData)
        {
            if (!gameObject)
            {
                return;
            }

            var dropReceiver = ComponentUtils <IDropReceiver> .GetComponent(gameObject);

            if (dropReceiver != null)
            {
                var rayOrigin = eventData.interactor;
                if (m_HoverObjects.Remove(rayOrigin))
                {
                    dropReceiver.OnDropHoverEnded();
                    SetCurrentDropReceiver(rayOrigin, null);
                }
            }
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        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);
        }