Changeset - r20182:023b50bd4833
[Not reviewed]
master
0 2 0
frosch - 12 years ago 2013-04-08 19:55:24
frosch@openttd.org
(svn r25167) -Fix [FS#5523] (r24832): Original train and rv acceleration did no longer respect bridge speed limits.
2 files changed with 14 insertions and 13 deletions:
0 comments (0 inline, 0 general)
src/roadveh_cmd.cpp
Show inline comments
 
@@ -429,17 +429,17 @@ void RoadVehicle::UpdateDeltaXY(Directio
 
 */
 
inline int RoadVehicle::GetCurrentMaxSpeed() const
 
{
 
	if (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) return min(this->vcache.cached_max_speed, this->current_order.max_speed * 2);
 

	
 
	int max_speed = this->vcache.cached_max_speed;
 

	
 
	/* Limit speed to 50% while reversing, 75% in curves. */
 
	for (const RoadVehicle *u = this; u != NULL; u = u->Next()) {
 
		if (this->state <= RVSB_TRACKDIR_MASK && IsReversingRoadTrackdir((Trackdir)this->state)) {
 
			max_speed = this->vcache.cached_max_speed / 2;
 
			break;
 
		} else if ((u->direction & 1) == 0) {
 
			max_speed = this->vcache.cached_max_speed * 3 / 4;
 
		if (_settings_game.vehicle.roadveh_acceleration_model == AM_REALISTIC) {
 
			if (this->state <= RVSB_TRACKDIR_MASK && IsReversingRoadTrackdir((Trackdir)this->state)) {
 
				max_speed = this->vcache.cached_max_speed / 2;
 
				break;
 
			} else if ((u->direction & 1) == 0) {
 
				max_speed = this->vcache.cached_max_speed * 3 / 4;
 
			}
 
		}
 

	
 
		/* Vehicle is on the middle part of a bridge. */
src/train_cmd.cpp
Show inline comments
 
@@ -371,10 +371,11 @@ int Train::GetCurveSpeedLimit() const
 
 */
 
int Train::GetCurrentMaxSpeed() const
 
{
 
	if (_settings_game.vehicle.train_acceleration_model == AM_ORIGINAL) return min(this->gcache.cached_max_track_speed, this->current_order.max_speed);
 

	
 
	int max_speed = this->tcache.cached_max_curve_speed;
 
	if (IsRailStationTile(this->tile)) {
 
	int max_speed = _settings_game.vehicle.train_acceleration_model == AM_ORIGINAL ?
 
			this->gcache.cached_max_track_speed :
 
			this->tcache.cached_max_curve_speed;
 

	
 
	if (_settings_game.vehicle.train_acceleration_model == AM_REALISTIC && IsRailStationTile(this->tile)) {
 
		StationID sid = GetStationIndex(this->tile);
 
		if (this->current_order.ShouldStopAtStation(this, sid)) {
 
			int station_ahead;
 
@@ -400,7 +401,7 @@ int Train::GetCurrentMaxSpeed() const
 
	}
 

	
 
	for (const Train *u = this; u != NULL; u = u->Next()) {
 
		if (u->track == TRACK_BIT_DEPOT) {
 
		if (_settings_game.vehicle.train_acceleration_model == AM_REALISTIC && u->track == TRACK_BIT_DEPOT) {
 
			max_speed = min(max_speed, 61);
 
			break;
 
		}
 
@@ -2775,7 +2776,7 @@ int Train::UpdateSpeed()
 
	switch (_settings_game.vehicle.train_acceleration_model) {
 
		default: NOT_REACHED();
 
		case AM_ORIGINAL:
 
			return this->DoUpdateSpeed(this->acceleration * (this->GetAccelerationStatus() == AS_BRAKE ? -4 : 2), 0, min(this->gcache.cached_max_track_speed, this->current_order.max_speed));
 
			return this->DoUpdateSpeed(this->acceleration * (this->GetAccelerationStatus() == AS_BRAKE ? -4 : 2), 0, this->GetCurrentMaxSpeed());
 

	
 
		case AM_REALISTIC:
 
			return this->DoUpdateSpeed(this->GetAcceleration(), this->GetAccelerationStatus() == AS_BRAKE ? 0 : 2, this->GetCurrentMaxSpeed());
0 comments (0 inline, 0 general)