Summary: Refactoring tile_move_cost_ptrs()
Submitted by: persia
Submitted on: Mon 29 Apr 2013 04:01:31 PM JST
Priority: 5 - Normal
Assigned to: None
Discussion Lock: Any
I've been looking at pathfinding, and many of my investigations fall back
into tile_move_cost_ptrs(), making me think about ways it might be faster to
execute (as it is called so often).
The attached patch tries to streamline the execution path, avoiding
duplicate conditionals and unnecessary caching, and attempting to delay all
operations as late as possible (especially the road iteration, in the hopes it
need not be performed).
In passing, I addressed the FC_INFINITY TODO, as passing this correctly is
essential for proper pathfinding, although the only situation in which it
wasn't already handled correctly was for fueled units with nativity
restrictions (which aren't present in shipping rulesets). This will introduce
a behaviour change for pathfinding, correctly charging the remainder of the
move when determining a path if slow invasions is enabled (currently
pathfinding assumes units may continue to move in such situations if their
move points are not all used, potentially leading to units standing on the
coast in positions they might otherwise have avoided as final positions (e.g.
next to enemy military units)).
Another introduced behaviour change is that with this logic UTYF_IGTER
units entering non-native terrain that has a road native to the unit without
the RF_NATIVE_TILE flag and with a move cost less than MOVE_COST_IGTER will be
charged MOVE_COST_IGTER move points, rather than the cost from the road.
Again, not something present in any shipping rulesets, and easily worked
around by ruleset authors by adjusting RF_NATIVE_TILE for the road.
Date: Mon 29 Apr 2013 04:01:31 PM JST Name:
refactor-tile_move_cost_ptrs.patch Size: 6kB By: persia
Reply to this item at:
Message sent via/by Gna!
Freeciv-dev mailing list