This is a path finder and A* solver (astar or a-star) native extension for Defold Engine build with good old MicroPather. I did try to make it simple as possible. This is why I embed some logic into the C++.
In some cases solve_near() doesnāt return nears array after create a new map (switch between levels). But solve() still works correct. Sometimes solve_near() returns nears after second call only. First function call returns NO_SOLUTION and nil, second call after first one with the same map state returns SOLVED and nears table.
Also reset() or reset_cache() before map initialization will crash engine.
Iāll try to figure it out, but Iāll be glad if you can share a simple test case.
I guess it is because the cache. I have doubts that cache might not working as expected.
This is because Iām lazy and since Iām not expecting someone to reset things when it is empty Iāll take a look, It should be easy to fix.
This code seems directly copied from Solve function and checking āpathToā, but which value āpathToā has within SolveNear function? Suppose this variable contains a value from previous calculation and in some case condition return NO_SOLUTION.
Highly possible. Honestly, I donāt remember why I did it this way. It seems very inappropriate right now.
Iām trying to complete one of my freelance work . It has a very tight deadline. Iāll check out those issues as soon as I can, sorry.
@Dragosha I fixed the issues, but as I suspected there is another issue about the cache. Iām going to push the changes when I find a way to fix this one(I hope before Monday).
I was using astar.reset() just for development purpose only and this is why I wasnāt exposed it to the documentation. It is different then astar.reset_cache(). It removes all the data and the Map class internally. I fix it is bugs. It should be safe to use if you want to free some memory. But I believe it is not necessary. Also astar.reset() delete the Costs array. It must be set. Otherwise proper error occur which describes the situation.
astar.reset_cache() will not crash the engine anymore. Actually you donāt need to call it before changing map state using astar.set_map(). astar.set_map() calls reset cache internally.
You were right, It was about the world bound check for early exit. It is fixed now. (At least as far as I can test)
This is not related to your issue but It was returning nil caused by other issue. It was returning SOLVED and nil before when there is only tile itself as a solution. It will return NO_SOLUTION now.
There isnāt any breaking changes but I made a few more fix.
I try to test every circumstances which I can think of.
Here are the test files on dev branch:
I also forked this awesome extension and add two methods: astar.get_at(x, y) to read value by coordinates and astar.set_at(x, y, value) to change map data without updating the whole map