I have run into a problem that I am unable to resolve while writing a small DirectX 9 game involving the Collision handling portion of the game.
I have 1 ball that I can control, and 2 balls that bounce around the screen. I want them to also bounce off each other and the one I control without moving it.
This is my code so far:
void Game::Update(float dt)
{
float centeraX;
float centeraY;
float centerbX;
float centerbY;
double overX;
double overY;
//Retrieve the keyboard array
ZeroMemory(m_keys, sizeof(m_keys));
for(int a = 0; a < MAX_SPRITES; a++)
{
switch(a)
{
/****************************************************/
/* Update the main sprite */
/****************************************************/
case MAIN_SPRITE:
//Check the keyboard and see if any keys are pressed
switch(m_pInput->GetDeviceState(sizeof(m_keys), m_keys))
{
//If both the up and left keys are pressed
case UPLEFTDIRECTION:
m_Sprites[a].m_MoveY = -2;
m_Sprites[a].m_MoveX = -2;
m_Sprites[a].m_IsMoving = true;
break;
//If both the up and right keys are pressed
case UPRIGHTDIRECTION:
m_Sprites[a].m_MoveY = -2;
m_Sprites[a].m_MoveX = 2;
m_Sprites[a].m_IsMoving = true;
break;
//If both the down and left keys are pressed
case DOWNLEFTDIRECTION:
m_Sprites[a].m_MoveY = 2;
m_Sprites[a].m_MoveX = -2;
m_Sprites[a].m_IsMoving = true;
break;
//If both the down and right keys are pressed
case DOWNRIGHTDIRECTION:
m_Sprites[a].m_MoveY = 2;
m_Sprites[a].m_MoveX = 2;
m_Sprites[a].m_IsMoving = true;
break;
//If the up key is pressed
case UPDIRECTION:
m_Sprites[a].m_MoveY = -2;
m_Sprites[a].m_IsMoving = true;
break;
//If the down key is pressed
case DOWNDIRECTION:
m_Sprites[a].m_MoveY = 2;
m_Sprites[a].m_IsMoving = true;
break;
//If the left key is pressed
case LEFTDIRECTION:
m_Sprites[a].m_MoveX = -2;
m_Sprites[a].m_IsMoving = true;
break;
//If the right key is pressed
case RIGHTDIRECTION:
m_Sprites[a].m_MoveX = 2;
m_Sprites[a].m_IsMoving = true;
break;
default:
m_Sprites[a].m_MoveX = 0;
m_Sprites[a].m_MoveY = 0;
m_Sprites[a].m_IsMoving = false;
break;
}
/******************************************/
/* Collision Detection */
/******************************************/
if(m_Sprites[a].OnScreen() == TOP)
{
m_Sprites[a].m_Pos.y = 0;
m_Sprites[a].m_MoveY = 0;
}
if(m_Sprites[a].OnScreen() == BOTTOM)
{
m_Sprites[a].m_Pos.y = m_pGraphics->GetScreenHeight() - m_Sprites[a].m_Height;
m_Sprites[a].m_MoveY = 0;
}
if(m_Sprites[a].OnScreen() == LEFT)
{
m_Sprites[a].m_Pos.x = 0;
m_Sprites[a].m_MoveX = 0;
}
if(m_Sprites[a].OnScreen() == RIGHT)
{
m_Sprites[a].m_Pos.x = m_pGraphics->GetScreenWidth() - m_Sprites[a].m_Width;
m_Sprites[a].m_MoveX = 0;
}
for(int b = 0; b < MAX_SPRITES; b++)
{
if(m_Sprites[a].m_Occupied && a != b && !m_Sprites[a].m_CollisionStatus)
{
switch(m_Sprites[a].GetCollisionStatus(&m_Sprites[b]))
{
case TOPLEFT:
overX = m_Sprites[a].m_Bounding.right - m_Sprites[b].m_Bounding.left;
overY = m_Sprites[a].m_Bounding.bottom - m_Sprites[b].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" TOPLEFT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_MoveY = 0;
m_Sprites[a].m_MoveX = 0;
m_Sprites[b].m_Pos.y += overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[b].m_Pos.x += overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug.close();
}
break;
case TOPRIGHT:
overX = m_Sprites[b].m_Bounding.right - m_Sprites[a].m_Bounding.left;
overY = m_Sprites[a].m_Bounding.bottom - m_Sprites[b].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" TOPRIGHT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_MoveY = 0;
m_Sprites[a].m_MoveX = 0;
m_Sprites[b].m_Pos.y -= overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[b].m_Pos.x += overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
}
g_debug.close();
break;
case BOTTOMLEFT:
overX = m_Sprites[a].m_Bounding.right - m_Sprites[b].m_Bounding.left;
overY = m_Sprites[b].m_Bounding.bottom - m_Sprites[a].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" BOTTOMLEFT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_MoveY = 0;
m_Sprites[a].m_MoveX = 0;
m_Sprites[b].m_Pos.y += overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[b].m_Pos.x -= overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug.close();
}
break;
case BOTTOMRIGHT:
overX = m_Sprites[b].m_Bounding.right - m_Sprites[a].m_Bounding.left;
overY = m_Sprites[b].m_Bounding.bottom - m_Sprites[a].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" BOTTOMRIGHT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_MoveY = 0;
m_Sprites[a].m_MoveX = 0;
m_Sprites[b].m_Pos.y -= overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[b].m_Pos.x -= overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug.close();
}
break;
}
}
}
/*********************************************************/
/* Update the Sprite's Position */
/*********************************************************/
m_Sprites[a].UpdateSpritePos(m_Rate);
break;
//Update GreenBall1
case GREEN_BALL1:
if(m_Sprites[a].OnScreen() == TOP)
{
m_Sprites[a].m_Pos.y = 0;
m_Sprites[a].m_MoveY *= -1;
}
if(m_Sprites[a].OnScreen() == BOTTOM)
{
m_Sprites[a].m_Pos.y = m_pGraphics->GetScreenHeight() - m_Sprites[a].m_Height;
m_Sprites[a].m_MoveY *= -1;
}
if(m_Sprites[a].OnScreen() == LEFT)
{
m_Sprites[a].m_Pos.x = 0;
m_Sprites[a].m_MoveX *= -1;
}
if(m_Sprites[a].OnScreen() == RIGHT)
{
m_Sprites[a].m_Pos.x = m_pGraphics->GetScreenWidth() - m_Sprites[a].m_Width;
m_Sprites[a].m_MoveX *= -1;
}
for(int b = 0; b < MAX_SPRITES; b++)
{
if(m_Sprites[a].m_Occupied && a != b && !m_Sprites[a].m_CollisionStatus)
{
switch(m_Sprites[a].GetCollisionStatus(&m_Sprites[b]))
{
case TOPLEFT:
overX = m_Sprites[a].m_Bounding.right - m_Sprites[b].m_Bounding.left;
overY = m_Sprites[a].m_Bounding.bottom - m_Sprites[b].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" TOPLEFT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_Pos.y -= overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[a].m_Pos.x -= overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[a].m_MoveY *= -1;
m_Sprites[a].m_MoveX *= -1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[a].UpdateSpritePos(m_Rate);
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<g_CollisionCount<<" After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug.close();
}
break;
case TOPRIGHT:
overX = m_Sprites[b].m_Bounding.right - m_Sprites[a].m_Bounding.left;
overY = m_Sprites[a].m_Bounding.bottom - m_Sprites[b].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" TOPRIGHT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_Pos.y += overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[a].m_Pos.x -= overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[a].m_MoveY *= -1;
m_Sprites[a].m_MoveX *= -1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[a].UpdateSpritePos(m_Rate);
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug.close();
}
break;
case BOTTOMLEFT:
overX = m_Sprites[a].m_Bounding.right - m_Sprites[b].m_Bounding.left;
overY = m_Sprites[b].m_Bounding.bottom - m_Sprites[a].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" BOTTOMLEFT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_Pos.y -= overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[a].m_Pos.x += overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[a].m_MoveY *= -1;
m_Sprites[a].m_MoveX *= -1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[a].UpdateSpritePos(m_Rate);
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
}
g_debug.close();
break;
case BOTTOMRIGHT:
overX = m_Sprites[b].m_Bounding.right - m_Sprites[a].m_Bounding.left;
overY = m_Sprites[b].m_Bounding.bottom - m_Sprites[a].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" BOTTOMRIGHT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_Pos.y += overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[a].m_Pos.x += overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[a].m_MoveY *= -1;
m_Sprites[a].m_MoveX *= -1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[a].UpdateSpritePos(m_Rate);
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
}
g_debug.close();
break;
}
}
}
if(!m_Sprites[a].m_CollisionStatus)
{
m_Sprites[a].UpdateSpritePos(m_Rate);
}
else
{
m_Sprites[a].m_CollisionStatus = false;
}
break;
//Update GreenBall2
case GREEN_BALL2:
if(m_Sprites[a].OnScreen() == TOP)
{
m_Sprites[a].m_Pos.y = 0;
m_Sprites[a].m_MoveY *= -1;
}
if(m_Sprites[a].OnScreen() == BOTTOM)
{
m_Sprites[a].m_Pos.y = m_pGraphics->GetScreenHeight() - m_Sprites[a].m_Height;
m_Sprites[a].m_MoveY *= -1;
}
if(m_Sprites[a].OnScreen() == LEFT)
{
m_Sprites[a].m_Pos.x = 0;
m_Sprites[a].m_MoveX *= -1;
}
if(m_Sprites[a].OnScreen() == RIGHT)
{
m_Sprites[a].m_Pos.x = m_pGraphics->GetScreenWidth() - m_Sprites[a].m_Width;
m_Sprites[a].m_MoveX *= -1;
}
for(int b = 0; b < MAX_SPRITES; b++)
{
if(m_Sprites[a].m_Occupied && a != b && !m_Sprites[a].m_CollisionStatus)
{
switch(m_Sprites[a].GetCollisionStatus(&m_Sprites[b]))
{
case TOPLEFT:
overX = m_Sprites[a].m_Bounding.right - m_Sprites[b].m_Bounding.left;
overY = m_Sprites[a].m_Bounding.bottom - m_Sprites[b].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" TOPLEFT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_Pos.y -= overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[a].m_Pos.x -= overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[a].m_MoveY *= -1;
m_Sprites[a].m_MoveX *= -1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[a].UpdateSpritePos(m_Rate);
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug.close();
}
break;
case TOPRIGHT:
overX = m_Sprites[b].m_Bounding.right - m_Sprites[a].m_Bounding.left;
overY = m_Sprites[a].m_Bounding.bottom - m_Sprites[b].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" TOPRIGHT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_Pos.y += overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[a].m_Pos.x -= overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[a].m_MoveY *= -1;
m_Sprites[a].m_MoveX *= -1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[a].UpdateSpritePos(m_Rate);
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
}
g_debug.close();
break;
case BOTTOMLEFT:
overX = m_Sprites[a].m_Bounding.right - m_Sprites[b].m_Bounding.left;
overY = m_Sprites[b].m_Bounding.bottom - m_Sprites[a].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" BOTTOMLEFT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_Pos.y -= overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[a].m_Pos.x += overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[a].m_MoveY *= -1;
m_Sprites[a].m_MoveX *= -1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[a].UpdateSpritePos(m_Rate);
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"After Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
}
g_debug.close();
break;
case BOTTOMRIGHT:
overX = m_Sprites[b].m_Bounding.right - m_Sprites[a].m_Bounding.left;
overY = m_Sprites[b].m_Bounding.bottom - m_Sprites[a].m_Bounding.top;
g_CollisionCount++;
if(m_debug)
{
g_debug.open("debug.txt", std::ofstream::app);
g_debug<<g_CollisionCount<<" BOTTOMRIGHT\n\n";
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug<<"OverX = "<<overX<<"\n";
g_debug<<"OverY = "<<overY<<"\n\n";
}
m_Sprites[a].m_Pos.y += overY + m_Sprites[a].m_BoundingOffsetH + 1;
m_Sprites[a].m_Pos.x += overX + m_Sprites[a].m_BoundingOffsetW + 1;
m_Sprites[a].m_MoveY *= -1;
m_Sprites[a].m_MoveX *= -1;
m_Sprites[b].m_MoveY *= -1;
m_Sprites[b].m_MoveX *= -1;
m_Sprites[a].UpdateSpritePos(m_Rate);
m_Sprites[b].UpdateSpritePos(m_Rate);
m_Sprites[b].m_CollisionStatus = true;
if(m_debug)
{
g_debug<<"Before Collision:\n\n";
g_debug<<"Ax = "<<m_Sprites[a].m_Pos.x<<"\n";
g_debug<<"Ay = "<<m_Sprites[a].m_Pos.y<<"\n";
g_debug<<"Atop = "<<m_Sprites[a].m_Bounding.top<<"\n";
g_debug<<"Aleft = "<<m_Sprites[a].m_Bounding.left<<"\n";
g_debug<<"Abottom = "<<m_Sprites[a].m_Bounding.bottom<<"\n";
g_debug<<"Aright = "<<m_Sprites[a].m_Bounding.right<<"\n\n";
g_debug<<"Bx = "<<m_Sprites[b].m_Pos.x<<"\n";
g_debug<<"By = "<<m_Sprites[b].m_Pos.y<<"\n";
g_debug<<"Btop = "<<m_Sprites[b].m_Bounding.top<<"\n";
g_debug<<"Bleft = "<<m_Sprites[b].m_Bounding.left<<"\n";
g_debug<<"Bbottom = "<<m_Sprites[b].m_Bounding.bottom<<"\n";
g_debug<<"Bright = "<<m_Sprites[b].m_Bounding.right<<"\n\n";
g_debug.close();
}
break;
}
}
}
if(!m_Sprites[a].m_CollisionStatus)
{
m_Sprites[a].UpdateSpritePos(m_Rate);
}
else
{
m_Sprites[a].m_CollisionStatus = false;
}
break;
}
}
}
int Sprite::GetCollisionStatus(Sprite* sprite)
{
int collisionstatus = NULL;
RECT a;
RECT b;
a.top = m_Bounding.top;
a.bottom = m_Bounding.bottom;
a.left = m_Bounding.left;
a.right = m_Bounding.right;
b.top = sprite->m_Bounding.top;
b.bottom = sprite->m_Bounding.bottom;
b.left = sprite->m_Bounding.left;
b.right = sprite->m_Bounding.right;
if(m_Index != sprite->m_Index)
{
if(a.bottom < b.top || a.top > b.bottom || a.right < b. left || a.left > b.right)
{
collisionstatus = NOCOLLISION;
}
else
{
//If A's top is less than B's top then A is overlapping B's top
if(a.top < b.top)
{
collisionstatus += TOP;
}
//If A's top is greater than B's top then A is overlapping B's bottom
if(a.top > b.top)
{
collisionstatus += BOTTOM;
}
//If A's left is less than B's left then A is overlapping B's left
if( a.left < b.left)
{
collisionstatus += LEFT;
}
//If A's left is greater than B's left then A is overlapping B's right
if( a.left > b.left)
{
collisionstatus += RIGHT;
}
}
}
return collisionstatus;
}
void Sprite::UpdateSpritePos(float dt)
{
m_AnimRate = dt;
m_Pos.x += m_MoveX * m_AnimRate;
m_Pos.y += m_MoveY * m_AnimRate;
m_Bounding.top = m_Pos.y + m_BoundingOffsetH;
m_Bounding.left = m_Pos.x + m_BoundingOffsetW;
m_Bounding.bottom = m_Pos.y + m_OffsetHeight;
m_Bounding.right = m_Pos.x + m_OffsetWidth;
}
The balls are not behaving as they should because multiple collisions are occuring when they touch and I don't know why. I have exhaustively looked through my code and algorithms, and looked through online collision detection resources and I can not figure out what I am doing wrong. Please Help if you can.