DroneAudio.cs
using Sandbox;
namespace PaintballBaddies;

// Native events over built-in compiled clips, so a joining peer needs no new wrapper resource.
public static class DroneAudio
{
    private static SoundEvent Cue(string[] paths,float volume,float pitch)=>new()
    {
        Sounds=paths.Select(SoundFile.Load).ToList(),UI=false,Volume=volume,Pitch=pitch,
        Distance=1400,DistanceAttenuation=true,OcclusionEnabled=false,AirAbsorption=false,ReverbEnabled=false
    };
    private static readonly SoundEvent damage=Cue(["sounds/physics/phys-impact-metal-spring-001.vsnd","sounds/physics/phys-impact-metal-spring-003.vsnd"],.65f,1.25f);
    private static readonly SoundEvent crash=Cue(["sounds/physics/phys-impact-metal-medium-rattley-1.vsnd","sounds/physics/phys-impact-metal-medium-rattley-3.vsnd"],.85f,.85f);
    private static readonly SoundEvent failure=Cue(["sounds/ambience/electric-buzz-loop.vsnd"],.6f,1);
    private static readonly SoundEvent charge=Cue(["sounds/heist/bank_move.vsnd"],.3f,1.5f);
    public static int Plays {get;private set;}
    public static SoundHandle Play(string kind,Vector3 point)
    {
        var sound=Sound.Play(kind=="crash" ? crash : kind=="malfunction" ? failure : kind=="charge" ? charge : damage,point);
        if(sound is not null)Plays++;return sound;
    }
}