(svn r16550) -Codechange: move definition of ScaleByMapSize to header file, use shifts instead of mults

This commit is contained in:
smatz
2009-06-10 08:18:40 +00:00
parent 4e2c1ef08f
commit ec78a39f9e
2 changed files with 24 additions and 35 deletions

View File

@@ -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.