changeset 8178:682fb03eb247 draft

(svn r11741) -Feature: Add support for NewGRF's train 'tilt' flag. Trains with tilt capability (specific details are per NewGRF set) will be given a 20% speed limit bonus on curves.
author peter1138 <peter1138@openttd.org>
date Tue, 01 Jan 2008 22:24:18 +0000
parents 1471a78e5abc
children a0879dc1b54d
files src/train_cmd.cpp src/vehicle_base.h
diffstat 2 files changed, 11 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -164,12 +164,16 @@
 	v->u.rail.cached_total_length = 0;
 	v->u.rail.compatible_railtypes = 0;
 
+	bool train_can_tilt = true;
+
 	for (Vehicle *u = v; u != NULL; u = u->Next()) {
 		const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type);
 
 		/* Check the v->first cache. */
 		assert(u->First() == v);
 
+		if (!HasBit(EngInfo(u->engine_type)->misc_flags, EF_RAIL_TILTS)) train_can_tilt = false;
+
 		/* update the 'first engine' */
 		u->u.rail.first_engine = v == u ? INVALID_ENGINE : first_engine;
 		u->u.rail.railtype = rvi_u->railtype;
@@ -253,6 +257,7 @@
 
 	/* store consist weight/max speed in cache */
 	v->u.rail.cached_max_speed = max_speed;
+	v->u.rail.cached_tilt = train_can_tilt;
 
 	/* recalculate cached weights and power too (we do this *after* the rest, so it is known which wagons are powered and need extra weight added) */
 	TrainCargoChanged(v);
@@ -338,6 +343,11 @@
 		/* Apply the engine's rail type curve speed advantage, if it slowed by curves */
 		const RailtypeInfo *rti = GetRailTypeInfo(v->u.rail.railtype);
 		max_speed += (max_speed / 2) * rti->curve_speed;
+
+		if (v->u.rail.cached_tilt) {
+			/* Apply max_speed bonus of 20% for a tilting train */
+			max_speed += max_speed / 5;
+		}
 	}
 
 	if (IsTileType(v->tile, MP_STATION) && IsFrontEngine(v)) {
--- a/src/vehicle_base.h
+++ b/src/vehicle_base.h
@@ -81,6 +81,7 @@
 	/* cached values, recalculated on load and each time a vehicle is added to/removed from the consist. */
 	uint16 cached_max_speed;  // max speed of the consist. (minimum of the max speed of all vehicles in the consist)
 	uint32 cached_power;      // total power of the consist.
+	bool cached_tilt;         // train can tilt; feature provides a bonus in curves
 	uint8 cached_veh_length;  // length of this vehicle in units of 1/8 of normal length, cached because this can be set by a callback
 	uint16 cached_total_length; ///< Length of the whole train, valid only for first engine.