MisterEpic

Ball.cpp

Apr 6th, 2012
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. #include "Ball.h"
  2.  
  3. #include <SFML/Graphics.hpp>
  4. #include <SFML/Audio.hpp>
  5.  
  6. using namespace sf;
  7.  
  8. Ball::Ball(sf::RenderWindow *App)
  9. {
  10.     this->App = App;
  11.     const float PI = 3.14159f;
  12.     speed = 400.f;
  13.  
  14.     SoundBuffer BounceWallBuffer;
  15.     BounceWallBuffer.LoadFromFile("datas/pong/ballwall.wav");
  16.     sBounceWall.SetBuffer(BounceWallBuffer);
  17.  
  18.     SoundBuffer BouncePaddleBuffer;
  19.     BouncePaddleBuffer.LoadFromFile("datas/pong/ballpaddle.wav");
  20.     sBouncePaddle.SetBuffer(BouncePaddleBuffer);
  21.  
  22.     Image BallImage;
  23.     BallImage.LoadFromFile("datas/pong/ball.png");
  24.     sprite.SetImage(BallImage);
  25.  
  26.     sprite.Move((App->GetView().GetRect().GetWidth() - sprite.GetSize().x) / 2, (App->GetView().GetRect().GetHeight() - sprite.GetSize().y) / 2);
  27.  
  28.     do
  29.     {
  30.         angle = Randomizer::Random(0.f, 2 * PI);
  31.     }
  32.     while (abs(cos(angle)) < 0.7f);
  33. }
  34.  
  35. bool Ball::refresh(Sprite *LeftPaddle, Sprite *RightPaddle)
  36. {
  37.     const float PI = 3.14159f;
  38.  
  39.     float Factor = speed * App->GetFrameTime();
  40.     sprite.Move(cos(angle) * Factor, sin(angle) * Factor);
  41.  
  42.     if (sprite.GetPosition().x < 0.f)
  43.     {
  44.         return false; //IsPlaying = false;
  45.     }
  46.     if (sprite.GetPosition().x + sprite.GetSize().x > App->GetView().GetRect().GetWidth())
  47.     {
  48.         return false; //IsPlaying = false;
  49.     }
  50.     if (sprite.GetPosition().y < 0.f)
  51.     {
  52.         sBounceWall.Play();
  53.         angle = -angle;
  54.         sprite.SetY(0.1f);
  55.     }
  56.     if (sprite.GetPosition().y + sprite.GetSize().y > App->GetView().GetRect().GetHeight())
  57.     {
  58.         sBounceWall.Play();
  59.         angle = -angle;
  60.         sprite.SetY(App->GetView().GetRect().GetHeight() - sprite.GetSize().y - 0.1f);
  61.     }
  62.  
  63.     if (sprite.GetPosition().x < LeftPaddle->GetPosition().x + LeftPaddle->GetSize().x &&
  64.         sprite.GetPosition().x > LeftPaddle->GetPosition().x + (LeftPaddle->GetSize().x / 2.0f) &&
  65.         sprite.GetPosition().y + sprite.GetSize().y >= LeftPaddle->GetPosition().y &&
  66.         sprite.GetPosition().y <= LeftPaddle->GetPosition().y + LeftPaddle->GetSize().y)
  67.     {
  68.         sBouncePaddle.Play();
  69.         angle = PI - angle;
  70.         sprite.SetX(LeftPaddle->GetPosition().x + LeftPaddle->GetSize().x + 0.1f);
  71.     }
  72.     // Right Paddle
  73.     if (sprite.GetPosition().x + sprite.GetSize().x > RightPaddle->GetPosition().x &&
  74.         sprite.GetPosition().x + sprite.GetSize().x < RightPaddle->GetPosition().x + (RightPaddle->GetSize().x / 2.0f) &&
  75.         sprite.GetPosition().y + sprite.GetSize().y >= RightPaddle->GetPosition().y &&
  76.         sprite.GetPosition().y <= RightPaddle->GetPosition().y + RightPaddle->GetSize().y)
  77.     {
  78.         sBouncePaddle.Play();
  79.         angle = PI - angle;
  80.         sprite.SetX(RightPaddle->GetPosition().x - sprite.GetSize().x - 0.1f);
  81.     }
  82.  
  83.     return true;
  84. }
  85.  
  86. Sprite Ball::getSprite()
  87. {
  88.     return this->sprite;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment