void Map::Render(SDL_Surface* tileSet, SDL_Surface* display) const
{
const int tileSize = Tile::GetTileSize();
Vector2D cameraLocation = Camera::control.GetLocation();
//Checking boundaries
if (cameraLocation.x < 0)
cameraLocation.x = 0;
else if (cameraLocation.x > width * tileSize)
cameraLocation.x = width * tileSize;
if (cameraLocation.y < 0)
cameraLocation.y = 0;
else if (cameraLocation.y > height * tileSize)
cameraLocation.y = height * tileSize;
Vector2D first;
first.x = (int)cameraLocation.x / tileSize;
first.y = (int)cameraLocation.y / tileSize;
Vector2D offset;
offset.x = (int)cameraLocation.x % tileSize;
offset.y = (int)cameraLocation.y % tileSize;
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
//Segmentation fault happens here
const int index = \
rows[y + first.y].columns[x + first.x].GetTileID();
Rectangle srcRect = Tile::GetSourceRect(index);
const int xOffset = x * tileSize - offset.x;
const int yOffset = y * tileSize - offset.y;
Surface::Blit(xOffset, yOffset, srcRect, tileSet, display);
}
}
}
The segmentation fault happens at the GetTileID() function. Additional data:
width = 50;
height = 200;
tileSize = 96;
//Variable values when the segmentation fault happens
cameraLocation.x = 10;
cameraLocation.y = 100;
first.x = 0;
first.y = 1;
offset.x = 10;
offset.y = 4;
x = 9;
y = 198;
xOffset = 854;
yOffset = 19004;