Sunday, January 10, 2010

Off-Mesh links Progress

I have worked a little towards off-mesh links (a.k.a jump-links). That is, extra annotation other than polygons which act as links in the navigation graph. My long term plan is to support point-to-point and segment-to-segment off-mesh links. The first iteration will only bring you the point-to-point links.

The term link might be a bit missleading, as the links actually appear as polygons in the system. This simplifies a couple of internal representations as well as makes the extra links visible on queries so that it is easy to handle them.

The current SVN version is in flux, so do not update just yet! I will finish this feature during next week.

The pathfinder and string pulling works ok (not fully tested), couple of other features are still missing, though. I also want to improve the link connection procedure, currently many links will slow down initialization way too much.

As you might have noticed I have worked a couple of features in parallel (areas, off-mesh links, serialization, debug drawing, static/tile mesh merging, etc) during the past months. The reason is that many of the features were dependent on other features, so have tried to finish the most common nominators first. Now that I get the dependencies better I can focus my work better and I hope that the new features will start to get finished too.

How does this work with tiled meshes? Is the off-mesh link generation incompatible with an approach like Yakov's where you update certain tiles to account for dynamic obstacles? If it's not, are there some restrictions like maximum jump distance being related in some way to tile size?

It will work with tiled meshes too. I have not yet tackled that, though, but the current implementation is done keeping that in mind. I will first try to allow arbitrary linking, but my fallback plan is to allow to connect to at least all the 8 neighbor tiles.

Tile-to-tile patching is quick a bastard to implement, especially if you want to do it without memory allocations :) (and, yes, I want to do that if possible)