Fix a bug introduced in r1469, which produced gaps where the buildings should be and made the terrain jump around. (display3d.c)

Additionaly:
- Cleanup indention
- Remove an unused, commented out function
- Make code a bit more readable
- Insert suggestion into display3d.h (playerXTiles and rx are only use in one otehr file each, so maybe we could wrap them into a function for the purpose of encapsulation. The comment is ugly, I know.)


git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@1479 4a71c877-e1ca-e34f-864e-861f7616d084
master
Dennis Schridde 2007-04-16 19:09:09 +00:00
parent 300f691b0b
commit 345581c9ac
4 changed files with 17 additions and 93 deletions

View File

@ -180,7 +180,7 @@ BOOL godMode;
static UWORD WaterTileID = WATER_TILE;
static UWORD RiverBedTileID = BED_TILE;
static FRACT waterRealValue = 0.0f;
static float waterRealValue = 0.0f;
#define WAVE_SPEED 4
static SWORD vOffset = 1;
#define MAX_FIRE_STAGE 32
@ -689,7 +689,7 @@ static void drawTiles(iView *camera, iView *player)
if(vOffset >= 64/2)
{
vOffset = 0;
waterRealValue = 0;
waterRealValue = 0.0f;
}
}
/* Is the scene spinning? - showcase demo stuff */
@ -707,8 +707,8 @@ static void drawTiles(iView *camera, iView *player)
SetBSPCameraPos(BSPCamera.x, BSPCamera.y, BSPCamera.z);
/* Find our position in tile coordinates */
playerXTile = player->p.x / TILE_UNITS;
playerZTile = player->p.z / TILE_UNITS;
playerXTile = player->p.x >> TILE_SHIFT;
playerZTile = player->p.z >> TILE_SHIFT;
/* Get the x,z translation components */
rx = (player->p.x) & (TILE_UNITS-1);

View File

@ -72,22 +72,24 @@ extern void setProximityDraw(BOOL val);
extern void renderShadow( DROID *psDroid, iIMDShape *psShadowIMD );
extern UDWORD getSuggestedPitch ( void );
extern UDWORD getSuggestedPitch( void );
extern BOOL clipXY ( SDWORD x, SDWORD y);
extern BOOL init3DView(void);
extern void initViewPosition(void);
extern iView player,camera;
extern UDWORD distance;
extern UDWORD terrainOutline;
extern UDWORD distance;
extern UDWORD terrainOutline;
extern UDWORD xOffset,yOffset;
extern BOOL selectAttempt;
extern BOOL selectAttempt;
extern BOOL draggingTile;
extern struct iIMDShape *g_imd;
extern BOOL droidSelected;
extern UDWORD terrainMidX,terrainMidY;
extern Sint32 playerXTile, playerZTile, rx, rz;
// FIXME This only used in one location outside of display3d.c, maybe create a wrapper function instead? ->
extern Sint32 playerXTile, playerZTile, // -> lighting.c
rx, rz; // -> atmos.c
extern SDWORD scrollSpeed;
extern iBitmap **tilesRAW;

View File

@ -417,83 +417,6 @@ void normalsOnTile(UDWORD tileX, UDWORD tileY, UDWORD quadrant)
} // end switch
}
#if 0
/* Processes a light into the tileScreenInfo structure - this needs
to be optimised and profiled as it's costly to perform
*/
void processLight(LIGHT *psLight)
{
SDWORD i,j;
UDWORD tileX,tileY;
UDWORD offset;
UDWORD distToCorner;
UDWORD percent;
UDWORD xIndex,yIndex;
SDWORD xUpper,yUpper,xLower,yLower;
SDWORD gridMinX,gridMinY,gridMaxX,gridMaxY;
/* Firstly - there's no point processing lights that are off the grid */
if(clipXY(psLight->position.x,psLight->position.z) == FALSE)
{
return;
}
tileX = (psLight->position.x/TILE_UNITS);
tileY = (psLight->position.z/TILE_UNITS);
offset = psLight->range/TILE_UNITS;
if(player.p.x>=0)
{
gridMinX = player.p.x/TILE_UNITS;
}
else
{
gridMinX = 0;
}
if(player.p.z >=0)
{
gridMinY = player.p.z/TILE_UNITS;
}
else
{
gridMinY = 0;
}
gridMaxX = gridMinX + visibleXTiles;
gridMaxY = gridMinY + visibleYTiles;
xLower = tileX - offset;
xUpper = tileX + offset;
yLower = tileY - offset;
yUpper = tileY + offset;
for(i=xLower; i<xUpper; i++)
{
for(j=yLower; j<yUpper; j++)
{
/*
We must make sure that we don't attempt to colour a tile that isn't actually
on our grid - say when a light is on the periphery of the grid.
*/
if(i>gridMinX && i<gridMaxX && j>gridMinY && j<gridMaxY)
{
distToCorner = calcDistToTile(i,j,&psLight->position);
/* If we're inside the range of the light */
if(distToCorner<psLight->range)
{
/* Find how close we are to it */
percent = 100 - PERCENT(distToCorner,psLight->range);
xIndex = i - playerXTile;
yIndex = j - playerZTile;
colourTile(xIndex,yIndex,psLight->colour, (UBYTE)percent);
}
}
}
}
}
#endif
void processLight(LIGHT *psLight)
{
SDWORD tileX,tileY;
@ -568,7 +491,7 @@ UDWORD percent;
{
distToCorner = calcDistToTile(i,j,&psLight->position);
/* If we're inside the range of the light */
if(distToCorner<(SDWORD)psLight->range)
if (distToCorner<(SDWORD)psLight->range)
{
/* Find how close we are to it */
percent = 100 - PERCENT(distToCorner,psLight->range);
@ -576,11 +499,11 @@ UDWORD percent;
yIndex = j - playerZTile;
// Might go off the grid for light ranges > one tile
// if(i<visibleXTiles && j<visibleYTiles && i>=0 && j>=0)
if(xIndex >= 0 && yIndex >= 0 &&
xIndex < (SDWORD)visibleXTiles &&
yIndex < (SDWORD)visibleYTiles)
if ( xIndex >= 0 && yIndex >= 0 &&
xIndex < (SDWORD)visibleXTiles &&
yIndex < (SDWORD)visibleYTiles )
{
colourTile(xIndex,yIndex,psLight->colour, (UBYTE)(2*percent));
colourTile(xIndex, yIndex, psLight->colour, (UBYTE)(2*percent));
}
}

View File

@ -200,13 +200,12 @@ extern void mapWaterProcess( void );
/* Return a pointer to the tile structure at x,y */
static inline MAPTILE *mapTile(UDWORD x, UDWORD y)
{
ASSERT( x < mapWidth,
"mapTile: x coordinate bigger than map width" );
ASSERT( y < mapHeight,
"mapTile: y coordinate bigger than map height" );
return psMapTiles + x + (y * mapWidth);
return &psMapTiles[x + (y * mapWidth)];
}
/* Return height of tile at x,y */