(svn r1891) -Fix: [ 1143587 ] carriages of newgrfs can be refitted again
authorcelestar
Sun, 20 Feb 2005 07:47:42 +0000
changeset 1387 eff794048d92
parent 1386 aa5a172a8431
child 1388 4bfe9ccd4344
(svn r1891) -Fix: [ 1143587 ] carriages of newgrfs can be refitted again
train_cmd.c
train_gui.c
--- a/train_cmd.c	Sat Feb 19 14:40:32 2005 +0000
+++ b/train_cmd.c	Sun Feb 20 07:47:42 2005 +0000
@@ -841,8 +841,12 @@
 			if (dst_head->subtype == TS_Front_Engine)
 				UpdateTrainAcceleration(dst_head);
 			InvalidateWindow(WC_VEHICLE_DETAILS, dst_head->index);
+			/* Update the refit button */
+			InvalidateWindowWidget(WC_VEHICLE_VIEW, dst_head->index, 12);
 		}
 
+		/* I added this to so that the refit buttons get updated */
+		InvalidateWindowWidget(WC_VEHICLE_VIEW, src_head->index, 12);
 		InvalidateWindow(WC_VEHICLE_DEPOT, src_head->tile);
 		RebuildVehicleLists();
 	}
--- a/train_gui.c	Sat Feb 19 14:40:32 2005 +0000
+++ b/train_gui.c	Sun Feb 20 07:47:42 2005 +0000
@@ -809,16 +809,29 @@
 {
 	switch(e->event) {
 	case WE_PAINT: {
-		Vehicle *v;
+		Vehicle *v, *u;
 		StringID str;
 
 		v = GetVehicle(w->window_number);
 
 		w->disabled_state = (v->owner == _local_player) ? 0 : 0x380;
 
-		if (v->cargo_cap == 0) {
-			//we cannot refit this engine
-			SETBIT(w->disabled_state, 12);
+		SETBIT(w->disabled_state, 12);
+
+		/* See if any carriage can be refitted */
+		for ( u = v; u != NULL; u = u->next) {
+			if (_engine_refit_masks[u->engine_type] != 0) {
+				CLRBIT(w->disabled_state, 12);
+				/* We have a refittable carriage, bail out */
+				break;
+			}
+		}
+
+		/* Above code doesn't seem to handle non-newgrf engines, do it separately
+		TODO: handle engines which are NOT the head of the train, but don't break wagons */
+		if (v->cargo_cap != 0) {
+			/* we can refit this engine */
+			CLRBIT(w->disabled_state, 12);
 		}
 
 		/* draw widgets & caption */