mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-19 12:45:00 +00:00
Fix pathfinding bug with many-turns-ahead computations (#11196).
Also remove some ugliness along the way.
This commit is contained in:
parent
b69051c24b
commit
38e3d66198
@ -507,8 +507,7 @@ double shortest_path_calculator::cost(const gamemap::location& loc, double so_fa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const double base_cost(
|
int const base_cost = unit_.movement_cost(map_, map_[loc.x][loc.y]);
|
||||||
unit_.movement_cost(map_,map_[loc.x][loc.y]));
|
|
||||||
|
|
||||||
//supposing we had 2 movement left, and wanted to move onto a hex which
|
//supposing we had 2 movement left, and wanted to move onto a hex which
|
||||||
//takes 3 movement, it's going to cost us 5 movement in total, since we
|
//takes 3 movement, it's going to cost us 5 movement in total, since we
|
||||||
@ -516,12 +515,13 @@ double shortest_path_calculator::cost(const gamemap::location& loc, double so_fa
|
|||||||
const int current_cost(static_cast<int>(so_far));
|
const int current_cost(static_cast<int>(so_far));
|
||||||
|
|
||||||
const int starting_movement = unit_.movement_left();
|
const int starting_movement = unit_.movement_left();
|
||||||
const int remaining_movement = current_cost <= starting_movement ?
|
int remaining_movement = starting_movement - current_cost;
|
||||||
starting_movement - current_cost :
|
if (remaining_movement < 0) {
|
||||||
(current_cost-starting_movement)%unit_.total_movement();
|
int total = unit_.total_movement();
|
||||||
|
remaining_movement = total - (-remaining_movement) % total;
|
||||||
|
}
|
||||||
|
|
||||||
const double additional_cost = int(base_cost) > remaining_movement ?
|
int additional_cost = base_cost > remaining_movement ? remaining_movement : 0;
|
||||||
double(remaining_movement) : double(0);
|
|
||||||
|
|
||||||
return base_cost + additional_cost;
|
return base_cost + additional_cost;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user