Changeset - r17166:c2f53ab3046a
[Not reviewed]
master
0 2 0
rubidium - 14 years ago 2011-01-26 17:35:03
rubidium@openttd.org
(svn r21915) -Codechange: rename RoadVehicleAccelerate to RoadVehicle::UpdateSpeed (to match the naming used by Trains), and make use of the algorithm implemented in GroundVehicle
2 files changed with 9 insertions and 20 deletions:
0 comments (0 inline, 0 general)
src/roadveh.h
Show inline comments
 
@@ -120,6 +120,7 @@ struct RoadVehicle : public GroundVehicl
 
	bool IsBus() const;
 

	
 
	int GetCurrentMaxSpeed() const;
 
	int UpdateSpeed();
 

	
 
protected: // These functions should not be called outside acceleration code.
 

	
src/roadveh_cmd.cpp
Show inline comments
 
@@ -649,28 +649,16 @@ static void RoadVehArrivesAt(const RoadV
 
 * the distance to drive before moving a step on the map.
 
 * @return distance to drive.
 
 */
 
static int RoadVehAccelerate(RoadVehicle *v)
 
int RoadVehicle::UpdateSpeed()
 
{
 
	uint accel = v->overtaking != 0 ? 256 : 0;
 
	accel += (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) ? 256 : v->GetAcceleration();
 
	uint spd = v->subspeed + accel;
 

	
 
	v->subspeed = (uint8)spd;
 
	switch (_settings_game.vehicle.roadveh_acceleration_model) {
 
		default: NOT_REACHED();
 
		case AM_ORIGINAL:
 
			return this->DoUpdateSpeed(this->overtaking != 0 ? 512 : 256, 0, this->GetCurrentMaxSpeed());
 

	
 
	int tempmax = v->GetCurrentMaxSpeed();
 
	if (v->cur_speed > tempmax) {
 
		tempmax = v->cur_speed - (v->cur_speed / 10) - 1;
 
		case AM_REALISTIC:
 
			return this->DoUpdateSpeed(this->GetAcceleration() + (this->overtaking != 0 ? 256 : 0), this->GetAccelerationStatus() == AS_BRAKE ? 0 : 4, this->GetCurrentMaxSpeed());
 
	}
 

	
 
	/* 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)
 
@@ -1466,7 +1454,7 @@ static bool RoadVehController(RoadVehicl
 
	v->ShowVisualEffect();
 

	
 
	/* Check how far the vehicle needs to proceed */
 
	int j = RoadVehAccelerate(v);
 
	int j = v->UpdateSpeed();
 

	
 
	int adv_spd = v->GetAdvanceDistance();
 
	bool blocked = false;
0 comments (0 inline, 0 general)