Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1.  
  2. //asta-i functia de-mi detecteaza coliziunea
  3. bool Engine::handleCollision(Tank* tankToCheck, sf::FloatRect& intersection)
  4. {
  5.     sf::FloatRect firstSpriteBounds = tankToCheck->m_tankSprite.getGlobalBounds();
  6.  
  7.     for (auto &enemyTank : m_enemyTanks) {
  8.  
  9.         if (tankToCheck == enemyTank.get())
  10.             continue;
  11.  
  12.         sf::FloatRect secondSpriteBounds = enemyTank->m_tankSprite.getGlobalBounds();
  13.  
  14.         if (firstSpriteBounds.intersects(secondSpriteBounds, intersection)) {
  15.             return true;
  16.         }
  17.     }
  18.  
  19.     if (tankToCheck != m_localPlayerTank.get()) {
  20.         if (firstSpriteBounds.intersects(m_localPlayerTank->m_tankSprite.getGlobalBounds(), intersection)) {
  21.             return true;
  22.         }
  23.     }
  24.  
  25.     for (auto &entity : m_worldEntities) {
  26.  
  27.         if (entity->getType() == entityType::Bush)
  28.             continue;
  29.         if (entity->getType() == entityType::Ice)
  30.             continue;
  31.  
  32.         sf::FloatRect secondSpriteBounds = entity->getSprite().getGlobalBounds();
  33.  
  34.         if (firstSpriteBounds.intersects(secondSpriteBounds, intersection)) {
  35.             return true;
  36.         }
  37.     }
  38.    
  39.     return false;
  40. }
  41.  
  42. //asta-i functia de-mi misca tancurile, unde scade intersectia in caz de coliziune
  43. bool Engine::moveTank(Tank* tankToMove, const char direction, float speed)
  44. {
  45.     sf::FloatRect intersection;
  46.    
  47.     switch (direction) {
  48.     case DIR_UP:
  49.  
  50.         tankToMove->m_tankSprite.move(0, -speed);
  51.  
  52.         if (handleCollision(tankToMove, intersection)) {
  53.             tankToMove->m_tankSprite.move(0, intersection.height);
  54.             return false;
  55.         }
  56.  
  57.         if (tankToMove->m_tankSprite.getRotation() != 0)
  58.             tankToMove->m_tankSprite.setRotation(0.f);
  59.  
  60.         break;
  61.  
  62.     case DIR_DOWN:
  63.  
  64.         tankToMove->m_tankSprite.move(0, speed);
  65.  
  66.         if (handleCollision(tankToMove, intersection)) {
  67.             tankToMove->m_tankSprite.move(0, -intersection.height);
  68.             return false;
  69.         }
  70.  
  71.         if (tankToMove->m_tankSprite.getRotation() != 180)
  72.             tankToMove->m_tankSprite.setRotation(180.f);
  73.  
  74.         break;
  75.  
  76.     case DIR_LEFT:
  77.  
  78.         tankToMove->m_tankSprite.move(-speed, 0);
  79.  
  80.         if (handleCollision(tankToMove, intersection)) {
  81.             tankToMove->m_tankSprite.move(intersection.width, 0);
  82.             return false;
  83.         }
  84.  
  85.         if (tankToMove->m_tankSprite.getRotation() != -90)
  86.             tankToMove->m_tankSprite.setRotation(-90.f);
  87.  
  88.         break;
  89.  
  90.     case DIR_RIGHT:
  91.  
  92.         tankToMove->m_tankSprite.move(speed, 0);
  93.  
  94.         if (handleCollision(tankToMove, intersection)) {
  95.             tankToMove->m_tankSprite.move(-intersection.width, 0);
  96.             return false;
  97.         }
  98.  
  99.         if (tankToMove->m_tankSprite.getRotation() != 90)
  100.             tankToMove->m_tankSprite.setRotation(90.f);
  101.  
  102.         break;
  103.     }
  104.  
  105.     // daca s-a executat miscarea, returnam true
  106.     return true;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement