void OnSelectedAnchorsDataChanged(SelectObjectDragToolAction.IAnchor newData)
        {
            if (newData == null)
            {
                if (m_DraggablePad.isActiveAndEnabled)
                {
                    Dispatcher.Dispatch(SetStatusMessageWithType.From(new StatusMessageData {
                        text = k_InstructionDragPoint, type = StatusMessageType.Instruction
                    }));
                }
                else
                {
                    Dispatcher.Dispatch(SetStatusMessageWithType.From(new StatusMessageData {
                        text = k_InstructionStart, type = StatusMessageType.Instruction
                    }));
                }

                return;
            }
            Dispatcher.Dispatch(ClearStatusAction.From(true));
            Dispatcher.Dispatch(ClearStatusAction.From(false));

            // Create Point
            if (!m_OnDrag)
            {
                if (!m_CurrentCursor.activeSelf)
                {
                    m_AnchorSelection.OnStateDataChanged(newData, m_CurrentCursor);
                    return;
                }
            }

            // Drag Existing Point
            m_AnchorSelection.OnStateDataChanged(newData);
        }
        void OnPickDragAsyncCallback(List <Tuple <GameObject, RaycastHit> > results)
        {
            if (results == null)
            {
                return;
            }

            var selectedObjects        = results.Select(x => x.Item1).Where(x => x.layer != MetadataFilter.k_OtherLayer);
            var selectedAnchorsContext = selectedObjects.Select(r => r.GetComponent <MarkerAnchorSelectionContext>()).Where(g => g != null).ToList();

            SelectObjectDragToolAction.IAnchor selectedAnchor = null;
            if (selectedAnchorsContext.Count > 0)
            {
                selectedAnchor = selectedAnchorsContext[0].LastContext.selectedAnchor;
            }

            Dispatcher.Dispatch(SelectObjectDragToolAction.From(selectedAnchor));
            OnAnchorDataChanged?.Invoke(selectedAnchor);
        }
 public void OnStateDataChanged(SelectObjectDragToolAction.IAnchor selectedAnchor, GameObject cursor = null)
 {
     if (cursor != null && selectedAnchor != null)
     {
         SetCursorUI(selectedAnchor, cursor);
         m_Anchor       = selectedAnchor;
         m_AnchorCursor = cursor;
         if (!cursor.activeSelf)
         {
             cursor.SetActive(true);
         }
         if (!m_VREnableGetter())
         {
             m_DraggablePad.gameObject.SetActive(true);
         }
     }
     else if ((m_VREnableGetter() || m_DraggablePad.button.IsActive()) && m_AnchorCursor)
     {
         SetCursorUI(selectedAnchor, m_AnchorCursor);
     }
 }
 public void ResetSelector()
 {
     m_AnchorCursor = null;
     m_Anchor       = null;
 }
 void SetCursorUI(SelectObjectDragToolAction.IAnchor selectedAnchor, GameObject cursor)
 {
     cursor.transform.position = selectedAnchor.position;
     cursor.transform.forward  = selectedAnchor.normal;
 }