ALiVEOS / ALiVE.OS

ALiVE Open Source GPL v2
http://alivemod.com/
Other
160 stars 80 forks source link

Pathfinding fixes and improvements #786

Closed CrashDome closed 1 year ago

CrashDome commented 1 year ago

Oh boy.... I think I went down a big rabbit hole with this one.

I wanted to improve pathfinding a few months ago. So I went looking through what is currently there, some stale branches, and general fooling around from other people I found from years ago. I attempted to make something useful and neat. What I ended up with was three complete rewrites, less hair on my head, and a few discoveries.

I can't even attempt to explain everything so I'm going to do two things: Give a summary of what it can and cannot do and then throw up a quick video.

Biggest discovery was about a month ago. During perf testing I found that BI's hashmap is so much faster than CBAs that without it, this would be a slow mess.

Here's quick list of what it CAN do:

Here's what it CANT do (yet):

I would really appreciate feedback and testing if possible. I know this touches a lot of modules so, I want to be sure nothing is broken. I have been testing in a large mission and haven't seen anything bad really. There might be an occasional gap where units should not go (and boy will it find them). Overall, though, it makes for very interesting battles. I'm interested in performance and any errors. I'd really like to get this in soon.

Here is a quick quide to the pathfinding procedures that can be customized (maybe wiki-fy it?): ALiVE Pathfinding Guide.pdf

Short and Quick video I just made showing a few in action path findings so you can see without pulling code down: VIDEO Note: I did cut things together but there is no speed ups of video. Units are running 200% speed on a 5600x, 16gb RAM, w/ 2070 super gfx card. All pathfinding you see with the debug markers is real time.

TODO:

Thanks

DarrellJMartin commented 1 year ago

Merged for public testing

Azraeel commented 1 year ago

Line 160 in fnc_pathfindingGrid.sqf returns undefined variable for _result pretty spammy too

CrashDome commented 1 year ago

I suspect it's from trying to get neighbors from around the edges of the map. More likely to happen in layer 1 checks, hence line 160 and not 168. I'll double check that theory and just throw an isnil check in both if that is truly the case. If not, I have more digging to do.

Azraeel commented 1 year ago

I suspect it's from trying to get neighbors from around the edges of the map. More likely to happen in layer 1 checks, hence line 160 and not 168. I'll double check that theory and just throw an isnil check in both if that is truly the case. If not, I have more digging to do.

should come join the alive discord, you are a mystery rn :)

CrashDome commented 1 year ago

should come join the alive discord, you are a mystery rn :)

Can't find it! :) ---nvrmind found it---