iso2/scene/SurfaceMusicManager.cs
public class SurfaceMusicManager : Component {
	public SoundHandle ColdA;
	public SoundHandle ColdB;
	public SoundHandle Warm;
	public SoundHandle HouseAmb;
	public enum Track {
		None,
		Cold,
		Warm,
		House
	}
	[Property] public Track PlayingTrack {get;set;} = Track.Cold;

	private bool ColdSwitch;
	protected override void OnUpdate() {
		if (ColdSwitch) {
			if (!ColdA.IsValid() || !ColdA.IsPlaying)
				ColdA = Sound.Play("sounds/music/freeze.sound");
			if (ColdA.Time > 130)
				ColdSwitch = false;
		} else {
			if (!ColdB.IsValid() || !ColdB.IsPlaying)
				ColdB = Sound.Play("sounds/music/freeze.sound");
			if (ColdB.Time > 130)
				ColdSwitch = true;
		}
		if (!HouseAmb.IsValid() || !HouseAmb.IsPlaying) {
			HouseAmb = Sound.Play("sounds/ambient/room_house.sound");
			HouseAmb.Volume = 0f;
		}
		if (ColdA.IsValid())
			ColdA.Volume = ColdA.Volume.Approach((PlayingTrack == Track.Cold)? 1 : 0, Time.Delta / 4f);
		if (ColdB.IsValid())
			ColdB.Volume = ColdB.Volume.Approach((PlayingTrack == Track.Cold)? 1 : 0, Time.Delta / 4f);
		if (HouseAmb.IsValid())
			HouseAmb.Volume = HouseAmb.Volume.Approach((PlayingTrack == Track.House)? 1 : 0, Time.Delta / 4f);
		base.OnUpdate();
	}
}