vehicle.c
changeset 1635 6a5b991bdd49
parent 1605 c4630be67467
child 1652 d8b3ae1b0768
--- a/vehicle.c	Sun Apr 03 06:26:31 2005 +0000
+++ b/vehicle.c	Sun Apr 03 09:38:13 2005 +0000
@@ -1307,7 +1307,7 @@
 	 the last 8 bit is the engine. The 8 bits in front of the engine is free so it have room for 16 bit engine entries */
 	uint16 new_engine_type = (uint16)(p2 & 0xFFFF);
 	uint32 autorefit_money = (p2  >> 16) * 100000;
-	Vehicle *v, *u;
+	Vehicle *v, *u, *first;
 	int cost, build_cost, rear_engine_cost = 0;
 	byte old_engine_type;
 
@@ -1349,6 +1349,7 @@
 		return CMD_ERROR;
 
 	if ( v->type == VEH_Train ) {
+		first = GetFirstVehicleInChain(v);
 		u = GetLastVehicleInChain(v);
 		if ( RailVehInfo(new_engine_type)->flags & RVI_MULTIHEAD )
 			build_cost = build_cost >> 1;   //multiheaded engines have EstimateTrainCost() for both engines
@@ -1357,7 +1358,6 @@
 
 			// prevent that the rear engine can get replaced to something else than the front engine
 			if ( v->u.rail.first_engine != 0xffff && RailVehInfo(old_engine_type)->flags & RVI_MULTIHEAD && RailVehInfo(old_engine_type)->flags ) {
-				Vehicle *first = GetFirstVehicleInChain(v);
 				if ( first->engine_type != new_engine_type ) return CMD_ERROR;
 			}
 
@@ -1415,8 +1415,6 @@
 
 		v->value = build_cost;
 
-		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
-
 
 		if (v->engine_type != new_engine_type) {
 			byte sprite = v->spritenum;
@@ -1493,6 +1491,7 @@
 					} while ( (veh=veh->next) != NULL );
 				}
 				InvalidateWindowClasses(WC_TRAINS_LIST);
+				UpdateTrainAcceleration(first);
 				break;
 				}
 			case VEH_Road:
@@ -1555,6 +1554,7 @@
 		}
 		InvalidateWindow(WC_REPLACE_VEHICLE, v->type);
 		ResortVehicleLists();
+		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 	}
 	//needs to be down here because refitting will change SET_EXPENSES_TYPE if called
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);