mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r16550) -Codechange: move definition of ScaleByMapSize to header file, use shifts instead of mults
This commit is contained in:
parent
4e2c1ef08f
commit
ec78a39f9e
31
src/map.cpp
31
src/map.cpp
|
@ -92,37 +92,6 @@ TileIndex TileAdd(TileIndex tile, TileIndexDiff add,
|
|||
}
|
||||
#endif
|
||||
|
||||
/*!
|
||||
* 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 n)
|
||||
{
|
||||
/* First shift by 12 to prevent integer overflow for large values of n.
|
||||
* >>12 is safe since the min mapsize is 64x64
|
||||
* Add (1<<4)-1 to round upwards. */
|
||||
return (n * (MapSize() >> 12) + (1 << 4) - 1) >> 4;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* 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 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 * (MapSizeX() + MapSizeY()) + (1 << 9) - 1) >> 9;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* This function checks if we add addx/addy to tile, if we
|
||||
* do wrap around the edges. For example, tile = (10,2) and
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue