public static GameBoardTile DetermineNextNode(GameBoardInstance gameBoard, GameBoardTile current, Vector2 destination) { float currentLowestDistance = Int16.MaxValue; float currentLowestHeuristic = Int16.MaxValue; GameBoardTile closestComponent = null; Vector2 origin = current.BoardVector; GameBoardTile[] neighboringTiles = gameBoard.GetHorizontalTiles(current, 1, true); for (int i = 0; i < neighboringTiles.Length; i++) { if (m_Tiles.Contains(neighboringTiles[i])) { continue; } float h = (neighboringTiles[i].BoardVector - destination).sqrMagnitude; float g = (neighboringTiles[i].BoardVector - origin).sqrMagnitude; float f = g + h; if (f < currentLowestDistance) { closestComponent = neighboringTiles[i]; currentLowestDistance = f; currentLowestHeuristic = h; } else if (f == currentLowestDistance) { if (h < currentLowestHeuristic) { closestComponent = neighboringTiles[i]; currentLowestDistance = f; currentLowestHeuristic = h; } } } if (closestComponent != null) { return(closestComponent); } else { return(null); } }
internal void SetFocusPiece(GamePiece piece) { if (m_CurrentFocusPiece == piece) { m_CurrentFocusPiece = null; m_GameBoardRelative.ClearCurrentSelections(); piece.DeactivateRotationCanvas(); } if (m_CurrentFocusPiece != null && m_CurrentFocusPiece != piece && (m_GameBoardRelative.SelectionType == SelectionType.Target || m_GameBoardRelative.SelectionType == SelectionType.Attack)) { GameBoardTile tile = m_GameBoardRelative.GetTileByVector(piece.BoardVector); if (m_GameBoardRelative.CurrentlySelectedTiles.Contains(tile)) { m_CurrentFocusPiece.HandleAttackSelection(tile); return; } } if (m_CurrentFocusPiece == null || (m_CurrentFocusPiece != null && !m_CurrentFocusPiece.IsActivelyEngaged)) { if (m_CurrentFocusPiece != null) { m_CurrentFocusPiece.DeactivateRotationCanvas(); m_GameBoardRelative.ClearCurrentSelections(); } m_CurrentFocusPiece = piece; } if (!m_CurrentFocusPiece.IsActivelyEngaged && (AccountManager.AccountInstance == null || m_CurrentFocusPiece.UnderLocalControl)) { if (m_GameBoardRelative.GetHorizontalTiles (m_GameBoardRelative.GetTileByVector(piece.BoardVector), 1, true).Length > 0) { m_GameBoardRelative.SelectTilesInRange (piece.BoardVector, piece.MovementRange, SelectionType.Movement, true, false); } } }