summaryrefslogtreecommitdiff
path: root/src/map_func.h
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2009-06-10 08:18:40 +0000
committersmatz <smatz@openttd.org>2009-06-10 08:18:40 +0000
commitec78a39f9e242930f3f83a3cb44858d392b3786f (patch)
tree62a4f5a1227cc77847fd1d173d33cf8b15a41dd1 /src/map_func.h
parent4e2c1ef08f6544e59614b8cdacd6d67fb8092306 (diff)
downloadopenttd-ec78a39f9e242930f3f83a3cb44858d392b3786f.tar.xz
(svn r16550) -Codechange: move definition of ScaleByMapSize to header file, use shifts instead of mults
Diffstat (limited to 'src/map_func.h')
-rw-r--r--src/map_func.h28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/map_func.h b/src/map_func.h
index 038942cd9..265b88741 100644
--- a/src/map_func.h
+++ b/src/map_func.h
@@ -111,14 +111,34 @@ static inline uint MapMaxY()
}
/**
- * Scales relative to the number of tiles.
+ * Scales the given value by the map size, where the given value is
+ * for a 256 by 256 map.
+ * @param n the value to scale
+ * @return the scaled size
*/
-uint ScaleByMapSize(uint);
+static inline uint ScaleByMapSize(uint n)
+{
+ /* Subtract 12 from shift in order to prevent integer overflow
+ * for large values of n. It's safe since the min mapsize is 64x64.
+ * Add (1<<4)-1 to round upwards. */
+ return ((n << (MapLogX() + MapLogY() - 12)) + (1 << 4) - 1) >> 4;
+}
+
/**
- * Scale relative to the circumference of the map.
+ * Scales the given value by the maps circumference, where the given
+ * value is for a 256 by 256 map
+ * @param n the value to scale
+ * @return the scaled size
*/
-uint ScaleByMapSize1D(uint);
+static inline uint ScaleByMapSize1D(uint n)
+{
+ /* Normal circumference for the X+Y is 256+256 = 1<<9
+ * Note, not actually taking the full circumference into account,
+ * just half of it.
+ * (1<<9) - 1 is there to scale upwards. */
+ return ((n << MapLogX()) + (n << MapLogY()) + (1 << 9) - 1) >> 9;
+}
/**
* An offset value between to tiles.