public bool TryNavigate(NavigationDirection Direction, NavigationWrappingMode HorizontalWrapping, NavigationWrappingMode VerticalWrapping) { if (IsGamepadFocused && HoveredButton == null) { if (IsLeftSidebarVisible) { HoveredButtonBounds = LeftSidebarButtonBounds.First(); } else if (IsRightSidebarVisible) { HoveredButtonBounds = RightSidebarButtonBounds.First(); } else { HoveredButtonBounds = null; } IsNavigatingWithGamepad = HoveredButton != null; return(HoveredButton != null); } else if (TryGetSlotNeighbor(HoveredButtonBounds, Direction, HorizontalWrapping, VerticalWrapping, out Rectangle? Neighbor)) { HoveredButtonBounds = Neighbor.Value; IsNavigatingWithGamepad = true; return(true); } else { return(false); } }
public bool TryNavigateEnter(NavigationDirection StartingSide, Rectangle?ClosestTo) { if (IsLeftSidebarVisible && StartingSide != NavigationDirection.Left) { IsGamepadFocused = true; IsNavigatingWithGamepad = true; if (ClosestTo.HasValue) { HoveredButtonBounds = LeftSidebarButtonBounds.OrderBy(x => x.SquaredDistanceBetweenCenters(ClosestTo.Value)).First(); } else { HoveredButtonBounds = LeftSidebarButtonBounds.First(); } return(true); } else if (IsRightSidebarVisible) { IsGamepadFocused = true; IsNavigatingWithGamepad = true; if (ClosestTo.HasValue) { HoveredButtonBounds = RightSidebarButtonBounds.OrderBy(x => x.SquaredDistanceBetweenCenters(ClosestTo.Value)).First(); } else { HoveredButtonBounds = RightSidebarButtonBounds.First(); } return(true); } else if (IsLeftSidebarVisible) { IsGamepadFocused = true; IsNavigatingWithGamepad = true; if (ClosestTo.HasValue) { HoveredButtonBounds = LeftSidebarButtonBounds.OrderBy(x => x.SquaredDistanceBetweenCenters(ClosestTo.Value)).First(); } else { HoveredButtonBounds = LeftSidebarButtonBounds.First(); } return(true); } else { HoveredButtonBounds = null; return(false); } }