示例#1
0
        void OnSelectTrigger(InputAction.CallbackContext obj)
        {
            if (!m_CanSelect)
            {
                return;
            }

            m_ObjectSelectionInfo.selectedObjects = m_Results.Select(x => x.Item1).Where(x => x != null).ToList();

            if (m_ObjectSelectionInfo.selectedObjects.Count == 0)
            {
                return;
            }

            if (m_ObjectSelectionInfo.selectedObjects[0] == m_PreviousGameObject)
            {
                m_ObjectSelectionInfo.currentIndex = (m_ObjectSelectionInfo.currentIndex + 1) % m_ObjectSelectionInfo.selectedObjects.Count;
            }
            else if (m_ObjectSelectionInfo.selectedObjects.Count > 1)
            {
                m_ObjectSelectionInfo.selectedObjects = m_ObjectSelectionInfo.selectedObjects.GetRange(0, 1);
                m_ObjectSelectionInfo.currentIndex    = 0;
            }

            m_ObjectSelectionInfo.userId  = m_CurrentUserId;
            m_ObjectSelectionInfo.colorId = 0;

            Dispatcher.Dispatch(SelectObjectAction.From(m_ObjectSelectionInfo));

            m_PreviousGameObject = m_ObjectSelectionInfo.selectedObjects[0];
        }
        public void Initialize(IARModeUIController resolver)
        {
            m_ARModeUIController = (ARModeUIController)resolver;
            m_Raycaster          = RaycasterRef.Resolve(m_ARModeUIController);

            DisposeSelectors();
            m_FirstSelectedPlaneGetter      = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.firstSelectedPlane));
            m_SecondSelectedPlaneGetter     = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.secondSelectedPlane));
            m_PlacementRuleGameObjectGetter = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.placementRulesGameObject));
            m_ObjectSelectionInfoGetter     = UISelectorFactory.createSelector <SelectObjectAction.IObjectSelectionInfo>(ProjectContext.current, nameof(IObjectSelectorDataProvider.objectSelectionInfo));

            m_States = new Dictionary <ViewBasedInstructionUI, SetARInstructionUIAction.InstructionUIStep>
            {
                { ViewBasedInstructionUI.Init, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)ViewBasedInstructionUI.Init, onNext = StartInstruction
                  } },
                { ViewBasedInstructionUI.AlignModelView, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)ViewBasedInstructionUI.AlignModelView, onNext = AlignModelViewNext, onBack = AlignModelViewBack
                  } },
                { ViewBasedInstructionUI.FindTheFloor, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)ViewBasedInstructionUI.FindTheFloor, onNext = FindTheFloorNext, onBack = FindTheFloorBack
                  } },
                { ViewBasedInstructionUI.ConfirmPlacement, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)ViewBasedInstructionUI.ConfirmPlacement, onNext = ConfirmPlacementNext, onBack = ConfirmPlacementBack
                  } },
                { ViewBasedInstructionUI.OnBoardingComplete, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)ViewBasedInstructionUI.OnBoardingComplete, onNext = OnBoardingCompleteNext
                  } },
            };
            Dispatcher.Dispatch(SelectObjectAction.From(new ObjectSelectionInfo()));
        }
示例#3
0
        void ConfirmAnchorPoint()
        {
            Dispatcher.Dispatch(SelectObjectAction.From(new ObjectSelectionInfo()));
            var arToolStateData = SetARToolStateAction.SetARToolStateData.defaultData;

            arToolStateData.navigationEnabled     = false;
            arToolStateData.previousStepEnabled   = true;
            arToolStateData.okButtonValidator     = this;
            arToolStateData.wallIndicatorsEnabled = true;
            arToolStateData.anchorPointsEnabled   = true;
            Dispatcher.Dispatch(SetARToolStateAction.From(arToolStateData));
            Dispatcher.Dispatch(SetActiveToolAction.From(SetActiveToolAction.ToolType.None));
            Dispatcher.Dispatch(SetStatusMessageWithType.From(
                                    new StatusMessageData()
            {
                text = m_InstructionConfirmAnchorPoint, type = StatusMessageType.Instruction
            }));
        }
