示例#1
0
    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);
        }
    }
示例#2
0
    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);
            }
        }
    }