diff --git a/Engine b/Engine index 37aca44..03232f7 160000 --- a/Engine +++ b/Engine @@ -1 +1 @@ -Subproject commit 37aca44e45923511500ee1e6a8f39a30810b7f63 +Subproject commit 03232f72e8f045fa3b5731a2b3839425f8ea9721 diff --git a/Shared/Behaviours/PongManager.cs b/Shared/Behaviours/PongManager.cs index 23f5062..f5c58f1 100644 --- a/Shared/Behaviours/PongManager.cs +++ b/Shared/Behaviours/PongManager.cs @@ -11,6 +11,7 @@ using Syntriax.Engine.Network; namespace Pong.Behaviours; public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent, + IPacketListenerClient, IPacketListenerClient { public Action? OnReset { get; set; } = null; @@ -21,6 +22,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo private INetworkCommunicatorServer? networkServer = null; private ILogger? logger = null; + private SoundEffectInstance? scoreSoundEffect = null; private SoundEffectInstance? gameEndSoundEffect = null; public int ScoreLeft { get; private set; } = 0; @@ -44,21 +46,18 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo public void LoadContent(ContentManager content) { gameEndSoundEffect = content.Load("Audio/Win").CreateInstance(); + scoreSoundEffect = content.Load("Audio/Score").CreateInstance(); } public void ScoreToLeft() { ScoreLeft++; - OnScoreUpdated?.Invoke(this); - PostScoreUpdate(); } public void ScoreToRight() { ScoreRight++; - OnScoreUpdated?.Invoke(this); - PostScoreUpdate(); } @@ -73,6 +72,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo Reset(); IsGameInProgress = true; PostScoreUpdate(); + networkServer.SendToAll(new StartPacket()); logger?.Log(this, $"Game started"); return true; } @@ -89,6 +89,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo private void PostScoreUpdate() { + OnScoreUpdated?.Invoke(this); Ball.ResetBall(); if (networkServer is not null) @@ -103,7 +104,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo IsGameInProgress = false; gameEndSoundEffect?.Play(); OnFinished?.Invoke(this); - logger?.Log(this, $"Game finished"); + logger?.Log(this, $"Game finished: {ScoreLeft} - {ScoreRight}"); return; } @@ -123,10 +124,21 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo ScoreLeft = packet.Left; ScoreRight = packet.Right; - OnScoreUpdated?.Invoke(this); + PostScoreUpdate(); + + if (IsGameInProgress && (ScoreLeft != 0 || ScoreRight != 0)) + scoreSoundEffect?.Play(); + logger?.Log(this, $"Client score update packet arrived: {packet.Left} - {packet.Right}"); } + void IPacketListenerClient.OnClientPacketArrived(IConnection sender, StartPacket packet) + { + IsGameInProgress = true; + logger?.Log(this, $"Game started"); + } + + private class StartPacket : INetworkPacket; private class ScorePacket : INetworkPacket { public int Left { get; set; } diff --git a/Shared/Content/Audio/Score.wav b/Shared/Content/Audio/Score.wav new file mode 100644 index 0000000..a23e313 Binary files /dev/null and b/Shared/Content/Audio/Score.wav differ diff --git a/Shared/Content/Content.mgcb b/Shared/Content/Content.mgcb index 96012de..c95229b 100644 --- a/Shared/Content/Content.mgcb +++ b/Shared/Content/Content.mgcb @@ -19,6 +19,12 @@ /processorParam:Quality=Best /build:Audio/Bounce.wav +#begin Audio/Score.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:Audio/Score.wav + #begin Audio/Win.wav /importer:WavImporter /processor:SoundEffectProcessor