Ejemplo n.º 1
0
    private void CheckCurrentSearchAroundTile()
    {
        //上下左右
        DoCheckTile(mCurrentNode.x + 1, mCurrentNode.y);
        DoCheckTile(mCurrentNode.x - 1, mCurrentNode.y);
        DoCheckTile(mCurrentNode.x, mCurrentNode.y + 1);
        DoCheckTile(mCurrentNode.x, mCurrentNode.y - 1);

        if (mHolder.GetTileSerachType() == CEPathFindBasic.TILE_SERACH_TYPE.EIGHT_DIRECTION)
        {
            //右上
            DoCheckTile(mCurrentNode.x + 1, mCurrentNode.y + 1);
            //右下
            DoCheckTile(mCurrentNode.x + 1, mCurrentNode.y - 1);
            //左下
            DoCheckTile(mCurrentNode.x - 1, mCurrentNode.y - 1);
            //左上
            DoCheckTile(mCurrentNode.x - 1, mCurrentNode.y + 1);
        }
        else if (mHolder.GetTileSerachType() == CEPathFindBasic.TILE_SERACH_TYPE.EIGHT_DIRECTION_FIX_CORNER)
        {
            var upTileWalkable    = mHolder.isTileWalkable(mCurrentNode.x, mCurrentNode.y + 1);
            var downTileWalkable  = mHolder.isTileWalkable(mCurrentNode.x, mCurrentNode.y - 1);
            var rightTileWalkable = mHolder.isTileWalkable(mCurrentNode.x + 1, mCurrentNode.y);
            var leftTileWalkable  = mHolder.isTileWalkable(mCurrentNode.x - 1, mCurrentNode.y);

            if (upTileWalkable && rightTileWalkable)
            {
                //右上
                DoCheckTile(mCurrentNode.x + 1, mCurrentNode.y + 1);
            }

            if (downTileWalkable && rightTileWalkable)
            {
                //右下
                DoCheckTile(mCurrentNode.x + 1, mCurrentNode.y - 1);
            }

            if (downTileWalkable && leftTileWalkable)
            {
                //左下
                DoCheckTile(mCurrentNode.x - 1, mCurrentNode.y - 1);
            }

            if (upTileWalkable && leftTileWalkable)
            {
                //左上
                DoCheckTile(mCurrentNode.x - 1, mCurrentNode.y + 1);
            }
        }
    }
Ejemplo n.º 2
0
    public void Reset(CEPathFindBasic _holder, int _startTileX, int _startTileY, int _endTileX, int _endTileY)
    {
        mHolder = _holder;

        mStarNode            = GetNewNode();
        mStarNode.x          = _startTileX;
        mStarNode.y          = _startTileY;
        mStarNode.isWalkable = mHolder.isTileWalkable(mStarNode.x, mStarNode.y);

        mEndNode            = GetNewNode();
        mEndNode.x          = _endTileX;
        mEndNode.y          = _endTileY;
        mEndNode.isWalkable = mHolder.isTileWalkable(mEndNode.x, mEndNode.y);

        mCurrentNode            = mStarNode;
        mCurrentNode.isWalkable = mHolder.isTileWalkable(mCurrentNode.x, mCurrentNode.y);
    }