예제 #1
0
        public void Test()
        {
            TestUtilities.InitializeMixedRealityToolkitAndCreateScenes(true);

            var selector = new DefaultPrimaryPointerSelector();

            selector.Initialize();

            // No primary pointer
            Assert.IsNull(selector.Update());

            var pointer1 = new TestPointer();

            Assert.IsFalse(pointer1.IsInteractionEnabled);

            selector.RegisterPointer(pointer1);

            // Still no primary pointer because pointer 1 is not interaction enabled
            Assert.IsNull(selector.Update());

            pointer1.IsInteractionEnabled = true;

            // Pointer 1 selected as primary
            Assert.AreSame(pointer1, selector.Update());

            pointer1.IsInteractionEnabled = false;

            // No primary pointer
            Assert.IsNull(selector.Update());

            pointer1.IsInteractionEnabled = true;

            // Pointer 1 selected as primary
            Assert.AreSame(pointer1, selector.Update());

            var pointer2 = new TestPointer();

            pointer2.IsInteractionEnabled = true;
            selector.RegisterPointer(pointer2);

            // Pointer 2 selected as primary because it got enabled last
            Assert.AreSame(pointer2, selector.Update());

            var pointerHandler = selector as IMixedRealityPointerHandler;
            var eventData      = new MixedRealityPointerEventData(null);

            // Pointer 1 down
            eventData.Initialize(pointer1, MixedRealityInputAction.None);
            pointerHandler.OnPointerDown(eventData);

            // Pointer 1 selected as primary because it is pressed
            Assert.AreSame(pointer1, selector.Update());

            // Pointer 2 down
            eventData.Initialize(pointer2, MixedRealityInputAction.None);
            pointerHandler.OnPointerDown(eventData);

            // Pointer 1 still primary because it has been pressed longer
            Assert.AreSame(pointer1, selector.Update());

            // Pointer 1 up
            eventData.Initialize(pointer1, MixedRealityInputAction.None);
            pointerHandler.OnPointerUp(eventData);

            // Pointer 2 primary because it is the only one pressed
            Assert.AreSame(pointer2, selector.Update());

            // Pointer 2 up
            eventData.Initialize(pointer2, MixedRealityInputAction.None);
            pointerHandler.OnPointerUp(eventData);

            // Pointer 2 still primary because it is the one released last
            Assert.AreSame(pointer2, selector.Update());

            selector.UnregisterPointer(pointer2);

            // Pointer 1 primary because it is the only one left and is interaction enabled
            Assert.AreSame(pointer1, selector.Update());

            selector.UnregisterPointer(pointer1);

            // No primary pointer
            Assert.IsNull(selector.Update());

            selector.Destroy();
        }