using NitroxClient.Communication;
using NitroxClient.Communication.Abstract;
using NitroxModel.DataStructures;
using NitroxModel.DataStructures.Unity;
using NitroxModel.GameLogic.FMOD;
using NitroxModel.Packets;
using UnityEngine;
namespace NitroxClient.GameLogic.FMOD;
public class FMODSystem
{
private readonly IPacketSender packetSender;
public FMODSystem(IPacketSender packetSender)
{
this.packetSender = packetSender;
}
///
public static FMODSoundSuppressor SuppressSubnauticaSounds() => new();
///
/// Suppresses sending any sound packet
///
public static PacketSuppressor SuppressSendingSounds()
{
return PacketSuppressor.Suppress();
}
///
public static float CalculateVolume(Vector3 p1, Vector3 p2, float radius, float volume) => SoundHelper.CalculateVolume(Vector3.Distance(p1, p2), radius, volume);
public void SendAssetPlay(string path, NitroxVector3 position, float volume) => packetSender.Send(new FMODAssetPacket(path, position, volume));
public void SendCustomEmitterPlay(NitroxId id, string assetPath) => packetSender.Send(new FMODCustomEmitterPacket(id, assetPath, true));
public void SendCustomEmitterStop(NitroxId id, string assetPath) => packetSender.Send(new FMODCustomEmitterPacket(id, assetPath, false));
public void SendCustomLoopingEmitterPlay(NitroxId id, string assetPath) => packetSender.Send(new FMODCustomLoopingEmitterPacket(id, assetPath));
public void SendStudioEmitterPlay(NitroxId id, string assetPath, bool allowFadeout) => packetSender.Send(new FMODStudioEmitterPacket(id, assetPath, true, allowFadeout));
public void SendStudioEmitterStop(NitroxId id, string assetPath, bool allowFadeout) => packetSender.Send(new FMODStudioEmitterPacket(id, assetPath, false, allowFadeout));
public void SendEventInstancePlay(NitroxId id, string assetPath, NitroxVector3 position, float volume) => packetSender.Send(new FMODEventInstancePacket(id, true, assetPath, position, volume));
public void SendEventInstanceStop(NitroxId id, string assetPath, NitroxVector3 position, float volume) => packetSender.Send(new FMODEventInstancePacket(id, false, assetPath, position, volume));
}