Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Ball.h"
- #include <SFML/Graphics.hpp>
- #include <SFML/Audio.hpp>
- using namespace sf;
- Ball::Ball(sf::RenderWindow *App)
- {
- this->App = App;
- const float PI = 3.14159f;
- speed = 400.f;
- SoundBuffer BounceWallBuffer;
- BounceWallBuffer.LoadFromFile("datas/pong/ballwall.wav");
- sBounceWall.SetBuffer(BounceWallBuffer);
- SoundBuffer BouncePaddleBuffer;
- BouncePaddleBuffer.LoadFromFile("datas/pong/ballpaddle.wav");
- sBouncePaddle.SetBuffer(BouncePaddleBuffer);
- Image BallImage;
- BallImage.LoadFromFile("datas/pong/ball.png");
- sprite.SetImage(BallImage);
- sprite.Move((App->GetView().GetRect().GetWidth() - sprite.GetSize().x) / 2, (App->GetView().GetRect().GetHeight() - sprite.GetSize().y) / 2);
- do
- {
- angle = Randomizer::Random(0.f, 2 * PI);
- }
- while (abs(cos(angle)) < 0.7f);
- }
- bool Ball::refresh(Sprite *LeftPaddle, Sprite *RightPaddle)
- {
- const float PI = 3.14159f;
- float Factor = speed * App->GetFrameTime();
- sprite.Move(cos(angle) * Factor, sin(angle) * Factor);
- if (sprite.GetPosition().x < 0.f)
- {
- return false; //IsPlaying = false;
- }
- if (sprite.GetPosition().x + sprite.GetSize().x > App->GetView().GetRect().GetWidth())
- {
- return false; //IsPlaying = false;
- }
- if (sprite.GetPosition().y < 0.f)
- {
- sBounceWall.Play();
- angle = -angle;
- sprite.SetY(0.1f);
- }
- if (sprite.GetPosition().y + sprite.GetSize().y > App->GetView().GetRect().GetHeight())
- {
- sBounceWall.Play();
- angle = -angle;
- sprite.SetY(App->GetView().GetRect().GetHeight() - sprite.GetSize().y - 0.1f);
- }
- if (sprite.GetPosition().x < LeftPaddle->GetPosition().x + LeftPaddle->GetSize().x &&
- sprite.GetPosition().x > LeftPaddle->GetPosition().x + (LeftPaddle->GetSize().x / 2.0f) &&
- sprite.GetPosition().y + sprite.GetSize().y >= LeftPaddle->GetPosition().y &&
- sprite.GetPosition().y <= LeftPaddle->GetPosition().y + LeftPaddle->GetSize().y)
- {
- sBouncePaddle.Play();
- angle = PI - angle;
- sprite.SetX(LeftPaddle->GetPosition().x + LeftPaddle->GetSize().x + 0.1f);
- }
- // Right Paddle
- if (sprite.GetPosition().x + sprite.GetSize().x > RightPaddle->GetPosition().x &&
- sprite.GetPosition().x + sprite.GetSize().x < RightPaddle->GetPosition().x + (RightPaddle->GetSize().x / 2.0f) &&
- sprite.GetPosition().y + sprite.GetSize().y >= RightPaddle->GetPosition().y &&
- sprite.GetPosition().y <= RightPaddle->GetPosition().y + RightPaddle->GetSize().y)
- {
- sBouncePaddle.Play();
- angle = PI - angle;
- sprite.SetX(RightPaddle->GetPosition().x - sprite.GetSize().x - 0.1f);
- }
- return true;
- }
- Sprite Ball::getSprite()
- {
- return this->sprite;
- }
Advertisement
Add Comment
Please, Sign In to add comment