private void OnArrowPress(int i) { ArrowButtonDirection direction = ArrowButtonDirection.Up; switch (i) { case 0: direction = ArrowButtonDirection.Up; break; case 1: direction = ArrowButtonDirection.Left; break; case 2: direction = ArrowButtonDirection.Right; break; case 3: direction = ArrowButtonDirection.Down; break; default: throw new InvalidOperationException(); } var nextButton = CrackboxLogic.GetNextIndex(currentlySelectedItem, gridItems, direction); BoxRenderers[currentlySelectedItem].material = gridItems[currentlySelectedItem].IsBlack ? GridBoxBlack : GridBoxNormal; BoxRenderers[nextButton].material = GridBoxSelected; currentlySelectedItem = nextButton; }
public static int GetNextIndex(int currentIndex, CrackboxGridItem[] gridItems, ArrowButtonDirection direction) { int neighbour = 0; if (currentIndex < 0 || currentIndex + 1 > gridItems.Length) { throw new ArgumentException("Current index is incorrect " + currentIndex); } var currentGridItem = gridItems[currentIndex]; switch (direction) { case ArrowButtonDirection.Up: neighbour = currentGridItem.UpNeighbour; break; case ArrowButtonDirection.Down: neighbour = currentGridItem.DownNeighbour; break; case ArrowButtonDirection.Right: neighbour = currentGridItem.RightNeighbour; break; case ArrowButtonDirection.Left: neighbour = currentGridItem.LeftNeighbour; break; default: throw new InvalidOperationException(); } //var newGridItem = gridItems[neighbour]; //if (newGridItem.IsBlack) //{ // return GetNextIndex(neighbour, gridItems, direction); //} return(neighbour); }