Changeset - r14405:7117441a16e3
[Not reviewed]
master
0 5 0
peter1138 - 14 years ago 2010-01-31 13:17:29
peter1138@openttd.org
(svn r18972) -Add: [NewGRF] Per-rail type speed limits.
5 files changed with 28 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/newgrf.cpp
Show inline comments
 
@@ -2569,7 +2569,7 @@ static ChangeInfoResult RailTypeChangeIn
 
				break;
 

	
 
			case 0x14: // Speed limit
 
				buf->ReadWord();
 
				rti->max_speed = buf->ReadWord();
 
				break;
 

	
 
			case 0x15: // Acceleration model
src/rail.h
Show inline comments
 
@@ -146,6 +146,11 @@ struct RailtypeInfo {
 
	uint8 acceleration_type;
 

	
 
	/**
 
	 * Maximum speed for vehicles travelling on this rail type
 
	 */
 
	uint16 max_speed;
 

	
 
	/**
 
	 * Unique 32 bit rail type identifier
 
	 */
 
	RailTypeLabel label;
src/table/railtypes.h
Show inline comments
 
@@ -84,6 +84,9 @@ static const RailtypeInfo _original_rail
 
		/* acceleration type */
 
		0,
 

	
 
		/* max speed */
 
		0,
 

	
 
		/* rail type label */
 
		'RAIL',
 
	},
 
@@ -159,6 +162,9 @@ static const RailtypeInfo _original_rail
 
		/* acceleration type */
 
		0,
 

	
 
		/* max speed */
 
		0,
 

	
 
		/* rail type label */
 
		'ELRL',
 
	},
 
@@ -230,6 +236,9 @@ static const RailtypeInfo _original_rail
 
		/* acceleration type */
 
		1,
 

	
 
		/* max speed */
 
		0,
 

	
 
		/* rail type label */
 
		'MONO',
 
	},
 
@@ -301,6 +310,9 @@ static const RailtypeInfo _original_rail
 
		/* acceleration type */
 
		2,
 

	
 
		/* max speed */
 
		0,
 

	
 
		/* rail type label */
 
		'MGLV',
 
	},
src/train.h
Show inline comments
 
@@ -86,6 +86,7 @@ struct TrainCache : public AccelerationC
 

	
 
	/* cached max. speed / acceleration data */
 
	uint16 cached_max_speed;    ///< max speed of the consist. (minimum of the max speed of all vehicles in the consist)
 
	uint16 cached_max_rail_speed; ///< max consist speed limited by rail type
 
	int cached_max_curve_speed; ///< max consist speed limited by curves
 

	
 
	/**
src/train_cmd.cpp
Show inline comments
 
@@ -99,6 +99,7 @@ void Train::PowerChanged()
 
	uint32 total_power = 0;
 
	uint32 max_te = 0;
 
	uint32 number_of_parts = 0;
 
	uint16 max_rail_speed = this->tcache.cached_max_speed;
 

	
 
	for (const Train *u = this; u != NULL; u = u->Next()) {
 
		uint32 current_power = u->GetPower();
 
@@ -108,6 +109,10 @@ void Train::PowerChanged()
 
		if (current_power > 0) max_te += u->GetWeight() * u->GetTractiveEffort();
 
		total_power += u->GetPoweredPartPower(this);
 
		number_of_parts++;
 

	
 
		/* Get minimum max speed for rail */
 
		uint16 rail_speed = GetRailTypeInfo(GetRailType(u->tile))->max_speed;
 
		if (rail_speed > 0) max_rail_speed = min(max_rail_speed, rail_speed);
 
	}
 

	
 
	this->tcache.cached_axle_resistance = 60 * number_of_parts;
 
@@ -124,6 +129,8 @@ void Train::PowerChanged()
 
		SetWindowDirty(WC_VEHICLE_DETAILS, this->index);
 
		SetWindowWidgetDirty(WC_VEHICLE_VIEW, this->index, VVW_WIDGET_START_STOP_VEH);
 
	}
 

	
 
	this->tcache.cached_max_rail_speed = max_rail_speed;
 
}
 

	
 

	
 
@@ -491,7 +498,7 @@ int Train::GetCurrentMaxSpeed() const
 
		}
 
	}
 

	
 
	return min(max_speed, this->tcache.cached_max_speed);
 
	return min(max_speed, this->tcache.cached_max_rail_speed);
 
}
 

	
 
/**
 
@@ -557,7 +564,7 @@ void Train::UpdateAcceleration()
 
{
 
	assert(this->IsFrontEngine());
 

	
 
	this->max_speed = this->tcache.cached_max_speed;
 
	this->max_speed = this->tcache.cached_max_rail_speed;
 

	
 
	uint power = this->tcache.cached_power;
 
	uint weight = this->tcache.cached_weight;
0 comments (0 inline, 0 general)