Jump to content

  • Log In with Google      Sign In   
  • Create Account


Kpaiva

Member Since 27 Jan 2012
Offline Last Active Mar 08 2012 10:03 PM

Posts I've Made

In Topic: 2d tile rendering using tmx-parser and SDL

28 January 2012 - 05:18 PM

I found the answer after some brute force here is the changed working code if anyone else needs it:
PS: Num_Of_Cols is the same thing as (TilesetWidth / TileWidth)

void Map::RenderMapIsometric(SDL_Surface *SurfaceDest)
{
   for (int i = 0; i < map->GetNumLayers(); ++i)
   {
	  // Get a layer.
	  this->layer = map->GetLayer(i);
	 
	  for (int x = 0; x < layer->GetWidth(); ++x)
	  {
		 for (int y = 0; y < layer->GetHeight(); ++y)
		 {
		    int CurTile = layer->GetTileGid(x, y);
		    if(CurTile == 0)
		    {
			   continue;
		    }
		    //CurTile = tileset->GetFirstGid() + CurTile;
		    CurTile--;
		   
		    int tileset_col = (CurTile % Num_Of_Cols);
		    int tileset_row = (CurTile / Num_Of_Cols);
		    SDL_Rect rect_CurTile;
		    rect_CurTile.x = (this->tileset->GetMargin() + (this->tileset->GetTileWidth() + this->tileset->GetSpacing()) * tileset_col);
		    rect_CurTile.y = (this->tileset->GetMargin() + (this->tileset->GetTileHeight() + this->tileset->GetSpacing()) * tileset_row);
		    rect_CurTile.w = this->tileset->GetTileWidth();
		    rect_CurTile.h = this->tileset->GetTileHeight();
		    int DrawX = (x * this->tileset->GetTileWidth() / 2) + (y * this->tileset->GetTileWidth() / 2);
		    int DrawY = (y * this->tileset->GetTileHeight() / 2) - (x * this->tileset->GetTileHeight() / 2);
		    apply_surfaceClip(DrawX, DrawY, surf_Tileset, SurfaceDest, &rect_CurTile);
		 }
	  }
   }
}

PARTNERS