wb: fix 'insufficient movement' wanring when a move is interrupted
This commit is contained in:
parent
2635c7014f
commit
cdb98f75a4
3 changed files with 14 additions and 2 deletions
|
@ -648,7 +648,7 @@ jamming_path::~jamming_path()
|
|||
{
|
||||
}
|
||||
|
||||
marked_route mark_route(const plain_route &rt)
|
||||
marked_route mark_route(const plain_route &rt, bool update_move_cost)
|
||||
{
|
||||
marked_route res;
|
||||
|
||||
|
@ -660,6 +660,7 @@ marked_route mark_route(const plain_route &rt)
|
|||
const unit& u = *it;
|
||||
|
||||
int turns = 0;
|
||||
int total_costs = 0;
|
||||
int movement = u.movement_left();
|
||||
const team& unit_team = resources::gameboard->get_team(u.side());
|
||||
bool zoc = false;
|
||||
|
@ -691,6 +692,7 @@ marked_route mark_route(const plain_route &rt)
|
|||
|
||||
if (last_step) break; // finished and we used dummy move_cost
|
||||
|
||||
total_costs += movement;
|
||||
movement = u.total_movement();
|
||||
if(move_cost > movement) {
|
||||
return res; //we can't reach destination
|
||||
|
@ -701,12 +703,17 @@ marked_route mark_route(const plain_route &rt)
|
|||
&& !u.get_ability_bool("skirmisher", *(i+1));
|
||||
|
||||
if (zoc) {
|
||||
total_costs += movement;
|
||||
movement = 0;
|
||||
} else {
|
||||
movement -= move_cost;
|
||||
total_costs += move_cost;
|
||||
}
|
||||
}
|
||||
|
||||
if(update_move_cost) {
|
||||
res.move_cost = total_costs;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
|
@ -198,7 +198,7 @@ plain_route a_star_search(const map_location& src, const map_location& dst,
|
|||
* Add marks on a route @a rt assuming that the unit located at the first hex of
|
||||
* rt travels along it.
|
||||
*/
|
||||
marked_route mark_route(const plain_route &rt);
|
||||
marked_route mark_route(const plain_route &rt, bool update_move_cost = false);
|
||||
|
||||
struct shortest_path_calculator : cost_calculator
|
||||
{
|
||||
|
|
|
@ -271,6 +271,9 @@ void move::execute(bool& success, bool& complete)
|
|||
//FIXME: probably better to use the new calculate_new_route() instead of the above:
|
||||
//calculate_new_route(final_location, steps.back());
|
||||
// Of course, "better" would need to be verified.
|
||||
|
||||
//Update route_->move_cost
|
||||
route_.reset(new pathfind::marked_route(mark_route(route_->route, true)));
|
||||
arrow_->set_path(route_->steps);
|
||||
}
|
||||
}
|
||||
|
@ -479,8 +482,10 @@ action::error move::check_validity() const
|
|||
|
||||
//check that the path is good
|
||||
if(get_source_hex() != get_dest_hex()) { //skip zero-hex move used by attack subclass
|
||||
|
||||
// Mark the plain route to see if the move can still be done in one turn,
|
||||
// which is always the case for planned moves
|
||||
// TODO: this check is rather slow, skip it if the gamestat has not changed.
|
||||
pathfind::marked_route checked_route = pathfind::mark_route(get_route().route);
|
||||
|
||||
if(checked_route.marks[checked_route.steps.back()].turns != 1) {
|
||||
|
|
Loading…
Add table
Reference in a new issue