1
0
Fork 0

(svn r24086) -Fix [FS#5131] (r23504): Cloning orders of aircraft with limited range failed.

release/1.3
frosch 2012-04-01 19:56:08 +00:00
parent e51018cbf3
commit 70ad670125
1 changed files with 7 additions and 6 deletions

View File

@ -1402,13 +1402,14 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
/** /**
* Check if an aircraft has enough range for an order list. * Check if an aircraft has enough range for an order list.
* @param v Aircraft to check. * @param v_new Aircraft to check.
* @param v_order Vehicle currently holding the order list.
* @param first First order in the source order list. * @param first First order in the source order list.
* @return True if the aircraft has enough range for the orders, false otherwise. * @return True if the aircraft has enough range for the orders, false otherwise.
*/ */
bool CheckAircraftOrderDistance(const Aircraft *v, const Order *first) static bool CheckAircraftOrderDistance(const Aircraft *v_new, const Vehicle *v_order, const Order *first)
{ {
if (first == NULL || v->acache.cached_max_range == 0) return true; if (first == NULL || v_new->acache.cached_max_range == 0) return true;
/* Iterate over all orders to check the distance between all /* Iterate over all orders to check the distance between all
* 'goto' orders and their respective next order (of any type). */ * 'goto' orders and their respective next order (of any type). */
@ -1418,7 +1419,7 @@ bool CheckAircraftOrderDistance(const Aircraft *v, const Order *first)
case OT_GOTO_DEPOT: case OT_GOTO_DEPOT:
case OT_GOTO_WAYPOINT: case OT_GOTO_WAYPOINT:
/* If we don't have a next order, we've reached the end and must check the first order instead. */ /* If we don't have a next order, we've reached the end and must check the first order instead. */
if (GetOrderDistance(o, o->next != NULL ? o->next : first, v) > v->acache.cached_max_range_sqr) return false; if (GetOrderDistance(o, o->next != NULL ? o->next : first, v_order) > v_new->acache.cached_max_range_sqr) return false;
break; break;
default: break; default: break;
@ -1478,7 +1479,7 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
} }
/* Check for aircraft range limits. */ /* Check for aircraft range limits. */
if (dst->type == VEH_AIRCRAFT && !CheckAircraftOrderDistance(Aircraft::From(dst), src->GetFirstOrder())) { if (dst->type == VEH_AIRCRAFT && !CheckAircraftOrderDistance(Aircraft::From(dst), src, src->GetFirstOrder())) {
return_cmd_error(STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE); return_cmd_error(STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE);
} }
@ -1525,7 +1526,7 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
} }
/* Check for aircraft range limits. */ /* Check for aircraft range limits. */
if (dst->type == VEH_AIRCRAFT && !CheckAircraftOrderDistance(Aircraft::From(dst), src->GetFirstOrder())) { if (dst->type == VEH_AIRCRAFT && !CheckAircraftOrderDistance(Aircraft::From(dst), src, src->GetFirstOrder())) {
return_cmd_error(STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE); return_cmd_error(STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE);
} }