(svn r21914) -Codechange: move the algorithmic part of Train::UpdateSpeed to a function in GroundVehicle

This commit is contained in:
rubidium
2011-01-26 17:34:07 +00:00
parent 509a01e291
commit 2a9fe0c0d8
2 changed files with 38 additions and 27 deletions

View File

@@ -2630,38 +2630,14 @@ void Train::MarkDirty()
*/
int Train::UpdateSpeed()
{
uint accel;
uint16 max_speed;
switch (_settings_game.vehicle.train_acceleration_model) {
default: NOT_REACHED();
case AM_ORIGINAL:
max_speed = this->gcache.cached_max_track_speed;
accel = this->acceleration * (this->GetAccelerationStatus() == AS_BRAKE ? -4 : 2);
break;
return this->DoUpdateSpeed(this->acceleration * (this->GetAccelerationStatus() == AS_BRAKE ? -4 : 2), 0, this->gcache.cached_max_track_speed);
case AM_REALISTIC:
max_speed = this->GetCurrentMaxSpeed();
accel = this->GetAcceleration();
break;
return this->DoUpdateSpeed(this->GetAcceleration(), this->GetAccelerationStatus() == AS_BRAKE ? 0 : 2, this->GetCurrentMaxSpeed());
}
uint spd = this->subspeed + accel;
this->subspeed = (byte)spd;
{
int tempmax = max_speed;
if (this->cur_speed > max_speed) {
tempmax = max(this->cur_speed - (this->cur_speed / 10) - 1, tempmax);
}
/* Force a minimum speed of 1 km/h when realistic acceleration is on and the train is not braking. */
int min_speed = (_settings_game.vehicle.train_acceleration_model == AM_ORIGINAL || this->GetAccelerationStatus() == AS_BRAKE) ? 0 : 2;
this->cur_speed = spd = Clamp(this->cur_speed + ((int)spd >> 8), min_speed, tempmax);
}
int scaled_spd = this->GetAdvanceSpeed(spd);
scaled_spd += this->progress;
this->progress = 0; // set later in TrainLocoHandler or TrainController
return scaled_spd;
}
/**