From 8dbda18a80e8f0d67e8a9f6ff5c8365c7ff74883 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Sun, 27 Jul 2025 20:34:43 +0300 Subject: [PATCH] feat: score audio added --- Engine | 2 +- Shared/Behaviours/PongManager.cs | 24 ++++++++++++++++++------ Shared/Content/Audio/Score.wav | Bin 0 -> 12894 bytes Shared/Content/Content.mgcb | 6 ++++++ 4 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 Shared/Content/Audio/Score.wav 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 0000000000000000000000000000000000000000..a23e313d505457be67a6331c9ca651b62b385bfe GIT binary patch literal 12894 zcmcI~1#}b#)b;r6%=&JWkPw0df;$C*q{T}q?kyCjc%isUaVQpCic^Y~;2N~Jd!Rr( zS>JK_U!eV3TGDfV>pRmiL^xw53d#8FI)-tMARs9JZfNc`C_@T zYl@^qtu0zVIyrh{bf@UlqPbB|imZ!l9FY;WG&Ch_LFkqcCgg(iiL-GC5z2R8k@HkvRNHi2Jjn+b&p`Fow=x}r_ zIsxi?bSQdS)Wv4fN-15cB7ZOMlb^}Fj4FcsQa&tiQYWb$)e0)9zEn;rKPiiqS;|ah zfwDn4qD&8J!I_+yU&@<=(ZVG`5kf?>m?>-%nhX7dse!P-0RMSkCEsChH*dT*(p$qj z#{0tC%cuCTe7h^k?eye$R(dVImcAA~vu}kr#}nd-b>HW^@fqAit_1fgcsRH{crf@Z zSd<&Zz2MsL)4iR2#r^mFeFHZGY%nzF3ak!921fgj__DmMT%GgBt%jyeyKbq=WuqfENAA@tc{t^GumfZ zGi(_hGhStE&0L*zF#A(>O>!sX49t$n`Z=Ri`sO#)UZ=e{ z{yg*9@Mqng?RwVfdDj=)(-L0Y`hEJFvg!LX(5%F_k?GUZN2Pn-s&96_#(yvMvdoM4 zXNgZ{J_>!PC2TMEv|MtzR|#jzep+T~>BS}I#LbD_9YaMQii!>UHFS3<8un}0iEt`% zMv>T}7o)osyBW*Isc{2he~O(EYl&@ItZocfbZ!(=WNt)E_|wo^A;yqor*0{4U2FZ! z7Hf}lBszPBObVS9HZVLUVs*s*h@Yc6MV%^=9{Dul=kWev#X{4aR~^snrR|4o^K3Ot zGfbHIXY*)FM{6Tnf}L=rI=*sVcN#*>Aw3!*v(5a4X`K-_E?^VcB5X;v z8yiCPq)t(#=w&o!_||a65XOAL3}?nN{h35&uak2`J1X1j+L~JjS$3F><_)I)P#aA~ z^LBF&CZG9%Enz%vOfvlnwZkz=98w+O%`UYp}1ieU7Nm7O{bbtrKwn|2Gy7P zg)-3fv0m6LY$tXFdxHrWjhk^Jj^b|Y5q1nq#�Di8vw)KY}mAC*q^=$@ohAB%Y6# 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 B1JVEh literal 0 HcmV?d00001 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