diff --git a/PongGame/Hubs/PongGameState.cs b/PongGame/Hubs/PongGameState.cs index a389240..a8903e3 100644 --- a/PongGame/Hubs/PongGameState.cs +++ b/PongGame/Hubs/PongGameState.cs @@ -79,9 +79,15 @@ public struct PongGameState { state.Pos.X += BALL_SPEED * dx; state.Pos.Y -= BALL_SPEED * dy; - if (state.Pos.Y < BALL_RADIUS - || state.Pos.Y > HEIGHT - BALL_RADIUS) + // If reflected from lower or upper border calculate continuous reflection + // This prevents the ball from temporarily glitching into paddles + if (state.Pos.Y < BALL_RADIUS) { + state.Pos.Y = 2 * BALL_RADIUS - state.Pos.Y; state.BallAngle = 2 * MathF.PI - state.BallAngle; + } else if (state.Pos.Y > HEIGHT - BALL_RADIUS) { + state.Pos.Y = 2 * (HEIGHT - BALL_RADIUS) - state.Pos.Y; + state.BallAngle = 2 * MathF.PI - state.BallAngle; + } } public RectangleF GetCollider() => new(Pos.X - BALL_RADIUS, Pos.Y - BALL_RADIUS, 2 * BALL_RADIUS, 2 * BALL_RADIUS);