private IFocusableItem GetCurrentFocusedItem() { IFocusableItem ret = TryGetFocusable(highPris); if (ret != null) { return(ret); } ret = TryGetFocusable(midPris); if (ret != null) { return(ret); } return(TryGetFocusable(lowPris)); }
public void RegisterFocusable(IFocusableItem focusable) { switch (focusable.Priority) { case FocusPriority.High: highPris.Add(focusable); break; case FocusPriority.Medium: midPris.Add(focusable); break; case FocusPriority.Low: default: lowPris.Add(focusable); break; } }
private IFocusableItem TryGetFocusable(IEnumerable <IFocusableItem> items) { Vector3 pokePoint = HandPrototypeProxies.Instance.RightIndex.position; Vector3 grabPoint = MainPinchDetector.Instance.PinchPoint.position; IFocusableItem ret = null; float closestDistance = float.PositiveInfinity; foreach (IFocusableItem item in items.Where(item => item.IsFocusable)) { Vector3 pointer = item.Source == FocusSource.Fingertip ? pokePoint : grabPoint; float dist = item.GetDistanceToPointer(pointer); if (dist < item.ActivationDistance && dist < closestDistance) { ret = item; closestDistance = dist; } } return(ret); }