(svn r572) -newgrf: Support for custom (newGRF-yielded) refit masks for trains and aircrafts (pasky).
authordarkvater
Sat, 13 Nov 2004 21:42:35 +0000
changeset 382 c0b43541ed8e
parent 381 94c4794d6bd4
child 383 eb6be25facd2
(svn r572) -newgrf: Support for custom (newGRF-yielded) refit masks for trains and aircrafts (pasky).
aircraft_gui.c
train_gui.c
--- a/aircraft_gui.c	Sat Nov 13 20:37:57 2004 +0000
+++ b/aircraft_gui.c	Sat Nov 13 21:42:35 2004 +0000
@@ -219,17 +219,39 @@
 		x = 6;
 		y = 25;
 		sel = WP(w,refit_d).sel;
-		b = _aircraft_refit_types[_opt.landscape];
-		do {
-			color = 16;
-			if (sel == 0) {
-				cargo = *b;
-				color = 12;
+
+#define show_cargo(ctype) { \
+		color = 16; \
+		if (sel == 0) { \
+			cargo = ctype; \
+			color = 12; \
+		} \
+		sel--; \
+		DrawString(x, y, _cargoc.names_s[ctype], color); \
+		y += 10; \
+		}
+
+		if (_engine_refit_masks[v->engine_type]) {
+			uint32 mask = _engine_refit_masks[v->engine_type];
+			int cid = 0;
+
+			for (; mask; mask >>= 1, cid++) {
+				if (!(mask & 1)) // not this cid
+					continue;
+				if (!(_local_cargo_id_landscape[cid] & (1 << _opt.landscape))) // not in this landscape
+					continue;
+
+				show_cargo(_local_cargo_id_ctype[cid]);
 			}
-			sel--;
-			DrawString(x,y,_cargoc.names_s[*b], color);
-			y += 10;
-		} while (*++b != 0xFF);
+
+		} else { // generic refit list
+			b = _aircraft_refit_types[_opt.landscape];
+			do {
+				show_cargo(*b);
+			} while (*++b != 0xFF);
+		}
+
+#undef show_cargo
 
 		WP(w,refit_d).cargo = cargo;
 
--- a/train_gui.c	Sat Nov 13 20:37:57 2004 +0000
+++ b/train_gui.c	Sat Nov 13 21:42:35 2004 +0000
@@ -623,17 +623,39 @@
 		x = 6;
 		y = 25;
 		sel = WP(w,refit_d).sel;
-		b = _rail_vehicle_refit_types[_opt.landscape];
-		do {
-			color = 16;
-			if (sel == 0) {
-				cargo = *b;
-				color = 12;
+
+#define show_cargo(ctype) { \
+		color = 16; \
+		if (sel == 0) { \
+			cargo = ctype; \
+			color = 12; \
+		} \
+		sel--; \
+		DrawString(x, y, _cargoc.names_s[ctype], color); \
+		y += 10; \
+		}
+
+		if (_engine_refit_masks[v->engine_type]) {
+			uint32 mask = _engine_refit_masks[v->engine_type];
+			int cid = 0;
+
+			for (; mask; mask >>= 1, cid++) {
+				if (!(mask & 1)) // not this cid
+					continue;
+				if (!(_local_cargo_id_landscape[cid] & (1 << _opt.landscape))) // not in this landscape
+					continue;
+
+				show_cargo(_local_cargo_id_ctype[cid]);
 			}
-			sel--;
-			DrawString(x,y,_cargoc.names_s[*b], color);
-			y += 10;
-		} while (*++b != 255);
+
+		} else { // generic refit list
+			b = _rail_vehicle_refit_types[_opt.landscape];
+			do {
+				show_cargo(*b);
+			} while (*++b != 255);
+		}
+
+#undef show_cargo
 
 		WP(w,refit_d).cargo = cargo;