summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2013-04-08 19:55:24 +0000
committerfrosch <frosch@openttd.org>2013-04-08 19:55:24 +0000
commit1eb6e76d0881d22c11d8ffa712024ce6e001e493 (patch)
tree3f4713bcb2f22cf5fe498dfc13b03eb73b76d50f
parent016730ab10d02a140798015df9a1faabdc4e9bf3 (diff)
downloadopenttd-1eb6e76d0881d22c11d8ffa712024ce6e001e493.tar.xz
(svn r25167) -Fix [FS#5523] (r24832): Original train and rv acceleration did no longer respect bridge speed limits.
-rw-r--r--src/roadveh_cmd.cpp14
-rw-r--r--src/train_cmd.cpp11
2 files changed, 13 insertions, 12 deletions
diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp
index e740e26f9..bba108d4c 100644
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -429,17 +429,17 @@ void RoadVehicle::UpdateDeltaXY(Direction direction)
*/
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. */
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index a01612511..f1fb50393 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -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 = _settings_game.vehicle.train_acceleration_model == AM_ORIGINAL ?
+ this->gcache.cached_max_track_speed :
+ this->tcache.cached_max_curve_speed;
- int max_speed = this->tcache.cached_max_curve_speed;
- if (IsRailStationTile(this->tile)) {
+ 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());