Rounding-error correction in log(x|y)ToUniverse; bug #1046; from Nic
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3162 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
Changes towards version 0.7:
|
Changes towards version 0.7:
|
||||||
|
- Rounding-error correction in log(x|y)ToUniverse (bug #1046), from Nic
|
||||||
- Change hardcoded Starbase and Sa-Matra values to pretty enum values
|
- Change hardcoded Starbase and Sa-Matra values to pretty enum values
|
||||||
(bug #1047), from Nic
|
(bug #1047), from Nic
|
||||||
- Load override.cfg from user's dir to add or override menu controls - Alex
|
- Load override.cfg from user's dir to add or override menu controls - Alex
|
||||||
|
|||||||
+16
-11
@@ -92,11 +92,18 @@ extern int ScreenHeight;
|
|||||||
#define UNIT_SCREEN_WIDTH 63
|
#define UNIT_SCREEN_WIDTH 63
|
||||||
#define UNIT_SCREEN_HEIGHT 50
|
#define UNIT_SCREEN_HEIGHT 50
|
||||||
|
|
||||||
|
#define LOG_UNITS_X ((SDWORD)(LOG_SPACE_WIDTH >> 4) * SECTOR_WIDTH)
|
||||||
|
#define LOG_UNITS_Y ((SDWORD)(LOG_SPACE_HEIGHT >> 4) * SECTOR_HEIGHT)
|
||||||
|
#define UNIVERSE_UNITS_X (((MAX_X_UNIVERSE + 1) >> 4) * 10)
|
||||||
|
#define UNIVERSE_UNITS_Y (((MAX_Y_UNIVERSE + 1) >> 4))
|
||||||
|
|
||||||
|
#define ROUNDING_ERROR(div) ((div) >> 1)
|
||||||
|
|
||||||
static inline COORD
|
static inline COORD
|
||||||
logxToUniverse (SDWORD lx)
|
logxToUniverse (SDWORD lx)
|
||||||
{
|
{
|
||||||
return (COORD) ((lx * ((MAX_X_UNIVERSE + 1) >> 4)) * 10
|
return (COORD) ((lx * UNIVERSE_UNITS_X + ROUNDING_ERROR(LOG_UNITS_X))
|
||||||
/ ((SDWORD) ((LOG_SPACE_WIDTH) >> 4) * SECTOR_WIDTH));
|
/ LOG_UNITS_X);
|
||||||
}
|
}
|
||||||
#define LOGX_TO_UNIVERSE(lx) \
|
#define LOGX_TO_UNIVERSE(lx) \
|
||||||
logxToUniverse (lx)
|
logxToUniverse (lx)
|
||||||
@@ -104,27 +111,25 @@ static inline COORD
|
|||||||
logyToUniverse (SDWORD ly)
|
logyToUniverse (SDWORD ly)
|
||||||
{
|
{
|
||||||
return (COORD) (MAX_Y_UNIVERSE -
|
return (COORD) (MAX_Y_UNIVERSE -
|
||||||
(COORD)(((SDWORD) (ly) * ((MAX_Y_UNIVERSE + 1) >> 4))
|
((ly * UNIVERSE_UNITS_Y + ROUNDING_ERROR(LOG_UNITS_Y))
|
||||||
/ ((SDWORD) ((LOG_SPACE_HEIGHT) >> 4) * SECTOR_HEIGHT)));
|
/ LOG_UNITS_Y));
|
||||||
}
|
}
|
||||||
#define LOGY_TO_UNIVERSE(ly) \
|
#define LOGY_TO_UNIVERSE(ly) \
|
||||||
logyToUniverse (ly)
|
logyToUniverse (ly)
|
||||||
static inline SDWORD
|
static inline SDWORD
|
||||||
universeToLogx (COORD ux)
|
universeToLogx (COORD ux)
|
||||||
{
|
{
|
||||||
return ((SDWORD) ux * ((SDWORD) ((LOG_SPACE_WIDTH) >> 4) * SECTOR_WIDTH)
|
return (ux * LOG_UNITS_X + ROUNDING_ERROR(UNIVERSE_UNITS_X))
|
||||||
+ ((((MAX_X_UNIVERSE + 1) >> 4) * 10) >> 1))
|
/ UNIVERSE_UNITS_X;
|
||||||
/ (((MAX_X_UNIVERSE + 1) >> 4) * 10);
|
|
||||||
}
|
}
|
||||||
#define UNIVERSE_TO_LOGX(ux) \
|
#define UNIVERSE_TO_LOGX(ux) \
|
||||||
universeToLogx (ux)
|
universeToLogx (ux)
|
||||||
static inline SDWORD
|
static inline SDWORD
|
||||||
universeToLogy (COORD uy)
|
universeToLogy (COORD uy)
|
||||||
{
|
{
|
||||||
return ((SDWORD) (MAX_Y_UNIVERSE - uy)
|
return ((MAX_Y_UNIVERSE - uy) * LOG_UNITS_Y
|
||||||
* ((SDWORD) ((LOG_SPACE_HEIGHT) >> 4) * SECTOR_HEIGHT)
|
+ ROUNDING_ERROR(UNIVERSE_UNITS_Y))
|
||||||
+ (((MAX_Y_UNIVERSE + 1) >> 4) >> 1))
|
/ UNIVERSE_UNITS_Y;
|
||||||
/ ((MAX_Y_UNIVERSE + 1) >> 4);
|
|
||||||
}
|
}
|
||||||
#define UNIVERSE_TO_LOGY(uy) \
|
#define UNIVERSE_TO_LOGY(uy) \
|
||||||
universeToLogy (uy)
|
universeToLogy (uy)
|
||||||
|
|||||||
Reference in New Issue
Block a user