changeset 19091:d7968e8b2ae7 draft

(svn r23945) -Fix: Better rounding when converting internal speed to displayed speed.
author michi_cc <michi_cc@openttd.org>
date Tue, 14 Feb 2012 17:03:56 +0000
parents d043e5f03750
children 5bce64c067f7
files src/strings.cpp src/strings_func.h
diffstat 2 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -683,6 +683,25 @@
 }
 
 /**
+ * Convert the given km/h-ish speed to the display speed.
+ * @param speed the speed to convert
+ * @return the converted speed.
+ */
+uint ConvertKmhishSpeedToDisplaySpeed(uint speed)
+{
+	return _units[_settings_game.locale.units].c_velocity.ToDisplay(speed * 10, false) / 16;
+}
+
+/**
+ * Convert the given display speed to the km/h-ish speed.
+ * @param speed the speed to convert
+ * @return the converted speed.
+ */
+uint ConvertDisplaySpeedToKmhishSpeed(uint speed)
+{
+	return _units[_settings_game.locale.units].c_velocity.FromDisplay(speed * 16) / 10;
+}
+/**
  * Parse most format codes within a string and write the result to a buffer.
  * @param buff  The buffer to write the final string to.
  * @param str   The original string with format codes.
@@ -1137,7 +1156,7 @@
 
 			case SCC_VELOCITY: { // {VELOCITY}
 				assert(_settings_game.locale.units < lengthof(_units));
-				int64 args_array[] = {ConvertSpeedToDisplaySpeed(args->GetInt64(SCC_VELOCITY) * 10 / 16)};
+				int64 args_array[] = {ConvertKmhishSpeedToDisplaySpeed(args->GetInt64(SCC_VELOCITY))};
 				StringParameters tmp_params(args_array);
 				buff = FormatString(buff, GetStringPtr(_units[_settings_game.locale.units].velocity), &tmp_params, last);
 				break;
--- a/src/strings_func.h
+++ b/src/strings_func.h
@@ -141,6 +141,9 @@
 char *GetStringWithArgs(char *buffr, StringID string, StringParameters *args, const char *last, uint case_index = 0, bool game_script = false);
 const char *GetStringPtr(StringID string);
 
+uint ConvertKmhishSpeedToDisplaySpeed(uint speed);
+uint ConvertDisplaySpeedToKmhishSpeed(uint speed);
+
 void InjectDParam(uint amount);
 
 /**