145 lines
3.0 KiB
Plaintext
145 lines
3.0 KiB
Plaintext
#include "cCourt.hpp"
|
|
|
|
using Equipment::cCourt;
|
|
using Equipment::cBall;
|
|
using Equipment::cPaddle;
|
|
|
|
using MathEngine::cCollision;
|
|
using MathEngine::Vector4;
|
|
using MathEngine::Vector2;
|
|
|
|
cCourt::cCourt( cBall* ball /*= nullptr*/, cPaddle* player1 /*= nullptr*/, cPaddle* player2 /*= nullptr*/, VideoEngine::cImage** image /*= nullptr*/ )
|
|
: cSprite( 0, 0, 0, 0, 640, 480, image), mp_ball(ball), m_pause(false)
|
|
{
|
|
m_topWall.x = 0.0f;
|
|
m_topWall.y = 0.0f;
|
|
m_topWall.z = 640.0f;
|
|
m_topWall.w = 14.0f;
|
|
|
|
m_bottomWall.x = 0.0f;
|
|
m_bottomWall.y = 464.0f;
|
|
m_bottomWall.z = 640.0f;
|
|
m_bottomWall.w = 14.0f;
|
|
|
|
m_leftOff.x = 0.0f;
|
|
m_leftOff.y = 0.0f;
|
|
m_leftOff.z = 480.0f;
|
|
m_leftOff.w = 1.0f;
|
|
|
|
m_rightOff.x = 640.0f;
|
|
m_rightOff.y = 0.0f;
|
|
m_rightOff.z = 480.0f;
|
|
m_rightOff.w = 1.0f;
|
|
|
|
m_court.x = 0.0f;
|
|
m_court.y = 15.0f;
|
|
m_court.z = 640.0f;
|
|
m_court.w = 450.0f;
|
|
|
|
mp_player[0] = player1;
|
|
mp_player[1] = player2;
|
|
|
|
setImageArea();
|
|
}
|
|
|
|
cCourt::~cCourt()
|
|
{}
|
|
|
|
///Functions
|
|
void cCourt::CheckCollision()
|
|
{
|
|
if (m_pause == false)
|
|
{
|
|
CheckPaddles();
|
|
CheckWalls();
|
|
CheckOffCourt();
|
|
}
|
|
}
|
|
|
|
void cCourt::Quit()
|
|
{
|
|
}
|
|
|
|
const bool cCourt::isPause() const
|
|
{
|
|
return m_pause;
|
|
}
|
|
|
|
void cCourt::Pause()
|
|
{
|
|
m_pause = !m_pause;
|
|
|
|
mp_ball->Pause();
|
|
mp_player[0]->Pause();
|
|
mp_player[1]->Pause();
|
|
}
|
|
|
|
//private:
|
|
//Checks to see if the ball has hit a paddles and then if the paddles have hit a wall.
|
|
void cCourt::CheckPaddles()
|
|
{
|
|
for (int count = 0; count <= 1; ++count)
|
|
{
|
|
//Check to see if the ball hit the Paddles.
|
|
if (cCollision::BoundingBox(mp_player[count]->getPosition(), mp_ball->getPosition()) == true)
|
|
mp_ball->BounceX();
|
|
|
|
//Check to see if the Paddles hit the top wall.
|
|
if (cCollision::BoundingBox(mp_player[count]->getPosition(), m_topWall) == true)
|
|
mp_player[count]->setPosY((long)m_topWall.w + 1);
|
|
|
|
//Check to see if the Paddles hit the bottom wall.
|
|
if (cCollision::BoundingBox(mp_player[count]->getPosition(), m_bottomWall) == true)
|
|
mp_player[count]->setPosY((long)m_bottomWall.y - 1);
|
|
}
|
|
}
|
|
|
|
//Cheaks to see if the ball has hit the provide wall.
|
|
void cCourt::CheckWall(const Vector4& wall)
|
|
{
|
|
if (cCollision::BoundingBox(mp_ball->getPosition(), wall) == true)
|
|
mp_ball->BounceY();
|
|
}
|
|
|
|
//Cheaks to see if the ball has hit the wall.
|
|
void cCourt::CheckWalls()
|
|
{
|
|
CheckWall(m_topWall);
|
|
CheckWall(m_bottomWall);
|
|
}
|
|
|
|
//Checks to see if the ball is off the provide side of the court.
|
|
const bool cCourt::CheckOffCourt(const Vector4& offside)
|
|
{
|
|
bool rtn = false;
|
|
|
|
if (cCollision::BoundingBox(mp_ball->getPosition(), offside) == true)
|
|
{
|
|
mp_ball->setSpeed(0,0);
|
|
rtn = true;
|
|
}
|
|
|
|
return rtn;
|
|
}
|
|
|
|
//Checks to see if the ball is off the court
|
|
void cCourt::CheckOffCourt()
|
|
{
|
|
MathEngine::Vector2 mov = cCollision::Inside(m_court, mp_ball->getPosition());
|
|
|
|
if (mov.x != 0.0f)
|
|
{
|
|
// if (mov.x > 0.0f);
|
|
// //point to player 1
|
|
// if (mov.x < 0.0f);
|
|
// //point to player 2
|
|
}
|
|
|
|
if (mov.y != 0.0f)
|
|
mp_ball->AddPosY((long)mov.y);
|
|
|
|
//if (CheckOffCourt(m_leftOff) == true)
|
|
// ;
|
|
//if (CheckOffCourt(m_rightOff) == true)
|
|
// ;
|
|
} |