GridStringPulling reports infinite loop if path contains node links

  • A* version: 5.3.3
  • Unity version: 6000.0.36f1

Prior to upgrade to 5.x, we were using a custom implementation of GridGraph, along with a custom Funnel modifier to simplify paths. After upgrade, I wanted to get rid of most of the custom code, because it was incompatible with the new version of library, and I tried using Funnel modifier for paths on a GridGraph, which delegates to GridStringPulling class.

Unfortunately, our graph contains many node links which add custom connections, and in this case GridStringPulling enters infinite loop, because it does not take them into account, since it only uses Linecast to check LOS between nodes.

I think this is fixable: we must extend LOS definition to include any two nodes connected by a custom connection, i.e. two path points have LOS if either Linecast fails to find an obstacle OR they are connected with a custom connection. This should allow GridStringPulling to simplify the path by adding both points to output path.

Alternatively, if this doesn’t work in some case, path to be simplified can be split into several parts connected with custom connections, and each part simplified separately - that’ll work, too.

Hi

I believe if you use the NodeLink2 component, the modifier will split the path before passing it to the string pulling. Are you modifying the graph in some other way?

Yes, we use a custom modifier that acts somewhat like one of the NodeLinks, but contains additional information, such as maximum agent size, animation etc. I’ll take a look at NodeLink2 to see if we can use similar logic. Thanks.