private void CheckCollision(float deltaTime) { Vector2 nextPosition = Position + (Direction * Speed * deltaTime); if (nextPosition.X >= MaxX || nextPosition.X <= MinX) { Direction.X *= -1f; } APlayer player = (APlayer)ActorManager.CheckCollision(this); if (player != null) { Direction.Y *= -1f; if (VerticalLocation == VerticalLocation.Bottom) { //Move outside Collision Boundary Position.Y = player.CollisionBoundaryY - 1; } else if (VerticalLocation == VerticalLocation.Top) { //Move outside Collision Boundary Position.Y = player.CollisionBoundaryY + 1; } } if (nextPosition.Y >= _graphics.PreferredBackBufferHeight) { StateManager.GoalP2(); Reset(); } else if (nextPosition.Y <= 0) { StateManager.GoalP1(); Reset(); } }
private static APlayer AABBCollision(ABall ball, APlayer player) { Rectangle rect1 = ball.DestinationRect; Rectangle rect2 = player.DestinationRect; return(( rect1.X < rect2.X + rect2.Width && rect1.X + rect1.Width > rect2.X && rect1.Y < rect2.Y + rect2.Height && rect1.Height + rect1.Y > rect2.Y ) ? player : null); }