(svn r4693) - NewGRF: invalidate aircraft in viewports during loading stages so that graphic changes are visible. (mart3p)
--- 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);
}