public void FindPath(Transform _startPos, Transform _endPos)
    {
        if (!readyToCountPath)
        {
            return;
        }
        startPos = _startPos;
        endPos   = _endPos;
        if (_startPos == null || _endPos == null)
        {
            print("Missing start position or endposition");
            return;
        }

        //Basic raycast if can move directly to end target
        bool cantSeeTarget = Physics2D.Linecast(_startPos.transform.position, _endPos.position, Grid.instance.unwalkableMask);

        if (cantSeeTarget == false)
        {
            Vector3[] newPath = new Vector3[1];
            newPath[0] = _endPos.position;
            OnPathFound(newPath);
            StartCoroutine(PathCountDelay());
            return;
        }

        if (_endPos.position != endPosition)
        {
            endPosition      = _endPos.position;
            readyToCountPath = false;

            if (Grid.instance.useThreading)
            {
                ThreadController.SearchPathRequest(this, _startPos.position, endPosition);
            }
            else
            {
                Node      start   = Grid.instance.ClosestNodeFromWorldPoint(_startPos.position);
                Node      end     = Grid.instance.ClosestNodeFromWorldPoint(endPosition);
                Vector3[] newPath = AStar.FindPath(start, end);
                OnPathFound(newPath);
                StartCoroutine(PathCountDelay());
            }
        }
    }
    public void FindPath(Transform _seeker, Vector2 _endPos)
    {
        if (!readyToCountPath)
        {
            return;
        }

        else if (_seeker == null)
        {
            UnityEngine.Debug.LogError("Missing seeker!", this);
            return;
        }

        startPos = _seeker;
        endPos   = _endPos;
        Grid grid = Grid.instance;

        //Basic raycast if can move directly to end target

        //bool cantSeeTarget = Physics2D.Linecast(_seeker.transform.position, _endPos, grid.unwalkableMask);
        //if (cantSeeTarget == false)
        //{
        //    Vector2[] newPath = new Vector2[1];
        //    newPath[0] = _endPos;
        //    OnPathFound(newPath);
        //    sw.Stop();
        //    print("Time took to find path: " + sw.ElapsedMilliseconds);
        //    StartCoroutine(PathCountDelay());
        //    return;
        //}

        if (_endPos != endPosition)
        {
            endPosition = _endPos;
            ThreadController.SearchPathRequest(this, _seeker.position, endPosition, grid);
        }
    }