void drawalllayers(void) { int c; for (c = 0; c < MAX_LAYERS; c++) { if (layervisible[c]) drawlayer(c); } }
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); }
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); } } } }