mapHandler.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "stdafx.h"
  2. #include "mapHandler.h"
  3. #include "CSemiDefHandler.h"
  4. #include "SDL_rotozoom.h"
  5. extern SDL_Surface * ekran;
  6. void mapHandler::init()
  7. {
  8. terrainBitmap = new SDL_Surface **[reader->map.width];
  9. for (int ii=0;ii<reader->map.width;ii++)
  10. terrainBitmap[ii] = new SDL_Surface*[reader->map.height]; // allocate memory
  11. for (int i=0; i<reader->map.width; i++)
  12. {
  13. for (int j=0; j<reader->map.height;j++)
  14. {
  15. TerrainTile zz = reader->map.terrain[i][j];
  16. std::string name = CSemiDefHandler::nameFromType(reader->map.terrain[i][j].tertype);
  17. for (int k=0; k<reader->defs.size(); k++)
  18. {
  19. if (reader->defs[k]->defName != name)
  20. continue;
  21. else
  22. {
  23. SDL_Surface * n;
  24. int ktora = reader->map.terrain[i][j].terview;
  25. terrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap;
  26. //TODO: odwracanie
  27. //SDL_BlitSurface(terrainBitmap[i][j],NULL,ekran,NULL); SDL_Flip(ekran);SDL_Delay(50);
  28. break;
  29. }
  30. }
  31. }
  32. }
  33. }
  34. SDL_Surface * mapHandler::terrainRect(int x, int y, int dx, int dy)
  35. {
  36. #if SDL_BYTEORDER == SDL_BIG_ENDIAN
  37. int rmask = 0xff000000;
  38. int gmask = 0x00ff0000;
  39. int bmask = 0x0000ff00;
  40. int amask = 0x000000ff;
  41. #else
  42. int rmask = 0x000000ff;
  43. int gmask = 0x0000ff00;
  44. int bmask = 0x00ff0000;
  45. int amask = 0xff000000;
  46. #endif
  47. SDL_Surface * su = SDL_CreateRGBSurface(SDL_SWSURFACE, dx*32, dy*32, 32,
  48. rmask, gmask, bmask, amask);
  49. for (int bx=0; bx<dx; bx++)
  50. {
  51. for (int by=0; by<dy; by++)
  52. {
  53. SDL_Rect * sr = new SDL_Rect;
  54. sr->y=by*32;
  55. sr->x=bx*32;
  56. sr->h=sr->w=32;
  57. SDL_BlitSurface(terrainBitmap[bx][by],NULL,su,sr);
  58. //SDL_BlitSurface(su,NULL,ekran,NULL);SDL_Flip(ekran);
  59. }
  60. }
  61. return su;
  62. }