diff --git a/Shared/Behaviours/PongGameStarter.cs b/Shared/Behaviours/PongGameStarter.cs index d3b2114..ff6fad3 100644 --- a/Shared/Behaviours/PongGameStarter.cs +++ b/Shared/Behaviours/PongGameStarter.cs @@ -4,7 +4,6 @@ using Microsoft.Xna.Framework.Input; using Syntriax.Engine.Core; using Syntriax.Engine.Core.Debug; -using Syntriax.Engine.Core.Exceptions; using Syntriax.Engine.Integration.MonoGame; using Syntriax.Engine.Network; using Syntriax.Engine.Systems.Input; @@ -13,7 +12,7 @@ using Syntriax.Engine.Systems.Tween; namespace Pong.Behaviours; -public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate, +public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent, IPacketListenerServer, IPacketListenerClient { @@ -29,6 +28,9 @@ public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate, private Label? label = null; private TickerTimer timer = null!; + private SoundEffectInstance? tickSoundEffect = null; + private SoundEffectInstance? startSoundEffect = null; + public void FirstActiveFrame() { IButtonInputs? buttonInputs = Universe.FindBehaviour>(); @@ -50,6 +52,12 @@ public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate, } } + public void LoadContent(ContentManager content) + { + tickSoundEffect = content.Load("Audio/TimerTick").CreateInstance(); + startSoundEffect = content.Load("Audio/TimerEnd").CreateInstance(); + } + private void OnCountdownStart(IReadOnlyTimer sender) { pongManager.Reset(); @@ -58,6 +66,8 @@ public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate, private void DisplayCountdown(ITicker sender) { + tickSoundEffect?.Play(); + if (label != null) { label.Text = $"{START_COUNTDOWN - timer.TickCounter}"; @@ -69,6 +79,7 @@ public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate, private void StartPong(IReadOnlyTimer sender) { + startSoundEffect?.Play(); pongManager.Start(); } diff --git a/Shared/Behaviours/PongManager.cs b/Shared/Behaviours/PongManager.cs index e8164fe..23f5062 100644 --- a/Shared/Behaviours/PongManager.cs +++ b/Shared/Behaviours/PongManager.cs @@ -1,12 +1,16 @@ using System; +using Microsoft.Xna.Framework.Audio; +using Microsoft.Xna.Framework.Content; + using Syntriax.Engine.Core; using Syntriax.Engine.Core.Debug; +using Syntriax.Engine.Integration.MonoGame; using Syntriax.Engine.Network; namespace Pong.Behaviours; -public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, +public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent, IPacketListenerClient { public Action? OnReset { get; set; } = null; @@ -17,6 +21,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, private INetworkCommunicatorServer? networkServer = null; private ILogger? logger = null; + private SoundEffectInstance? gameEndSoundEffect = null; public int ScoreLeft { get; private set; } = 0; public int ScoreRight { get; private set; } = 0; @@ -24,7 +29,6 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, public int WinScore { get; } = 5; public Ball Ball { get; private set; } = null!; - public bool IsGameInProgress { get; private set; } = false; public PongManager() => WinScore = 5; @@ -37,6 +41,11 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, logger = Universe.FindBehaviour(); } + public void LoadContent(ContentManager content) + { + gameEndSoundEffect = content.Load("Audio/Win").CreateInstance(); + } + public void ScoreToLeft() { ScoreLeft++; @@ -92,6 +101,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, if (ScoreLeft > halfwayScore || ScoreRight > halfwayScore) { IsGameInProgress = false; + gameEndSoundEffect?.Play(); OnFinished?.Invoke(this); logger?.Log(this, $"Game finished"); return; diff --git a/Shared/Content/Audio/Bounce.wav b/Shared/Content/Audio/Bounce.wav new file mode 100644 index 0000000..23ded6e Binary files /dev/null and b/Shared/Content/Audio/Bounce.wav differ diff --git a/Shared/Content/Audio/TimerEnd.wav b/Shared/Content/Audio/TimerEnd.wav new file mode 100644 index 0000000..14e7a91 Binary files /dev/null and b/Shared/Content/Audio/TimerEnd.wav differ diff --git a/Shared/Content/Audio/TimerTick.wav b/Shared/Content/Audio/TimerTick.wav new file mode 100644 index 0000000..61c84b1 Binary files /dev/null and b/Shared/Content/Audio/TimerTick.wav differ diff --git a/Shared/Content/Audio/Win.wav b/Shared/Content/Audio/Win.wav new file mode 100644 index 0000000..a9deede Binary files /dev/null and b/Shared/Content/Audio/Win.wav differ diff --git a/Shared/Content/Content.mgcb b/Shared/Content/Content.mgcb index d1b9814..96012de 100644 --- a/Shared/Content/Content.mgcb +++ b/Shared/Content/Content.mgcb @@ -13,6 +13,30 @@ #---------------------------------- Content ---------------------------------# +#begin Audio/Bounce.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:Audio/Bounce.wav + +#begin Audio/Win.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:Audio/Win.wav + +#begin Audio/TimerTick.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:Audio/TimerTick.wav + +#begin Audio/TimerEnd.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:Audio/TimerEnd.wav + #begin UbuntuMono.spritefont /importer:FontDescriptionImporter /processor:FontDescriptionProcessor