mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-12 10:30:28 +00:00
(svn r21915) -Codechange: rename RoadVehicleAccelerate to RoadVehicle::UpdateSpeed (to match the naming used by Trains), and make use of the algorithm implemented in GroundVehicle
This commit is contained in:
parent
b4a175ba41
commit
430fda01dc
@ -120,6 +120,7 @@ struct RoadVehicle : public GroundVehicle<RoadVehicle, VEH_ROAD> {
|
|||||||
bool IsBus() const;
|
bool IsBus() const;
|
||||||
|
|
||||||
int GetCurrentMaxSpeed() const;
|
int GetCurrentMaxSpeed() const;
|
||||||
|
int UpdateSpeed();
|
||||||
|
|
||||||
protected: // These functions should not be called outside acceleration code.
|
protected: // These functions should not be called outside acceleration code.
|
||||||
|
|
||||||
|
@ -649,28 +649,16 @@ static void RoadVehArrivesAt(const RoadVehicle *v, Station *st)
|
|||||||
* the distance to drive before moving a step on the map.
|
* the distance to drive before moving a step on the map.
|
||||||
* @return distance to drive.
|
* @return distance to drive.
|
||||||
*/
|
*/
|
||||||
static int RoadVehAccelerate(RoadVehicle *v)
|
int RoadVehicle::UpdateSpeed()
|
||||||
{
|
{
|
||||||
uint accel = v->overtaking != 0 ? 256 : 0;
|
switch (_settings_game.vehicle.roadveh_acceleration_model) {
|
||||||
accel += (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) ? 256 : v->GetAcceleration();
|
default: NOT_REACHED();
|
||||||
uint spd = v->subspeed + accel;
|
case AM_ORIGINAL:
|
||||||
|
return this->DoUpdateSpeed(this->overtaking != 0 ? 512 : 256, 0, this->GetCurrentMaxSpeed());
|
||||||
|
|
||||||
v->subspeed = (uint8)spd;
|
case AM_REALISTIC:
|
||||||
|
return this->DoUpdateSpeed(this->GetAcceleration() + (this->overtaking != 0 ? 256 : 0), this->GetAccelerationStatus() == AS_BRAKE ? 0 : 4, this->GetCurrentMaxSpeed());
|
||||||
int tempmax = v->GetCurrentMaxSpeed();
|
|
||||||
if (v->cur_speed > tempmax) {
|
|
||||||
tempmax = v->cur_speed - (v->cur_speed / 10) - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Force a minimum speed of 1 km/h when realistic acceleration is on. */
|
|
||||||
int min_speed = (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) ? 0 : 4;
|
|
||||||
v->cur_speed = spd = Clamp(v->cur_speed + ((int)spd >> 8), min_speed, tempmax);
|
|
||||||
|
|
||||||
int scaled_spd = v->GetAdvanceSpeed(spd);
|
|
||||||
|
|
||||||
scaled_spd += v->progress;
|
|
||||||
v->progress = 0;
|
|
||||||
return scaled_spd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Direction RoadVehGetNewDirection(const RoadVehicle *v, int x, int y)
|
static Direction RoadVehGetNewDirection(const RoadVehicle *v, int x, int y)
|
||||||
@ -1466,7 +1454,7 @@ static bool RoadVehController(RoadVehicle *v)
|
|||||||
v->ShowVisualEffect();
|
v->ShowVisualEffect();
|
||||||
|
|
||||||
/* Check how far the vehicle needs to proceed */
|
/* Check how far the vehicle needs to proceed */
|
||||||
int j = RoadVehAccelerate(v);
|
int j = v->UpdateSpeed();
|
||||||
|
|
||||||
int adv_spd = v->GetAdvanceDistance();
|
int adv_spd = v->GetAdvanceDistance();
|
||||||
bool blocked = false;
|
bool blocked = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user