示例#4
0
        void FindSecondWall()
        {
            Dispatcher.Dispatch(SelectObjectAction.From(new ObjectSelectionInfo()));
            var arToolState = SetARToolStateAction.SetARToolStateData.defaultData;

            arToolState.navigationEnabled     = false;
            arToolState.selectionEnabled      = true;
            arToolState.previousStepEnabled   = true;
            arToolState.okButtonValidator     = this;
            arToolState.wallIndicatorsEnabled = true;
            Dispatcher.Dispatch(SetARToolStateAction.From(arToolState));
            Dispatcher.Dispatch(SetActiveToolAction.From(SetActiveToolAction.ToolType.SelectTool));
            Dispatcher.Dispatch(SetStatusMessageWithType.From(
                                    new StatusMessageData()
            {
                text = m_InstructionFindSecondWall, type = StatusMessageType.Instruction
            }));
        }
示例#5
0
        void FindModelFloor()
        {
            m_PlaneSelector.Orientation = MarsPlaneAlignment.HorizontalUp;
            Dispatcher.Dispatch(SelectObjectAction.From(new ObjectSelectionInfo()));
            Dispatcher.Dispatch(SetSpatialSelectorAction.From(m_PlaneSelector));
            var arToolState = SetARToolStateAction.SetARToolStateData.defaultData;

            arToolState.navigationEnabled   = false;
            arToolState.selectionEnabled    = true;
            arToolState.previousStepEnabled = true;
            arToolState.okButtonValidator   = this;
            Dispatcher.Dispatch(SetARToolStateAction.From(arToolState));
            Dispatcher.Dispatch(SetActiveToolAction.From(SetActiveToolAction.ToolType.SelectTool));
            Dispatcher.Dispatch(SetStatusMessageWithType.From(
                                    new StatusMessageData()
            {
                text = m_InstructionFindModelFloor, type = StatusMessageType.Instruction
            }));
        }
示例#6
0
        public void Initialize(IARModeUIController resolver)
        {
            DisposeResources();
            m_ARModeUIController              = (ARModeUIController)resolver;
            m_Raycaster                       = RaycasterRef.Resolve(m_ARModeUIController);
            m_FirstSelectedPlaneSelector      = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.firstSelectedPlane));
            m_SecondSelectedPlaneSelector     = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.secondSelectedPlane));
            m_BoundinBoxRootSelector          = UISelectorFactory.createSelector <Transform>(ARPlacementContext.current, nameof(IARPlacementDataProvider.boundingBoxRootNode));
            m_ModelFloorSelector              = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.modelFloor));
            m_ARFloorSelector                 = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.arFloor));
            m_FirstARSelectedPlaneSelector    = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.firstARSelectedPlane));
            m_SecondARSelectedPlaneSelector   = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.secondARSelectedPlane));
            m_ModelPlacementLocationSelector  = UISelectorFactory.createSelector <Vector3>(ARPlacementContext.current, nameof(IARPlacementDataProvider.modelPlacementLocation));
            m_ARPlacementLocationSelector     = UISelectorFactory.createSelector <Vector3>(ARPlacementContext.current, nameof(IARPlacementDataProvider.arPlacementLocation));
            m_ARPlacementAlignmentSelector    = UISelectorFactory.createSelector <Vector3>(ARPlacementContext.current, nameof(IARPlacementDataProvider.arPlacementAlignment));
            m_RootSelector                    = UISelectorFactory.createSelector <Transform>(PipelineContext.current, nameof(IPipelineDataProvider.rootNode));
            m_PlacementRuleGameObjectSelector = UISelectorFactory.createSelector <GameObject>(ARPlacementContext.current, nameof(IARPlacementDataProvider.placementRulesGameObject));
            m_ObjectSelectionInfoSelector     = UISelectorFactory.createSelector <SelectObjectAction.IObjectSelectionInfo>(ProjectContext.current, nameof(IObjectSelectorDataProvider.objectSelectionInfo));

            m_States = new Dictionary <WallBasedInstructionUI, SetARInstructionUIAction.InstructionUIStep>
            {
                { WallBasedInstructionUI.Init, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)WallBasedInstructionUI.Init, onNext = StartInstruction
                  } },
                { WallBasedInstructionUI.AlignModelView, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)WallBasedInstructionUI.AlignModelView, onNext = AlignModelView, onBack = AlignModelViewBack
                  } },
                { WallBasedInstructionUI.FindModelFloor, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)WallBasedInstructionUI.FindModelFloor, onNext = FindModelFloor, onBack = FindModelFloorBack
                  } },
                {
                    WallBasedInstructionUI.FindFirstWall, new SetARInstructionUIAction.InstructionUIStep
                    {
                        stepIndex   = (int)WallBasedInstructionUI.FindFirstWall, onNext = FindFirstWallNext, onBack = FindFirstWallBack,
                        validations = new IPlacementValidation[] { new WallSizeValidation(1.0f) }
                    }
                },
                {
                    WallBasedInstructionUI.FindSecondWall, new SetARInstructionUIAction.InstructionUIStep
                    {
                        stepIndex   = (int)WallBasedInstructionUI.FindSecondWall, onNext = FindSecondWallNext, onBack = FindSecondWallBack,
                        validations = new IPlacementValidation[] { new WallSizeValidation(1.0f), new ParallelWallValidation(0.3f) }
                    }
                },
                { WallBasedInstructionUI.ConfirmAnchorPoint, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)WallBasedInstructionUI.ConfirmAnchorPoint, onNext = ConfirmAnchorPointNext, onBack = ConfirmAnchorPointBack
                  } },
                { WallBasedInstructionUI.FindTheFloor, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)WallBasedInstructionUI.FindTheFloor, onNext = FindTheARFloorNext, onBack = FindTheARFloorBack
                  } },
                { WallBasedInstructionUI.FindFirstARWall, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)WallBasedInstructionUI.FindFirstARWall, onNext = FindFirstARWallNext, onBack = FindFirstARWallBack
                  } },
                { WallBasedInstructionUI.FindSecondARWall, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)WallBasedInstructionUI.FindSecondARWall, onNext = FindSecondARWallNext, onBack = FindSecondARWallBack
                  } },
                { WallBasedInstructionUI.ConfirmARAnchorPoint, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)WallBasedInstructionUI.ConfirmARAnchorPoint, onNext = ConfirmARAnchorPointNext, onBack = ConfirmARAnchorPointBack
                  } },

                // TODO: Bring step back once we have adjustments enabled
                //{ WallBasedInstructionUI.ConfirmPlacement, new InstructionUIStep{ stepIndex = (int)WallBasedInstructionUI.ConfirmPlacement, onNext = ConfirmPlacementNext, onBack = ConfirmPlacementBack } },
                { WallBasedInstructionUI.OnBoardingComplete, new SetARInstructionUIAction.InstructionUIStep {
                      stepIndex = (int)WallBasedInstructionUI.OnBoardingComplete, onNext = OnBoardingCompleteNext
                  } },
            };
            m_PlaneSelector          = new SpatialOrientedPlaneSelector();
            m_ARAxisTrackingSelector = UISelectorFactory.createSelector <bool>(DebugOptionContext.current, nameof(IDebugOptionDataProvider.ARAxisTrackingEnabled));
            Dispatcher.Dispatch(SelectObjectAction.From(new ObjectSelectionInfo()));
        }
 void DispatchSelection(ObjectSelectionInfo info)
 {
     m_IsWaitingEnabling = false;
     Dispatcher.Dispatch(SelectObjectAction.From(info));
 }