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())); }
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 })); }
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 })); }
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 })); }
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)); }