Park/MusicManager.cs
using Sandbox.Audio;
/// <summary>
/// A component that handles background music playback with volume fade-in.
/// </summary>
public sealed class MusicManager : Component
{
[Property] public SoundFile SongFile { get; set; }
[Property] public float MaxVolume { get; set; }
[Property] public float VolumeFadeInTime { get; set; }
public MusicPlayer MusicPlayer { get; private set; }
private Mixer _musicMixer;
private TimeSince _timeSinceStart;
protected override void OnStart()
{
base.OnStart();
MusicPlayer = MusicPlayer.Play( FileSystem.Mounted, SongFile.ResourcePath.Replace( "vsnd", "mp3" ) );
MusicPlayer.Repeat = true;
MusicPlayer.ListenLocal = true;
_musicMixer = Mixer.FindMixerByName( "Music" );
_musicMixer.Volume = 0f;
MusicPlayer.TargetMixer = _musicMixer;
_timeSinceStart = 0f;
}
protected override void OnUpdate()
{
base.OnUpdate();
if ( _timeSinceStart < VolumeFadeInTime )
_musicMixer.Volume = MathX.Remap( _timeSinceStart, 0f, VolumeFadeInTime, 0f, MaxVolume );
}
}