Advertisement
Guest User

Untitled

a guest
Apr 12th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <SFML/Graphics.hpp>
  4.  
  5. float toRadian(const float &degree) {
  6.     return degree / 57.2957795;
  7. }
  8. float toDegree(const float &radian) {
  9.     return radian * 57.2957795;
  10. }
  11.  
  12. float getVectorLength(const sf::Vector2f &vector) {
  13.     return sqrt(vector.x*vector.x + vector.y*vector.y);
  14. }
  15.  
  16. sf::Vector2f normalizeVector(const sf::Vector2f &vector, const float &scale = 1.f) {
  17.     return (vector / getVectorLength(vector) ) * scale;
  18. }
  19.  
  20. sf::Vector2f getDeltaPosition(const sf::Vector2f &startPosition, const sf::Vector2f &endPosition) {
  21.     return sf::Vector2f( endPosition - startPosition );
  22. }
  23.  
  24. int main()
  25. {
  26.     sf::RenderWindow window({ 1280, 720 }, "Screenshot!");
  27.     window.setFramerateLimit(50);
  28.     sf::Vector2f position(5, 650);
  29.     sf::Vector2f velocity;
  30.  
  31.     const float GRAVITY = 0.05;
  32.     bool releaseBall = false;
  33.     bool isBallFlying = false;
  34.  
  35.     sf::RectangleShape rect({ 1280, 5 });
  36.     rect.setFillColor(sf::Color(200, 100, 100, 100));
  37.     rect.setPosition(0, 650);
  38.  
  39.     sf::CircleShape ball(5);
  40.     ball.setOrigin(5, 5);
  41.     ball.setPosition(position);
  42.  
  43.     sf::CircleShape predictBall(5);
  44.     predictBall.setOrigin(5, 5);
  45.     predictBall.setPosition(position);
  46.  
  47.     float minDistance = 10000;
  48.     while (window.isOpen())
  49.     {
  50.         sf::Event event;
  51.         while (window.pollEvent(event))
  52.         {
  53.             if (event.type == sf::Event::Closed)
  54.                 window.close();
  55.             if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && releaseBall == false && isBallFlying == false)
  56.                 releaseBall = true;
  57.         }
  58.  
  59.  
  60.         sf::Vector2f deltaMouse = normalizeVector(getDeltaPosition({ 5,650 }, (sf::Vector2f)sf::Mouse::getPosition(window)), 7);
  61.  
  62.  
  63.         float vectorLength = getVectorLength(deltaMouse);
  64.         if (isBallFlying == false && releaseBall == false) {
  65.             float x =
  66.                 vectorLength * vectorLength * sin(
  67.                     2 * std::asin( std::abs(deltaMouse.y)/vectorLength )
  68.                 )
  69.                 / GRAVITY;
  70.            
  71.  
  72.             predictBall.setPosition(sf::Vector2f(x, 650));
  73.             //std::cout << x << std::endl;
  74.         }
  75.  
  76.         if (releaseBall) {
  77.             velocity = deltaMouse;
  78.             //std::cout << velocity.x << " " << velocity.y << std::endl;
  79.             isBallFlying = true;
  80.             releaseBall = false;
  81.         }
  82.         if (isBallFlying) {
  83.             //std::cout << "HALO" << std::endl;
  84.             position += velocity;
  85.             velocity.y += GRAVITY;
  86.             float tempDist = getVectorLength(  getDeltaPosition(predictBall.getPosition(), ball.getPosition()));
  87.             if (tempDist < minDistance)
  88.                 minDistance = tempDist;
  89.             if (position.y > 700) {
  90.                 position = {5,650};
  91.                 isBallFlying = false;
  92.                 std::cout << "Distance: " << minDistance << std::endl;
  93.             }
  94.             ball.setPosition(position);
  95.         }
  96.  
  97.  
  98.  
  99.         window.clear(sf::Color(37,37,48));
  100.  
  101.        
  102.         window.draw(rect);
  103.  
  104.        
  105.         window.draw(ball);
  106.  
  107.         window.draw(predictBall);
  108.  
  109.  
  110.         window.display();
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement