Beispiel #1
0
void drawalllayers(void)
{
    int c;
    for (c = 0; c < MAX_LAYERS; c++)
    {
        if (layervisible[c]) drawlayer(c);
    }
}
Beispiel #2
0
void TileMap::anylyzeLayers(XMLElement * e)
{
	XMLElement * data = e->FirstChildElement("data");
	
	const char* name = e->Attribute("name");
	if(name == 0)
	{
		SDL_Log("TileMap::anylyzeLayers erro");
		return ;
	}

	Layer * layer = new Layer();
	_layers[name] = layer;

	if(data != 0)
	{
		const char * d = data->GetText();
		int i=0;
		while(*d)
		{
			int gid = atoi(d);
			if(gid != 0)
				layer->setGid(i, gid);

			++i;
			const char* p = strchr(d, ',');
			if(p != 0)
				d = p+1;
			else
				d = strlen(d) + d;

			if(*d == ' ')
				d++;
			else if(*d == '\n')
				d++;
		};
	}
	else
	{
		return ;
	}

	drawlayer(layer);
}
Beispiel #3
0
void drawmap(bool fScreenshot, short iBlockSize)
{
	if(iBlockSize != TILESIZE)
	{
		SDL_Rect srcrect;
		srcrect.x = 0;
		srcrect.y = 0;
		srcrect.w = 640;
		srcrect.h = 480;

		SDL_Rect dstrect;
		dstrect.x = 0;
		dstrect.y = 0;
		dstrect.w = iBlockSize * 20;
		dstrect.h = iBlockSize * 15;

		if(SDL_SoftStretch(spr_background.getSurface(), &srcrect, blitdest, &dstrect) < 0)
		{
			fprintf(stderr, "SDL_SoftStretch error: %s\n", SDL_GetError());
			return;
		}
	}
	else
	{
		spr_background.draw(0,0);
	}

	drawlayer(0, false, iBlockSize);
	drawlayer(1, false, iBlockSize);


	SDL_Rect rSrc = {0, 0, iBlockSize, iBlockSize};
	SDL_Rect rDst = {0, 0, iBlockSize, iBlockSize};

	for(int j = 0; j < MAPHEIGHT; j++)
	{
		for(int i = 0; i < MAPWIDTH; i++)
		{
			int displayblock = displayblock = g_map.objectdata[i][j];

			if(displayblock != BLOCKSETSIZE)
			{
				rSrc.x = displayblock * iBlockSize;
				rSrc.y = iBlockSize * 30;

				rDst.x = i * iBlockSize;
				rDst.y = j * iBlockSize;

				if(displayblock >= 7 && displayblock <= 14)
					rSrc.y = iBlockSize * (g_map.iSwitches[(displayblock - 7) % 4] + 30);
				
				SDL_BlitSurface(g_map.tilesetsurface[iBlockSize == TILESIZE ? 0 : iBlockSize == PREVIEWTILESIZE ? 1 : 2], &rSrc, screen, &rDst);
			}
		}
	}

	drawlayer(2, false, iBlockSize);
	drawlayer(3, false, iBlockSize);

	for(int j = 0; j < MAPHEIGHT; j++)
	{
		for(int i = 0; i < MAPWIDTH; i++)
		{
			Warp * warp = &g_map.warpdata[i][j];
			
			if(warp->connection != -1)
			{
				SDL_Rect rSrc = {warp->connection * iBlockSize, warp->direction * iBlockSize, iBlockSize, iBlockSize};
				SDL_Rect rDst = {i * iBlockSize, j * iBlockSize, iBlockSize, iBlockSize};

				SDL_BlitSurface(spr_warps[iBlockSize == TILESIZE ? 0 : iBlockSize == PREVIEWTILESIZE ? 1 : 2].getSurface(), &rSrc, screen, &rDst);
			}
		}
	}
}