Stateless system for movement target selection. Used by EntityCommandPhase for unit moves.
Moves the entity to the given tile, spends the given AP cost, and returns the ENTITY_MOVED effect.
Returns the AP cost to reach the target tile via BFS, or -1 if unreachable within the given AP budget. Each step costs BALANCE.AP.COST.MOVEMENT. Occupied tiles are not traversed.
Returns a random unoccupied neighbor tile, or null if all neighbors are blocked. Used by BotSystem for undirected random movement.
Returns the best unoccupied neighbor tile that moves the entity closer to the given target position, or null if all neighbors are blocked. Picks randomly among the 3 closest neighbors to add variance, falling back to remaining neighbors if those are all occupied.