(svn r12331) -Feature: [NewGRF] vehicle variable FE bit 8
authorglx
Mon, 03 Mar 2008 20:56:30 +0000
changeset 9162 ec5f2f4eee15
parent 9161 f88d089fa608
child 9163 79101c0c3bc9
(svn r12331) -Feature: [NewGRF] vehicle variable FE bit 8
src/newgrf_engine.cpp
src/train_cmd.cpp
src/vehicle.cpp
src/vehicle_base.h
--- a/src/newgrf_engine.cpp	Mon Mar 03 20:41:47 2008 +0000
+++ b/src/newgrf_engine.cpp	Mon Mar 03 20:56:30 2008 +0000
@@ -627,16 +627,15 @@
 			uint16 modflags = 0;
 
 			if (v->type == VEH_TRAIN) {
-				/* @todo: There are some other bits that should be implemented:
-				 *   bit 8: (Maybe?) Toggled whenever the train reverses.
-				 */
 				const Vehicle *u = IsTrainWagon(v) && HasBit(v->vehicle_flags, VRF_POWEREDWAGON) ? v->First() : v;
 				RailType railtype = GetRailType(v->tile);
 				bool powered = IsTrainEngine(v) || (IsTrainWagon(v) && HasBit(v->vehicle_flags, VRF_POWEREDWAGON));
 				bool has_power = powered && HasPowerOnRail(u->u.rail.railtype, railtype);
 				bool is_electric = powered && u->u.rail.railtype == RAILTYPE_ELECTRIC;
+
 				if (has_power) SetBit(modflags, 5);
 				if (is_electric && !has_power) SetBit(modflags, 6);
+				if (HasBit(v->u.rail.flags, VRF_TOGGLE_REVERSE)) SetBit(modflags, 8);
 			}
 			if (HasBit(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE)) SetBit(modflags, 10);
 
--- a/src/train_cmd.cpp	Mon Mar 03 20:41:47 2008 +0000
+++ b/src/train_cmd.cpp	Mon Mar 03 20:56:30 2008 +0000
@@ -1787,7 +1787,10 @@
 	}
 
 	/* update all images */
-	for (Vehicle *u = v; u != NULL; u = u->Next()) { u->cur_image = u->GetImage(u->direction); }
+	for (Vehicle *u = v; u != NULL; u = u->Next()) {
+		ToggleBit(u->u.rail.flags, VRF_TOGGLE_REVERSE);
+		u->cur_image = u->GetImage(u->direction);
+	}
 
 	ClrBit(v->u.rail.flags, VRF_REVERSING);
 
--- a/src/vehicle.cpp	Mon Mar 03 20:41:47 2008 +0000
+++ b/src/vehicle.cpp	Mon Mar 03 20:56:30 2008 +0000
@@ -2199,6 +2199,8 @@
 			if (!IsFrontEngine(v)) v = v->First();
 			UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR, v->owner);
 			v->load_unload_time_rem = 0;
+			/* Reset reversed flag */
+			for (Vehicle *u = v; u != NULL; u = u->Next()) ClrBit(u->u.rail.flags, VRF_TOGGLE_REVERSE);
 			break;
 
 		case VEH_ROAD:
--- a/src/vehicle_base.h	Mon Mar 03 20:41:47 2008 +0000
+++ b/src/vehicle_base.h	Mon Mar 03 20:56:30 2008 +0000
@@ -118,7 +118,7 @@
 	const struct SpriteGroup *cached_override;
 };
 
-enum {
+enum VehicleRailFlags {
 	VRF_REVERSING         = 0,
 
 	/* used to calculate if train is going up or down */
@@ -136,6 +136,9 @@
 
 	/* used to mark that electric train engine is allowed to run on normal rail */
 	VRF_EL_ENGINE_ALLOWED_NORMAL_RAIL = 6,
+
+	/* used for vehicle var 0xFE bit 8 (toggled each time the train is reversed) */
+	VRF_TOGGLE_REVERSE = 7,
 };
 
 struct VehicleAir {