Mercurial > hg > openttd
changeset 20206:c2446757542d draft
(svn r25167) -Fix [FS#5523] (r24832): Original train and rv acceleration did no longer respect bridge speed limits.
author | frosch <frosch@openttd.org> |
---|---|
date | Mon, 08 Apr 2013 19:55:24 +0000 |
parents | e149be578bee |
children | cf87f298b523 |
files | src/roadveh_cmd.cpp src/train_cmd.cpp |
diffstat | 2 files changed, 14 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -429,17 +429,17 @@ */ 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. */
--- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -371,10 +371,11 @@ */ 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 @@ } 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 @@ 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());