Advertisement
Felanpro

multiple object collision detection engine

Apr 26th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.14 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <SFML/Graphics.hpp>
  4.  
  5. using namespace std;
  6.  
  7. unsigned int width = 500;
  8. unsigned int height = 500;
  9. unsigned int direction = 0;
  10. float gravity = .3;
  11.  
  12. int main()
  13. {
  14.     sf::RenderWindow window(sf::VideoMode(width, height), "In progress");
  15.     window.setFramerateLimit(60);
  16.  
  17.     sf::Vector2f velocity(0, 0);
  18.  
  19.     sf::RectangleShape player(sf::Vector2f(50, 50));
  20.     player.setFillColor(sf::Color::Black);
  21.  
  22.     sf::RectangleShape object[10];
  23.  
  24.     for (int x = 0; x < 10; x++)
  25.     {
  26.         object[x].setFillColor(sf::Color::Magenta);
  27.         object[x].setPosition(50 * x, 50 * x);
  28.         object[x].setSize(sf::Vector2f(40, 40));
  29.     }
  30.  
  31.     sf::Event event;
  32.     while (window.isOpen())
  33.     {
  34.  
  35.         while (window.pollEvent(event))
  36.         {
  37.             if (event.type == sf::Event::Closed)
  38.             {
  39.                 window.close();
  40.             }
  41.             else if (event.type == sf::Event::KeyPressed)
  42.             {
  43.                 if (event.key.code == sf::Keyboard::Right)
  44.                 {
  45.                     velocity.x = 3;
  46.                 }
  47.                 else if (event.key.code == sf::Keyboard::Left)
  48.                 {
  49.                     velocity.x = -3;
  50.                 }
  51.                
  52.                 if (event.key.code == sf::Keyboard::Space)
  53.                 {
  54.                     velocity.y = -10;
  55.                 }
  56.             }
  57.         }
  58.  
  59.         /*
  60.         else if (direction == 3)
  61.         {
  62.             player.move(0, -3);
  63.         }
  64.         else if (direction == 4)
  65.         {
  66.             player.move(0, 3);
  67.         }
  68.         */
  69.  
  70.         //Jumping and gravity
  71.         if (player.getPosition().y > 450)
  72.         {
  73.             player.setPosition(player.getPosition().x, 450);
  74.             velocity.y = 0;
  75.         }
  76.         else
  77.         {
  78.             velocity.y += gravity;
  79.         }
  80.  
  81.  
  82.         //Check collision
  83.         sf::FloatRect player_boundingBox = player.getGlobalBounds();
  84.         sf::FloatRect overlap;
  85.         for (int x = 0; x < 10; x++)
  86.         {
  87.             if (player_boundingBox.intersects(object[x].getGlobalBounds(), overlap))
  88.             {
  89.                 cout << overlap.height << endl;
  90.                 cout << overlap.width << endl;
  91.  
  92.                 if (overlap.height >= overlap.width)
  93.                 {
  94.                     if (player.getPosition().x < object[x].getPosition().x)
  95.                     {
  96.                         cout << "The player just hit the object from the left side" << endl;
  97.                         player.setPosition(object[x].getPosition().x - 50, player.getPosition().y);
  98.                         velocity.x = -0.5;
  99.                     }
  100.                     else if (player.getPosition().x > object[x].getPosition().x)
  101.                     {
  102.                         cout << "The player just hit the object from the right side" << endl;
  103.                         player.setPosition((object[x].getPosition().x + 40), player.getPosition().y);
  104.                         velocity.x = .5;
  105.                     }
  106.                 }
  107.                 else if (overlap.height < overlap.width)
  108.                 {
  109.                     if (player.getPosition().y < object[x].getPosition().y)
  110.                     {
  111.                         cout << "The player just hit the object from the top side" << endl;
  112.                         player.setPosition(player.getPosition().x, object[x].getPosition().y - 50);
  113.                         velocity.y = 0;
  114.                     }
  115.                     else if (player.getPosition().y > object[x].getPosition().y)
  116.                     {
  117.                         cout << "The player just hit the object from the bottom side" << endl;
  118.                         player.setPosition(player.getPosition().x, object[x].getPosition().y + 40);
  119.                         velocity.y = 0;
  120.                     }
  121.                 }
  122.             }
  123.         }
  124.  
  125.         player.move(velocity);
  126.  
  127.         window.clear(sf::Color::White); //Clear
  128.        
  129.         window.draw(player);
  130.         for(int x = 0; x < 10; x++)
  131.             window.draw(object[x]);
  132.  
  133.         window.display(); //Display
  134.     }
  135.    
  136.     int pause; cin >> pause;
  137.     return 0;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement