Fix #416: Division by zero for trains of 0 mass

In maximum achievable speed estimator
This commit is contained in:
Jonathan G Rennison
2022-09-04 18:20:09 +01:00
parent 0400f06d9e
commit e3896b69d3
4 changed files with 8 additions and 4 deletions

View File

@@ -225,6 +225,6 @@ short DeleteTemplateReplacementsByGroupID(GroupID);
void ReindexTemplateReplacements(); void ReindexTemplateReplacements();
int GetTemplateVehicleEstimatedMaxAchievableSpeed(const TemplateVehicle *tv, const int mass, const int speed_cap); int GetTemplateVehicleEstimatedMaxAchievableSpeed(const TemplateVehicle *tv, int mass, const int speed_cap);
#endif /* TEMPLATE_VEH_H */ #endif /* TEMPLATE_VEH_H */

View File

@@ -502,11 +502,13 @@ void UpdateAllTemplateVehicleImages()
_template_vehicle_images_valid = true; _template_vehicle_images_valid = true;
} }
int GetTemplateVehicleEstimatedMaxAchievableSpeed(const TemplateVehicle *tv, const int mass, const int speed_cap) int GetTemplateVehicleEstimatedMaxAchievableSpeed(const TemplateVehicle *tv, int mass, const int speed_cap)
{ {
int max_speed = 0; int max_speed = 0;
int acceleration; int acceleration;
if (mass < 1) mass = 1;
do do
{ {
max_speed++; max_speed++;

View File

@@ -520,6 +520,6 @@ inline int GetTileMarginInFrontOfTrain(const Train *v)
int GetTrainStopLocation(StationID station_id, TileIndex tile, Train *v, bool update_train_state, int *station_ahead, int *station_length); int GetTrainStopLocation(StationID station_id, TileIndex tile, Train *v, bool update_train_state, int *station_ahead, int *station_length);
int GetTrainRealisticAccelerationAtSpeed(const int speed, const int mass, const uint32 cached_power, const uint32 max_te, const uint32 air_drag, const RailType railtype); int GetTrainRealisticAccelerationAtSpeed(const int speed, const int mass, const uint32 cached_power, const uint32 max_te, const uint32 air_drag, const RailType railtype);
int GetTrainEstimatedMaxAchievableSpeed(const Train *train, const int mass, const int speed_cap); int GetTrainEstimatedMaxAchievableSpeed(const Train *train, int mass, const int speed_cap);
#endif /* TRAIN_H */ #endif /* TRAIN_H */

View File

@@ -7320,11 +7320,13 @@ int GetTrainRealisticAccelerationAtSpeed(const int speed, const int mass, const
return acceleration; return acceleration;
} }
int GetTrainEstimatedMaxAchievableSpeed(const Train *train, const int mass, const int speed_cap) int GetTrainEstimatedMaxAchievableSpeed(const Train *train, int mass, const int speed_cap)
{ {
int max_speed = 0; int max_speed = 0;
int acceleration; int acceleration;
if (mass < 1) mass = 1;
do do
{ {
max_speed++; max_speed++;