void ClearInteractorHover(BaseInteractor interactor, List <BaseInteractable> validTargets)
 {
     interactor.GetHoverTargets(m_HoverTargetList);
     for (int i = 0; i < m_HoverTargetList.Count; i++)
     {
         var target = m_HoverTargetList[i];
         if (!interactor.allowHover || !interactor.CanHover(target) || !target.IsHoverableBy(interactor) || (validTargets == null || !validTargets.Contains(target)))
         {
             HoverExit(interactor, target);
         }
     }
 }
 void InteractorHoverValidTargets(BaseInteractor interactor, List <BaseInteractable> validTargets)
 {
     if (interactor.allowHover)
     {
         var orderedTargets = validTargets.OrderBy(x => x.priority).ToList();
         for (var i = 0; i < orderedTargets.Count; ++i)
         {
             interactor.GetHoverTargets(m_HoverTargetList);
             if (interactor.CanHover(orderedTargets[i]) &&
                 orderedTargets[i].IsHoverableBy(interactor) &&
                 !m_HoverTargetList.Contains(orderedTargets[i]))
             {
                 HoverEnter(interactor, orderedTargets[i]);
                 return;
             }
         }
     }
 }