feat: score audio added

This commit is contained in:
Syntriax 2025-07-27 20:34:43 +03:00
parent 52d5c8fc47
commit 8dbda18a80
4 changed files with 25 additions and 7 deletions

2
Engine

@ -1 +1 @@
Subproject commit 37aca44e45923511500ee1e6a8f39a30810b7f63 Subproject commit 03232f72e8f045fa3b5731a2b3839425f8ea9721

View File

@ -11,6 +11,7 @@ using Syntriax.Engine.Network;
namespace Pong.Behaviours; namespace Pong.Behaviours;
public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent, public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent,
IPacketListenerClient<PongManager.StartPacket>,
IPacketListenerClient<PongManager.ScorePacket> IPacketListenerClient<PongManager.ScorePacket>
{ {
public Action<PongManager>? OnReset { get; set; } = null; public Action<PongManager>? OnReset { get; set; } = null;
@ -21,6 +22,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
private INetworkCommunicatorServer? networkServer = null; private INetworkCommunicatorServer? networkServer = null;
private ILogger? logger = null; private ILogger? logger = null;
private SoundEffectInstance? scoreSoundEffect = null;
private SoundEffectInstance? gameEndSoundEffect = null; private SoundEffectInstance? gameEndSoundEffect = null;
public int ScoreLeft { get; private set; } = 0; public int ScoreLeft { get; private set; } = 0;
@ -44,21 +46,18 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
public void LoadContent(ContentManager content) public void LoadContent(ContentManager content)
{ {
gameEndSoundEffect = content.Load<SoundEffect>("Audio/Win").CreateInstance(); gameEndSoundEffect = content.Load<SoundEffect>("Audio/Win").CreateInstance();
scoreSoundEffect = content.Load<SoundEffect>("Audio/Score").CreateInstance();
} }
public void ScoreToLeft() public void ScoreToLeft()
{ {
ScoreLeft++; ScoreLeft++;
OnScoreUpdated?.Invoke(this);
PostScoreUpdate(); PostScoreUpdate();
} }
public void ScoreToRight() public void ScoreToRight()
{ {
ScoreRight++; ScoreRight++;
OnScoreUpdated?.Invoke(this);
PostScoreUpdate(); PostScoreUpdate();
} }
@ -73,6 +72,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
Reset(); Reset();
IsGameInProgress = true; IsGameInProgress = true;
PostScoreUpdate(); PostScoreUpdate();
networkServer.SendToAll(new StartPacket());
logger?.Log(this, $"Game started"); logger?.Log(this, $"Game started");
return true; return true;
} }
@ -89,6 +89,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
private void PostScoreUpdate() private void PostScoreUpdate()
{ {
OnScoreUpdated?.Invoke(this);
Ball.ResetBall(); Ball.ResetBall();
if (networkServer is not null) if (networkServer is not null)
@ -103,7 +104,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
IsGameInProgress = false; IsGameInProgress = false;
gameEndSoundEffect?.Play(); gameEndSoundEffect?.Play();
OnFinished?.Invoke(this); OnFinished?.Invoke(this);
logger?.Log(this, $"Game finished"); logger?.Log(this, $"Game finished: {ScoreLeft} - {ScoreRight}");
return; return;
} }
@ -123,10 +124,21 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
ScoreLeft = packet.Left; ScoreLeft = packet.Left;
ScoreRight = packet.Right; 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}"); logger?.Log(this, $"Client score update packet arrived: {packet.Left} - {packet.Right}");
} }
void IPacketListenerClient<StartPacket>.OnClientPacketArrived(IConnection sender, StartPacket packet)
{
IsGameInProgress = true;
logger?.Log(this, $"Game started");
}
private class StartPacket : INetworkPacket;
private class ScorePacket : INetworkPacket private class ScorePacket : INetworkPacket
{ {
public int Left { get; set; } public int Left { get; set; }

Binary file not shown.

View File

@ -19,6 +19,12 @@
/processorParam:Quality=Best /processorParam:Quality=Best
/build:Audio/Bounce.wav /build:Audio/Bounce.wav
#begin Audio/Score.wav
/importer:WavImporter
/processor:SoundEffectProcessor
/processorParam:Quality=Best
/build:Audio/Score.wav
#begin Audio/Win.wav #begin Audio/Win.wav
/importer:WavImporter /importer:WavImporter
/processor:SoundEffectProcessor /processor:SoundEffectProcessor