Advertisement
Guest User

Untitled

a guest
Nov 9th, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.71 KB | None | 0 0
  1. #include "GameplayScreen.h"
  2. #include "Config.h"
  3.  
  4. GameplayScreen::GameplayScreen(SDL_Renderer *renderer)
  5. {
  6.     this->file.LoadFromFile("Video");
  7.  
  8.     this->text.setFont("font", renderer);
  9.    
  10.     this->posX = file.getX();
  11.     this->posY = file.getY();
  12.  
  13.     this->moveMap = true;
  14.  
  15.     this->showDebugVariables = 0;
  16.  
  17.     this->multiplierX = 0;
  18.     this->multiplierY = 8;
  19.  
  20.     this->pPosX = 0;
  21.     this->pPosY = 0;
  22.  
  23.     this->blockState = None;
  24.     this->blockState = None;
  25.     this->currentElement = Earth;
  26.  
  27.     LoadElement(renderer);
  28.     LoadGameDate(renderer);
  29.  
  30.     ePlayer = new Player(renderer);
  31. }
  32.  
  33. GameplayScreen::~GameplayScreen(void)
  34. {
  35.     for (std::vector<Block*>::iterator i = vBlock.begin(); i < vBlock.end(); ++i)
  36.     {
  37.         delete (*i);
  38.     }
  39.     vBlock.clear();
  40.  
  41.     for (auto &m : map)
  42.     {
  43.         for (auto &mp : m)
  44.         {
  45.             mp.clear();
  46.         }
  47.         m.clear();
  48.     }
  49.     map.clear();
  50.  
  51.     delete ePlayer;
  52.     ent.ClearEntity();
  53. }
  54.  
  55. void GameplayScreen::Update()
  56. {
  57.     ePlayer->Update();
  58.     if (ePlayer->getPosY() >= 700)
  59.     {
  60.         ePlayer->setMove(false);
  61.         resetMapWhenPlayerFalled();
  62.         if (posX == 0)
  63.         {
  64.             ePlayer->setVelY(0);
  65.             ePlayer->setPosX(100);
  66.             ePlayer->setPosY(450);
  67.         }
  68.     }
  69.  
  70.     ent.Update();
  71. }
  72.  
  73. void GameplayScreen::Draw(SDL_Renderer *renderer)
  74. {
  75.     DrawMap(renderer);
  76.     ePlayer->Draw(renderer, showDebugVariables);
  77.     ent.Draw(renderer, posX, posY, showDebugVariables);
  78. }
  79.  
  80. void GameplayScreen::DrawMap(SDL_Renderer *renderer)
  81. {
  82.     for (int y = map.size() - 1; y >= 0; --y)
  83.     {
  84.         for (int x = getStartBlockX(), iEnd = getEndBlockX(); x <= iEnd && x < map[y].size(); ++x)
  85.         {
  86.             if (map[y][x] != "0,0")
  87.             {          
  88.                 SDL_Rect destRect;
  89.                 SDL_Rect srcRect;
  90.  
  91.                 srcRect.w = 32;
  92.                 srcRect.h = 32;
  93.                 srcRect.x = bNum(map[y][x]).first * srcRect.w;
  94.                 srcRect.y = bNum(map[y][x]).second * srcRect.h;
  95.  
  96.                 destRect.x = (x * 32 + posX) - 32 * multiplierX;         //destRect.x = x * 8 + posX;
  97.                 destRect.y = (y * 32 + posY) - 32 * multiplierY;         //destRect.y = y * 8 + posY;
  98.                 destRect.w = 33;                                         //destRect.w = 8;
  99.                 destRect.h = 33;                                         //destRect.h = 8;
  100.  
  101.                 switch (currentElement)
  102.                 {
  103.                     case Earth: vBlock[Earth]->Draw(renderer, srcRect, destRect); break;
  104.                     case Fire: vBlock[Fire]->Draw(renderer, srcRect, destRect); break;
  105.                     case Water: vBlock[Water]->Draw(renderer, srcRect, destRect); break;
  106.                     case Wind: vBlock[Wind]->Draw(renderer, srcRect, destRect); break;
  107.                 }
  108.             }
  109.         }
  110.     }
  111. }
  112.  
  113. void GameplayScreen::LoadElement(SDL_Renderer *renderer)
  114. {
  115.     switch (currentElement)
  116.     {
  117.         case Earth: EarthElement(renderer); break;
  118.         case Fire: FireElement(renderer); break;
  119.         case Water: WaterElement(renderer); break;
  120.         case Wind: WindElement(renderer); break;
  121.     }
  122. }
  123.  
  124. void GameplayScreen::EarthElement(SDL_Renderer *renderer)
  125. {
  126.     file.LoadFromFile("EarthEnviroment", map);
  127.    
  128.     ent.ClearEntity();
  129.     ent.CreateEntity(map);
  130.    
  131.     this->pPosX = 100;
  132.     this->pPosY = 300;
  133.  
  134.     ent.AddComponent("Human", EntityManager::EntityType::human, renderer);
  135.     ent.AddComponent("Cleaver", EntityManager::EntityType::cleaver, renderer);
  136. }
  137. void GameplayScreen::FireElement(SDL_Renderer *renderer)
  138. {
  139.     file.LoadFromFile("FireEnviroment", map);
  140.  
  141.     ent.ClearEntity();
  142.     ent.CreateEntity(map);
  143. }
  144. void GameplayScreen::WaterElement(SDL_Renderer *renderer)
  145. {
  146.     file.LoadFromFile("WaterEnviroment", map);
  147.  
  148.     ent.ClearEntity();
  149.     ent.CreateEntity(map);
  150. }
  151. void GameplayScreen::WindElement(SDL_Renderer *renderer)
  152. {
  153.     file.LoadFromFile("WindEnviroment", map);
  154.  
  155.     ent.ClearEntity();
  156.     ent.CreateEntity(map);
  157. }
  158.  
  159. void GameplayScreen::LoadGameDate(SDL_Renderer *renderer)
  160. {
  161.     std::vector<std::string> blockID;
  162.     blockID.push_back("1,0"); // dirt
  163.     blockID.push_back("2,0"); // grass
  164.     blockID.push_back("3,0"); // cobble
  165.     blockID.push_back("4,0"); // cobble 2
  166.     blockID.push_back("5,0"); // cobble
  167.  
  168.     if (blockID.size() != -1 && blockID.size() >= 5)
  169.     {
  170.         blockState = Collision;
  171.         blockState2 = Visible;
  172.     }
  173.  
  174.     switch(currentElement)
  175.     {  
  176.         case Earth: vBlock.push_back(new Block(Earth, new Texture("EarthTile", renderer))); break;
  177.         case Fire: vBlock.push_back(new Block(Fire, new Texture("FireTile", renderer))); break;
  178.         case Wind: vBlock.push_back(new Block(Wind, new Texture("WindTile", renderer))); break;
  179.         case Water: vBlock.push_back(new Block(Water, new Texture("WaterTile", renderer))); break;
  180.     }
  181. }
  182.  
  183. //też taka prymitywna wersja
  184. void GameplayScreen::MoveMap(int moveSpeedX, int moveY)
  185. {  
  186.     posX += moveSpeedX;
  187.     posY -= moveY;
  188. }
  189.  
  190. std::pair<int, int> GameplayScreen::bNum(std::string map)
  191. {
  192.     return std::pair<int, int>
  193.     (
  194.         //szuka w pliku tekstowym ma break;b case Water: e oznaczają przesunięcie obrazków na osi X
  195.         //(wtedy mapa wie od jakie break;ela X ma ciąć obraz)
  196.         atoi(map.substr(0, map.find(',')).c_str()),
  197.         //szuka w pliku tekstowym mapy liczb po ',', które oznaczają przesunięcie obrazków na osi Y
  198.         //(wtedy mapa wie od jakiego piksela Y ma ciąć obraz)
  199.         atoi(map.substr(map.find(',') + 1).c_str())
  200.     );
  201. }
  202.  
  203. void GameplayScreen::resetGameData()
  204. {
  205.     posX = 0;
  206.     posY = 0;
  207.  
  208.     switch (currentElement)
  209.     {
  210.         case Earth: getPlayer()->setStartPosition(pPosX, pPosY); break;
  211.         case Fire: getPlayer()->setStartPosition(pPosX, pPosY); break;
  212.         case Water: getPlayer()->setStartPosition(pPosX, pPosY); break;
  213.         case Wind: getPlayer()->setStartPosition(pPosX, pPosY); break;
  214.     }
  215. }
  216.  
  217. //wiem, wygląda to brzydko, ale miało początkowo miało działać, nie wyglądać.
  218. void GameplayScreen::resetMapWhenPlayerFalled()
  219. {
  220.     if (posX < 0)
  221.     {
  222.         int x = 0;
  223.         for (int i = 0; i < 10; i++)
  224.         {
  225.             x += i;
  226.         }
  227.         posX += x;
  228.         x = 0;
  229.     }
  230.     else posX = 0;
  231. }
  232.  
  233. int GameplayScreen::getStartBlockX()
  234. {
  235.     return (int)(-posX + (int)posX % 32) / 32;
  236. }
  237. int GameplayScreen::getEndBlockX()
  238. {
  239.     return (int)(-posX + (int)posX % 32 + 1280) / 32;
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement