feat: added game audios

This commit is contained in:
Syntriax 2025-07-27 18:51:53 +03:00
parent a781d92996
commit d30d1e0d5c
7 changed files with 49 additions and 4 deletions

View File

@ -4,7 +4,6 @@ using Microsoft.Xna.Framework.Input;
using Syntriax.Engine.Core; using Syntriax.Engine.Core;
using Syntriax.Engine.Core.Debug; using Syntriax.Engine.Core.Debug;
using Syntriax.Engine.Core.Exceptions;
using Syntriax.Engine.Integration.MonoGame; using Syntriax.Engine.Integration.MonoGame;
using Syntriax.Engine.Network; using Syntriax.Engine.Network;
using Syntriax.Engine.Systems.Input; using Syntriax.Engine.Systems.Input;
@ -13,7 +12,7 @@ using Syntriax.Engine.Systems.Tween;
namespace Pong.Behaviours; namespace Pong.Behaviours;
public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate, public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent,
IPacketListenerServer<PongGameStarter.RequestStartPacket>, IPacketListenerServer<PongGameStarter.RequestStartPacket>,
IPacketListenerClient<PongGameStarter.RequestStartPacket> IPacketListenerClient<PongGameStarter.RequestStartPacket>
{ {
@ -29,6 +28,9 @@ public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate,
private Label? label = null; private Label? label = null;
private TickerTimer timer = null!; private TickerTimer timer = null!;
private SoundEffectInstance? tickSoundEffect = null;
private SoundEffectInstance? startSoundEffect = null;
public void FirstActiveFrame() public void FirstActiveFrame()
{ {
IButtonInputs<Keys>? buttonInputs = Universe.FindBehaviour<IButtonInputs<Keys>>(); IButtonInputs<Keys>? buttonInputs = Universe.FindBehaviour<IButtonInputs<Keys>>();
@ -50,6 +52,12 @@ public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate,
} }
} }
public void LoadContent(ContentManager content)
{
tickSoundEffect = content.Load<SoundEffect>("Audio/TimerTick").CreateInstance();
startSoundEffect = content.Load<SoundEffect>("Audio/TimerEnd").CreateInstance();
}
private void OnCountdownStart(IReadOnlyTimer sender) private void OnCountdownStart(IReadOnlyTimer sender)
{ {
pongManager.Reset(); pongManager.Reset();
@ -58,6 +66,8 @@ public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate,
private void DisplayCountdown(ITicker sender) private void DisplayCountdown(ITicker sender)
{ {
tickSoundEffect?.Play();
if (label != null) if (label != null)
{ {
label.Text = $"{START_COUNTDOWN - timer.TickCounter}"; label.Text = $"{START_COUNTDOWN - timer.TickCounter}";
@ -69,6 +79,7 @@ public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate,
private void StartPong(IReadOnlyTimer sender) private void StartPong(IReadOnlyTimer sender)
{ {
startSoundEffect?.Play();
pongManager.Start(); pongManager.Start();
} }

View File

@ -1,12 +1,16 @@
using System; using System;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Syntriax.Engine.Core; using Syntriax.Engine.Core;
using Syntriax.Engine.Core.Debug; using Syntriax.Engine.Core.Debug;
using Syntriax.Engine.Integration.MonoGame;
using Syntriax.Engine.Network; using Syntriax.Engine.Network;
namespace Pong.Behaviours; namespace Pong.Behaviours;
public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent,
IPacketListenerClient<PongManager.ScorePacket> IPacketListenerClient<PongManager.ScorePacket>
{ {
public Action<PongManager>? OnReset { get; set; } = null; public Action<PongManager>? OnReset { get; set; } = null;
@ -17,6 +21,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate,
private INetworkCommunicatorServer? networkServer = null; private INetworkCommunicatorServer? networkServer = null;
private ILogger? logger = null; private ILogger? logger = null;
private SoundEffectInstance? gameEndSoundEffect = null;
public int ScoreLeft { get; private set; } = 0; public int ScoreLeft { get; private set; } = 0;
public int ScoreRight { 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 int WinScore { get; } = 5;
public Ball Ball { get; private set; } = null!; public Ball Ball { get; private set; } = null!;
public bool IsGameInProgress { get; private set; } = false; public bool IsGameInProgress { get; private set; } = false;
public PongManager() => WinScore = 5; public PongManager() => WinScore = 5;
@ -37,6 +41,11 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate,
logger = Universe.FindBehaviour<ILogger>(); logger = Universe.FindBehaviour<ILogger>();
} }
public void LoadContent(ContentManager content)
{
gameEndSoundEffect = content.Load<SoundEffect>("Audio/Win").CreateInstance();
}
public void ScoreToLeft() public void ScoreToLeft()
{ {
ScoreLeft++; ScoreLeft++;
@ -92,6 +101,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate,
if (ScoreLeft > halfwayScore || ScoreRight > halfwayScore) if (ScoreLeft > halfwayScore || ScoreRight > halfwayScore)
{ {
IsGameInProgress = false; IsGameInProgress = false;
gameEndSoundEffect?.Play();
OnFinished?.Invoke(this); OnFinished?.Invoke(this);
logger?.Log(this, $"Game finished"); logger?.Log(this, $"Game finished");
return; return;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -13,6 +13,30 @@
#---------------------------------- Content ---------------------------------# #---------------------------------- 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 #begin UbuntuMono.spritefont
/importer:FontDescriptionImporter /importer:FontDescriptionImporter
/processor:FontDescriptionProcessor /processor:FontDescriptionProcessor