(svn r4693) - NewGRF: invalidate aircraft in viewports during loading stages so that graphic changes are visible. (mart3p)
authorpeter1138
Tue, 02 May 2006 19:24:02 +0000
changeset 3722 00921cc83d70
parent 3721 200e79fe4502
child 3723 e999035b1172
(svn r4693) - NewGRF: invalidate aircraft in viewports during loading stages so that graphic changes are visible. (mart3p)
aircraft_cmd.c
--- a/aircraft_cmd.c	Tue May 02 19:09:49 2006 +0000
+++ b/aircraft_cmd.c	Tue May 02 19:24:02 2006 +0000
@@ -538,6 +538,8 @@
 		v->cargo_count = u->cargo_count = 0;
 		v->cargo_type = new_cid;
 		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
+		InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
+		RebuildVehicleLists();
 	}
 
 	return cost;
@@ -1113,6 +1115,18 @@
 	InvalidateWindowClasses(WC_AIRCRAFT_LIST);
 }
 
+/** Mark all views dirty for an aircraft.
+ * @param v vehicle to be redrawn.
+ */
+static void MarkAircraftDirty(Vehicle *v)
+{
+		v->cur_image = GetAircraftImage(v, v->direction);
+		if (v->subtype == 0) {
+			v->next->next->cur_image = GetRotorImage(v);
+		}
+		MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
+}
+
 static void HandleAircraftLoading(Vehicle *v, int mode)
 {
 	if (v->current_order.type == OT_NOTHING) return;
@@ -1124,7 +1138,10 @@
 
 		if (v->current_order.flags & OF_FULL_LOAD && CanFillVehicle(v)) {
 			SET_EXPENSES_TYPE(EXPENSES_AIRCRAFT_INC);
-			LoadUnloadVehicle(v);
+			if (LoadUnloadVehicle(v)) {
+				InvalidateWindow(WC_AIRCRAFT_LIST, v->owner);
+				MarkAircraftDirty(v);
+			}
 			return;
 		}
 
@@ -1132,6 +1149,7 @@
 			Order b = v->current_order;
 			v->current_order.type = OT_NOTHING;
 			v->current_order.flags = 0;
+			MarkAircraftDirty(v);
 			if (!(b.flags & OF_NON_STOP)) return;
 		}
 	}
@@ -1238,6 +1256,7 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_AIRCRAFT_INC);
 	LoadUnloadVehicle(v);
+	MarkAircraftDirty(v);
 	InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 	InvalidateWindowClasses(WC_AIRCRAFT_LIST);
 }