public static BTStatus LandMovement(Animal agent, Vector2 direction, float speed, AnimalAnimationState state, float minDistance = 2f, float maxDistance = 20f, float minDirectionOffsetDegrees = 0, float maxDirectionOffsetDegrees = 360, int tryCount = 10)
 {
     var search = AIUtilities.FindRoute(agent.Position, 2f, 20f, direction);
     if (search != null)
     {
         var smoothed = search.LineOfSightSmooth(agent.Position);
         PiecewiseLinearFunction route = AIUtilities.ProjectRoute(smoothed, speed);
         agent.NextTick = WorldTime.Seconds + route.EndTime;
         agent.Target.SetPath(route);
         agent.AnimationState = state;
         return BTStatus.Success;
     }
     else
         return LandAnimalUnStuckOrDie(agent, speed, state);
 }