Esempio n. 1
0
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;
}