diff options
author | frosch <frosch@openttd.org> | 2011-08-27 10:33:45 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2011-08-27 10:33:45 +0000 |
commit | e157a23056b3991a30ad21f581e7e74b6bec41d7 (patch) | |
tree | ed731d797d66ec5978c92fb9b3a7445c0b9a441e /src | |
parent | c6e29a5b8971e004d9b794fa2eaa928f0bcbbc38 (diff) | |
download | openttd-e157a23056b3991a30ad21f581e7e74b6bec41d7.tar.xz |
(svn r22849) -Codechange: Add ShipVehicleInfo::ApplyWaterClassSpeedFrac() to apply ocean/canal speed fractions to velocities.
Diffstat (limited to 'src')
-rw-r--r-- | src/engine_type.h | 7 | ||||
-rw-r--r-- | src/ship_cmd.cpp | 6 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/engine_type.h b/src/engine_type.h index 2bd7fae47..115cc1f98 100644 --- a/src/engine_type.h +++ b/src/engine_type.h @@ -74,6 +74,13 @@ struct ShipVehicleInfo { byte visual_effect; ///< Bitstuffed NewGRF visual effect data byte ocean_speed_frac; ///< Fraction of maximum speed for ocean tiles. byte canal_speed_frac; ///< Fraction of maximum speed for canal/river tiles. + + /** Apply ocean/canal speed fraction to a velocity */ + uint ApplyWaterClassSpeedFrac(uint raw_speed, bool is_ocean) const + { + /* speed_frac == 0 means no reduction while 0xFF means reduction to 1/256. */ + return raw_speed * (256 - (is_ocean ? this->ocean_speed_frac : this->canal_speed_frac)) / 256; + } }; /** diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index f38a83c25..3ea37f968 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -178,9 +178,9 @@ void Ship::UpdateCache() const ShipVehicleInfo *svi = ShipVehInfo(this->engine_type); /* Get speed fraction for the current water type. Aqueducts are always canals. */ - byte speed_frac = (GetEffectiveWaterClass(this->tile) == WATER_CLASS_SEA) ? svi->ocean_speed_frac : svi->canal_speed_frac; - /* speed_frac == 0 means no reduction while 0xFF means reduction to 1/256. */ - this->vcache.cached_max_speed = GetVehicleProperty(this, PROP_SHIP_SPEED, svi->max_speed) * (256 - speed_frac) / 256; + bool is_ocean = GetEffectiveWaterClass(this->tile) == WATER_CLASS_SEA; + uint raw_speed = GetVehicleProperty(this, PROP_SHIP_SPEED, svi->max_speed); + this->vcache.cached_max_speed = svi->ApplyWaterClassSpeedFrac(raw_speed, is_ocean); /* Update cargo aging period. */ this->vcache.cached_cargo_age_period = GetVehicleProperty(this, PROP_SHIP_CARGO_AGE_PERIOD, EngInfo(this->engine_type)->cargo_age_period); |