mapHandler.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include "stdafx.h"
  2. #include "mapHandler.h"
  3. #include "CSemiDefHandler.h"
  4. #include "SDL_rotozoom.h"
  5. #include "SDL_Extensions.h"
  6. extern SDL_Surface * ekran;
  7. void mapHandler::init()
  8. {
  9. terrainBitmap = new SDL_Surface **[reader->map.width];
  10. for (int ii=0;ii<reader->map.width;ii++)
  11. terrainBitmap[ii] = new SDL_Surface*[reader->map.height]; // allocate memory
  12. for (int i=0; i<reader->map.width; i++)
  13. {
  14. for (int j=0; j<reader->map.height;j++)
  15. {
  16. TerrainTile zz = reader->map.terrain[i][j];
  17. std::string name = CSemiDefHandler::nameFromType(reader->map.terrain[i][j].tertype);
  18. for (unsigned int k=0; k<reader->defs.size(); k++)
  19. {
  20. try
  21. {
  22. if (reader->defs[k]->defName != name)
  23. continue;
  24. else
  25. {
  26. SDL_Surface * n;
  27. int ktora = reader->map.terrain[i][j].terview;
  28. terrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap;
  29. //TODO: odwracanie
  30. switch ((reader->map.terrain[i][j].siodmyTajemniczyBajt)%4)
  31. {
  32. case 1:
  33. {
  34. terrainBitmap[i][j] = CSDL_Ext::rotate01(terrainBitmap[i][j]);
  35. break;
  36. }
  37. case 2:
  38. {
  39. terrainBitmap[i][j] = CSDL_Ext::hFlip(terrainBitmap[i][j]);
  40. break;
  41. }
  42. case 3:
  43. {
  44. terrainBitmap[i][j] = CSDL_Ext::rotate03(terrainBitmap[i][j]);
  45. break;
  46. }
  47. }
  48. //SDL_BlitSurface(terrainBitmap[i][j],NULL,ekran,NULL); SDL_Flip(ekran);SDL_Delay(50);
  49. break;
  50. }
  51. }
  52. catch (...)
  53. { continue; }
  54. }
  55. }
  56. }
  57. if (reader->map.twoLevel)
  58. {
  59. undTerrainBitmap = new SDL_Surface **[reader->map.width];
  60. for (int ii=0;ii<reader->map.width;ii++)
  61. undTerrainBitmap[ii] = new SDL_Surface*[reader->map.height]; // allocate memory
  62. for (int i=0; i<reader->map.width; i++)
  63. {
  64. for (int j=0; j<reader->map.height;j++)
  65. {
  66. TerrainTile zz = reader->map.undergroungTerrain[i][j];
  67. std::string name = CSemiDefHandler::nameFromType(reader->map.undergroungTerrain[i][j].tertype);
  68. for (unsigned int k=0; k<reader->defs.size(); k++)
  69. {
  70. try
  71. {
  72. if (reader->defs[k]->defName != name)
  73. continue;
  74. else
  75. {
  76. SDL_Surface * n;
  77. int ktora = reader->map.undergroungTerrain[i][j].terview;
  78. undTerrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap;
  79. //TODO: odwracanie
  80. switch ((reader->map.undergroungTerrain[i][j].siodmyTajemniczyBajt)%4)
  81. {
  82. case 1:
  83. {
  84. undTerrainBitmap[i][j] = CSDL_Ext::rotate01(undTerrainBitmap[i][j]);
  85. break;
  86. }
  87. case 2:
  88. {
  89. undTerrainBitmap[i][j] = CSDL_Ext::hFlip(undTerrainBitmap[i][j]);
  90. break;
  91. }
  92. case 3:
  93. {
  94. undTerrainBitmap[i][j] = CSDL_Ext::rotate03(undTerrainBitmap[i][j]);
  95. break;
  96. }
  97. }
  98. //SDL_BlitSurface(undTerrainBitmap[i][j],NULL,ekran,NULL); SDL_Flip(ekran);SDL_Delay(50);
  99. break;
  100. }
  101. }
  102. catch (...)
  103. { continue; }
  104. }
  105. }
  106. }
  107. }
  108. }
  109. SDL_Surface * mapHandler::terrainRect(int x, int y, int dx, int dy, int level)
  110. {
  111. #if SDL_BYTEORDER == SDL_BIG_ENDIAN
  112. int rmask = 0xff000000;
  113. int gmask = 0x00ff0000;
  114. int bmask = 0x0000ff00;
  115. int amask = 0x000000ff;
  116. #else
  117. int rmask = 0x000000ff;
  118. int gmask = 0x0000ff00;
  119. int bmask = 0x00ff0000;
  120. int amask = 0xff000000;
  121. #endif
  122. SDL_Surface * su = SDL_CreateRGBSurface(SDL_SWSURFACE, dx*32, dy*32, 32,
  123. rmask, gmask, bmask, amask);
  124. if (((dx+x)>((reader->map.width)) || (dy+y)>((reader->map.height))) || ((x<0)||(y<0) ) )
  125. throw new std::string("Poza zakresem");
  126. for (int bx=0; bx<dx; bx++)
  127. {
  128. for (int by=0; by<dy; by++)
  129. {
  130. SDL_Rect * sr = new SDL_Rect;
  131. sr->y=by*32;
  132. sr->x=bx*32;
  133. sr->h=sr->w=32;
  134. if (!level)
  135. SDL_BlitSurface(terrainBitmap[bx+x][by+y],NULL,su,sr);
  136. else
  137. SDL_BlitSurface(undTerrainBitmap[bx+x][by+y],NULL,su,sr);
  138. delete sr;
  139. //SDL_BlitSurface(su,NULL,ekran,NULL);SDL_Flip(ekran);
  140. }
  141. }
  142. return su;
  143. }