diff --git a/Shared/Behaviours/PongManagerBehaviour.cs b/Shared/Behaviours/PongManagerBehaviour.cs index fc79366..06e7d31 100644 --- a/Shared/Behaviours/PongManagerBehaviour.cs +++ b/Shared/Behaviours/PongManagerBehaviour.cs @@ -8,18 +8,13 @@ using Syntriax.Engine.Systems.Input; namespace Pong.Behaviours; -public class PongManagerBehaviour : Behaviour, - IPacketListenerServer, - IPacketListenerServer, - IPacketListenerClient, - IPacketListenerClient, - IPacketListenerClient +public class PongManagerBehaviour : Behaviour { public Action? OnReset { get; set; } = null; public Action? OnFinished { get; set; } = null; public Action? OnScored { get; set; } = null; - private readonly Random random = new(); + private Random random = new(); private BallBehaviour ball = null!; private INetworkCommunicatorClient? networkClient = null!; @@ -37,7 +32,7 @@ public class PongManagerBehaviour : Behaviour, protected override void OnFirstActiveFrame() { IButtonInputs buttonInputs = Universe.FindRequired>(); - buttonInputs.RegisterOnRelease(Keys.Space, (_, _1) => networkClient?.SendToServer(new PongResetPacket())); + buttonInputs.RegisterOnRelease(Keys.Space, (_, _1) => Reset()); ball = Universe.FindRequiredBehaviour(); networkClient = Universe.Find(); @@ -46,22 +41,16 @@ public class PongManagerBehaviour : Behaviour, public void ScoreToLeft() { - if (networkServer is not null) - { - ScoreLeft++; - OnScored?.InvokeSafe(this); - } + ScoreLeft++; + OnScored?.InvokeSafe(this); CheckFinish(); } public void ScoreToRight() { - if (networkServer is not null) - { - ScoreRight++; - OnScored?.InvokeSafe(this); - } + ScoreRight++; + OnScored?.InvokeSafe(this); CheckFinish(); } @@ -69,6 +58,10 @@ public class PongManagerBehaviour : Behaviour, public void Reset() { ScoreLeft = ScoreRight = 0; + + ball.ResetBall(); + ball.LaunchBall(GetBallLaunchDirection()); + OnReset?.InvokeSafe(this); } @@ -77,11 +70,14 @@ public class PongManagerBehaviour : Behaviour, int halfwayScore = (int)(WinScore * .5f); ball.ResetBall(); - networkServer?.SendToClient("*", new PongScoreUpdatePacket(this)); if (ScoreLeft > halfwayScore || ScoreRight > halfwayScore) + { OnFinished?.InvokeSafe(this); - else - networkServer?.SendToClient("*", new PongStartPacket() { BallVelocity = GetBallLaunchDirection() }); + return; + } + + ball.ResetBall(); + ball.LaunchBall(GetBallLaunchDirection()); } private Vector2D GetBallLaunchDirection() @@ -91,49 +87,4 @@ public class PongManagerBehaviour : Behaviour, bool isBackwards = (random.Next() % 2) == 1; return Vector2D.Right.Rotate(isBackwards ? rotation + Syntriax.Engine.Core.Math.PI : rotation); } - - public void OnClientPacketArrived(PongStartPacket packet) => ball.LaunchBall(packet.BallVelocity); - public void OnClientPacketArrived(PongResetPacket packet) => Reset(); - public void OnClientPacketArrived(PongScoreUpdatePacket packet) - { - ScoreLeft = packet.Left; - ScoreRight = packet.Right; - OnScored?.InvokeSafe(this); - } - - public void OnServerPacketArrived(PongResetPacket packet, string from) - { - Reset(); - Vector2D ballVelocity = GetBallLaunchDirection(); - ball.LaunchBall(ballVelocity); - networkServer?.SendToClient("*", new PongResetPacket()); - networkServer?.SendToClient("*", new PongStartPacket() { BallVelocity = ballVelocity }); - } - - public void OnServerPacketArrived(PongStartPacket packet, string from) - { - packet = new() { BallVelocity = GetBallLaunchDirection() }; - ball.LaunchBall(packet.BallVelocity); - networkServer?.SendToClient("*", packet); - } - - public class PongStartPacket : INetworkPacket - { - public Vector2D BallVelocity { get; set; } = Vector2D.Zero; - } - - public class PongResetPacket : INetworkPacket; - - public class PongScoreUpdatePacket : INetworkPacket - { - public int Left { get; set; } = 0; - public int Right { get; set; } = 0; - - public PongScoreUpdatePacket() { } - public PongScoreUpdatePacket(PongManagerBehaviour pongManagerBehaviour) - { - Left = pongManagerBehaviour.ScoreLeft; - Right = pongManagerBehaviour.ScoreRight; - } - } }