using System; using GlobalClassLib; using Microsoft.Xna.Framework.Audio; using MonoGameLibrary; using ONDClient.Enemies; namespace ONDClient.Sound; public static class SoundManager { private static SoundEffect ambience; private static SoundEffect ventWalk; private static SoundEffect camSwitch; private static SoundEffect lightOff; private static SoundEffect lightOn; private static SoundEffect doorClose; private static SoundEffect doorCloseRemote; private static SoundEffect doorOpen; private static SoundEffect doorOpenRemote; private static SoundEffect monitorFlip; private static SoundEffect powerOut; private static SoundEffect mareMove; private static SoundEffect dashMove; private static SoundEffect spotMove; private static SoundEffect spotActivate; private static SoundEffect nekoPurr; private static SoundEffect jumpscare; private static SoundEffect nekoAnger; private static SoundEffect nekoMove; private static SoundEffect bell; private static SoundEffectInstance ambienceInstance; private static SoundEffectInstance nekoPurrInstance; private static Random random = new(); public static void LoadSounds() { ambience = Core.content.Load("sounds/ambience"); ventWalk = Core.content.Load("sounds/vent-walk"); camSwitch = Core.content.Load("sounds/camera-switch"); lightOff = Core.content.Load("sounds/light-off"); lightOn = Core.content.Load("sounds/light-on"); doorClose = Core.content.Load("sounds/door-close"); doorCloseRemote = Core.content.Load("sounds/door-close-remote"); doorOpen = Core.content.Load("sounds/door-open"); doorOpenRemote = Core.content.Load("sounds/door-open-remote"); monitorFlip = Core.content.Load("sounds/monitor-flip"); powerOut = Core.content.Load("sounds/powerout"); mareMove = Core.content.Load("sounds/mare-move"); dashMove = Core.content.Load("sounds/dash-move"); spotMove = Core.content.Load("sounds/spot-move"); spotActivate = Core.content.Load("sounds/spot-activate"); nekoPurr = Core.content.Load("sounds/neko-purr"); jumpscare = Core.content.Load("sounds/jumpscare"); nekoAnger = Core.content.Load("sounds/neko-angry"); nekoMove = Core.content.Load("sounds/neko-move1"); bell = Core.content.Load("sounds/bell"); nekoPurrInstance = nekoPurr.CreateInstance(); ambienceInstance = ambience.CreateInstance(); } public static void StartAmbience() { ambienceInstance = ambience.CreateInstance(); ambienceInstance.IsLooped = true; ambienceInstance.Volume = 0.75f; ambienceInstance.Play(); } public static void StopAmbience() { ambienceInstance.Stop(); } public static void PlayDoor(bool doorState) { if (doorState){ doorClose.Play(); } else{ doorOpen.Play(); } } public static void PlayDoorRemote(bool doorState) { if (doorState){ doorCloseRemote.Play(); } else{ doorOpenRemote.Play(); } } public static void PlayLight(bool lightState) { if (lightState){ lightOn.Play(); } else{ lightOff.Play(); } } public static void PlayJumpscare() => jumpscare.Play(); public static void PlayPowerOut() => powerOut.Play(); public static void PlayNekoMove() => nekoMove.Play(); public static void PlayNekoAnger() => nekoAnger.Play(); public static void PlaySpotActivate() => spotActivate.Play(); public static void PlaySpotMove() => spotMove.Play(); public static void PlayDashMove() => dashMove.Play(); public static void PlayMareMove() => mareMove.Play(); public static void PlayMonitorFlip() => monitorFlip.Play(); public static void PlayCameraSwitch() => camSwitch.Play(); public static void PlayVentWalk() => ventWalk.Play(); public static void PlayBell() => bell.Play(); public static void StartNekoPurr() { nekoPurrInstance = nekoPurr.CreateInstance(); nekoPurrInstance.IsLooped = true; nekoPurrInstance.Play(); } public static void StopNekoPurr() { nekoPurrInstance.Stop(); } // unused private static SoundEffectInstance GetRandomisedPitchInstance(SoundEffect effect) { SoundEffectInstance instance = effect.CreateInstance(); instance.Pitch = (float)(random.NextDouble() - 0.5) / 5; instance.Play(); return instance; } public static void PlayEnemyMove(ClientEnemy enemy) { switch (enemy.Type){ case EnemyType.NEKO: PlayNekoMove(); break; case EnemyType.SPOT: PlaySpotMove(); break; case EnemyType.MARE: PlayMareMove(); break; } } public static void PlayEnemyReset(ClientEnemy enemy) { switch (enemy.Type){ case EnemyType.NEKO: PlayNekoMove(); break; case EnemyType.SPOT: PlaySpotMove(); break; case EnemyType.MARE: PlayMareMove(); break; case EnemyType.DASH: PlayDashMove(); break; } } }