aircraft_gui.c
changeset 243 9a40daa560ae
parent 193 0a7025304867
child 381 94c4794d6bd4
--- a/aircraft_gui.c	Tue Sep 14 08:13:15 2004 +0000
+++ b/aircraft_gui.c	Tue Sep 14 14:19:53 2004 +0000
@@ -868,36 +868,41 @@
 static SortStruct _aircraft_sort[NUM_NORMAL_VEHICLES];
 static uint16 _num_aircraft_sort[MAX_PLAYERS];
 
+static void GlobalSortAircraftList()
+{
+	const Vehicle *v;
+	uint16 *i;
+	uint32 n = 0;
+
+	// reset #-of aircraft to 0 because ++ is used for value-assignment
+	for (i = _num_aircraft_sort; i != endof(_num_aircraft_sort); i++) {*i = 0;}
+
+	FOR_ALL_VEHICLES(v) {
+		if(v->type == VEH_Aircraft && v->subtype <= 2) {
+			_aircraft_sort[n].index = v->index;
+			_aircraft_sort[n++].owner = v->owner;
+			_num_aircraft_sort[v->owner]++; // add number of aircraft of player
+		}
+	}
+
+	// create cumulative aircraft-ownership
+	// aircraft are stored as a cummulative index, eg 25, 41, 43. This means
+	// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2
+	for (i = &_num_aircraft_sort[1]; i != endof(_num_aircraft_sort); i++) {*i += *(i-1);}
+
+	qsort(_aircraft_sort, n, sizeof(_aircraft_sort[0]), GeneralOwnerSorter); // sort by owner
+
+	// since indexes are messed up after adding/removing a station, mark all lists dirty
+	memset(_aircraft_sort_dirty, true, sizeof(_aircraft_sort_dirty));
+	_vehicle_sort_dirty[VEHAIRCRAFT] = false;
+
+	DEBUG(misc, 1) ("Resorting global aircraft list...");	
+}
+
 static void MakeSortedAircraftList(byte owner)
 {
 	SortStruct *firstelement;
-	Vehicle *v;
 	uint32 n = 0;
-	uint16 *i;
-
-	if (_vehicle_sort_dirty[VEHAIRCRAFT]) { // only resort the whole array if vehicles have been added/removed
-		// reset to 0 just to be sure
-		for (i = _num_aircraft_sort; i != endof(_num_aircraft_sort); i++) {*i = 0;}
-
-		FOR_ALL_VEHICLES(v) {
-			if(v->type == VEH_Aircraft && v->subtype <= 2) {
-				_aircraft_sort[n].index = v->index;
-				_aircraft_sort[n++].owner = v->owner;
-				_num_aircraft_sort[v->owner]++; // add number of aircraft of player
-			}
-		}
-
-		// create cumulative aircraft-ownage
-		// aircraft are stored as a cummulative index, eg 25, 41, 43. This means
-		// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2
-		for (i = &_num_aircraft_sort[1]; i != endof(_num_aircraft_sort); i++) {*i += *(i-1);}
-
-		// sort by owner, then only subsort the requested owner-vehicles
-		qsort(_aircraft_sort, n, sizeof(_aircraft_sort[0]), GeneralOwnerSorter);
-
-		_last_vehicle_idx = 0; // used for "cache" in namesorting
-		_vehicle_sort_dirty[VEHAIRCRAFT] = false;
-	}
 
 	if (owner == 0) { // first element starts at 0th element and has n elements as described above
 		firstelement =	&_aircraft_sort[0];
@@ -909,8 +914,11 @@
 
 	_internal_sort_order			= _aircraft_sort_order[owner];
 	_internal_name_sorter_id	= STR_SV_AIRCRAFT_NAME;
+	_last_vehicle_idx = 0; // used for "cache" in namesorting
 	qsort(firstelement, n, sizeof(_aircraft_sort[0]), _vehicle_sorter[_aircraft_sort_type[owner]]);
 
+	_aircraft_sort_dirty[owner] = false;
+
 	DEBUG(misc, 1) ("Resorting Aircraft list player %d...", owner+1);
 }
 
@@ -924,8 +932,11 @@
 		if (_aircraft_sort_type[window_number] == SORT_BY_UNSORTED) // disable 'Sort By' tooltip on Unsorted sorting criteria
 			w->disabled_state |= (1 << 2);
 
-		if (_aircraft_sort_dirty[window_number] || _vehicle_sort_dirty[VEHAIRCRAFT]) {
-			_aircraft_sort_dirty[window_number] = false;
+		// resort shipps window if roadvehicles have been added/removed
+		if (_vehicle_sort_dirty[VEHAIRCRAFT])
+			GlobalSortAircraftList();
+
+		if (_aircraft_sort_dirty[window_number]) {
 			MakeSortedAircraftList(window_number);
 			/* reset sorting timeout */
 			w->custom[0] = DAY_TICKS;