diff --git a/Game/Behaviours/MovementBallBehaviour.cs b/Game/Behaviours/MovementBallBehaviour.cs index cbcc415..e7b6625 100644 --- a/Game/Behaviours/MovementBallBehaviour.cs +++ b/Game/Behaviours/MovementBallBehaviour.cs @@ -9,6 +9,7 @@ public class MovementBallBehaviour : BehaviourOverride { public Vector2D StartDirection { get; private set; } = Vector2D.Zero; public float Speed { get; set; } = 500f; + public float SpeedUpMultiplier { get; set; } = .0125f; private IRigidBody2D rigidBody = null!; @@ -32,6 +33,15 @@ public class MovementBallBehaviour : BehaviourOverride rigidBody = foundRigidBody; } + protected override void OnUpdate() + { + if (rigidBody.Velocity.MagnitudeSquared <= 0.01f) + return; + + Vector2D speedUp = rigidBody.Velocity.Normalized * (float)Time.Elapsed.TotalMilliseconds; + rigidBody.Velocity += speedUp * SpeedUpMultiplier; + } + private void OnCollisionDetected(ICollider2D collider2D, CollisionDetectionInformation information) { rigidBody.Velocity = rigidBody.Velocity.Reflect(information.Normal); diff --git a/Game/Behaviours/PongScoreboard.cs b/Game/Behaviours/PongScoreboard.cs index 58cc316..16e7893 100644 --- a/Game/Behaviours/PongScoreboard.cs +++ b/Game/Behaviours/PongScoreboard.cs @@ -39,7 +39,9 @@ public class PongScoreboard(int WinScore) : BehaviourOverride private void CheckFinish() { - if (ScoreSum == WinScore) + int halfwayScore = (int)(WinScore * .5f); + + if (ScoreLeft > halfwayScore || ScoreRight > halfwayScore) OnFinished?.Invoke(); } } diff --git a/Game/Game1.cs b/Game/Game1.cs index a34a4c9..63031a0 100644 --- a/Game/Game1.cs +++ b/Game/Game1.cs @@ -169,6 +169,7 @@ public class Game1 : Game pongScoreboard.OnScored += () => { gameObjectBall.Transform.Position = Vector2D.Zero; + rigidBodyBall.Velocity = rigidBodyBall.Velocity.Normalized * movementBallBehaviour.Speed; textBehaviourLeft.Text = pongScoreboard.ScoreLeft.ToString(); textBehaviourRight.Text = pongScoreboard.ScoreRight.ToString(); }; @@ -182,7 +183,7 @@ public class Game1 : Game { gameObjectBall.StateEnable.Enabled = true; rigidBodyBall.BehaviourController.GameObject.Transform.Position = Vector2D.Zero; - rigidBodyBall.Velocity = Vector2D.One * movementBallBehaviour.Speed; + rigidBodyBall.Velocity = Vector2D.One.Normalized * movementBallBehaviour.Speed; textBehaviourLeft.Text = pongScoreboard.ScoreLeft.ToString(); textBehaviourRight.Text = pongScoreboard.ScoreRight.ToString(); };