changeset 17176:aac0cc059e41 draft

(svn r21915) -Codechange: rename RoadVehicleAccelerate to RoadVehicle::UpdateSpeed (to match the naming used by Trains), and make use of the algorithm implemented in GroundVehicle
author rubidium <rubidium@openttd.org>
date Wed, 26 Jan 2011 17:35:03 +0000
parents b21a59ab8453
children 79181bd6ef40
files src/roadveh.h src/roadveh_cmd.cpp
diffstat 2 files changed, 9 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/roadveh.h
+++ b/src/roadveh.h
@@ -120,6 +120,7 @@
 	bool IsBus() const;
 
 	int GetCurrentMaxSpeed() const;
+	int UpdateSpeed();
 
 protected: // These functions should not be called outside acceleration code.
 
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -649,28 +649,16 @@
  * 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 @@
 	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;