/// <summary>
    /// the requester must have an target for this to work as intended
    /// </summary>
    protected Vector2 ApplyAvoidance(AIAgent requester, Vector2 requesterPosition, Vector2 currentDesiredPostion, bool linearWeight, int anglesRangeToIgnore)
    {
        Vector2 des = requester.Destination;
        Vector2?avoidanceTemp;
        AIAgent avoidanceObj;


        if (perpendicular)
        {
            avoidanceTemp = SteeringBehaviour.ObstacleAvoidance(requester, requesterPosition,
                                                                (currentDesiredPostion - requesterPosition).normalized, out avoidanceObj);
        }

        else
        {
            avoidanceTemp = SteeringBehaviour.ObstacleAvoidance(requester, requesterPosition, out avoidanceObj);
        }



        if (UseObstacleAvoidance(requester, avoidanceTemp, avoidanceObj, des, anglesRangeToIgnore))
        {
            float avoidanceWeight = GetAvoidanceWeight(requester, requesterPosition, avoidanceObj.transform.position, linearWeight);
            currentDesiredPostion = Vector2.Lerp(currentDesiredPostion, avoidanceTemp.Value, avoidanceWeight * requester.data.aviodanceWieghtMultiplier);
        }
        return(currentDesiredPostion);
    }