void BattleStage::ProcessProjectileCollisions( Projectile* Source, Vector2* TargetPosition, bool* Continue ) { Vector2* angV = Source->Direction->ToVector(); bool collisionFound = false; if( TargetPosition->X - MAIN_POS_X < Source->Radius ) { TargetPosition->X = Maths::Abs(TargetPosition->X - MAIN_POS_X - Source->Radius) + Source->Radius + MAIN_POS_X; angV->X *= -1; collisionFound = true; Source->OnCollisionPlayersWall( LeftPlayer ); } if( TargetPosition->X > MAIN_POS_X + MAIN_WIDTH - Source->Radius ) { TargetPosition->X = (MAIN_POS_X + MAIN_WIDTH - Source->Radius) - (TargetPosition->X - (MAIN_POS_X + MAIN_WIDTH - Source->Radius)); angV->X *= -1; collisionFound = true; Source->OnCollisionPlayersWall( RightPlayer ); } if( TargetPosition->Y - MAIN_POS_Y < Source->Radius ) { TargetPosition->Y = Maths::Abs(TargetPosition->Y - MAIN_POS_Y - Source->Radius) + Source->Radius + MAIN_POS_Y; angV->Y *= -1; collisionFound = true; } if( TargetPosition->Y > MAIN_POS_Y + MAIN_HEIGHT - Source->Radius ) { TargetPosition->Y = (MAIN_POS_Y + MAIN_HEIGHT - Source->Radius) - (TargetPosition->Y - (MAIN_POS_Y + MAIN_HEIGHT - Source->Radius)); angV->Y *= -1; collisionFound = true; } Box* ballBounds = new Box( TargetPosition->X - Source->Radius, TargetPosition->Y - Source->Radius, Source->Radius * 2, Source->Radius * 2 ); if( angV->X < 0 ) { Box* leftPlyBounds = new Box( LeftPlayer->Position->X - (LeftPlayer->Width / 2), LeftPlayer->Position->Y - (LeftPlayer->Size / 2), LeftPlayer->Width, LeftPlayer->Size ); if( leftPlyBounds->Collides( ballBounds ) ) { angV->X *= -1; collisionFound = true; Source->OnCollision( LeftPlayer ); } delete leftPlyBounds; } if( angV->X > 0 ) { Box* rightPlyBounds = new Box( RightPlayer->Position->X - (RightPlayer->Width / 2), RightPlayer->Position->Y - (RightPlayer->Size / 2), RightPlayer->Width, RightPlayer->Size ); if( rightPlyBounds->Collides( ballBounds ) ) { angV->X *= -1; collisionFound = true; Source->OnCollision( RightPlayer ); } delete rightPlyBounds; } delete ballBounds; if( collisionFound ) { delete Source->Direction; Source->Direction = angV->ToAngle(); } delete angV; }