using NewHorizons.External.Modules; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Runtime.Serialization; namespace NewHorizons.External.Volumes { [JsonObject] public class AudioVolumeInfo : PriorityVolumeInfo { /// /// The audio to use. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list. /// public string audio; [DefaultValue("random")] public ClipSelectionType clipSelection = ClipSelectionType.RANDOM; /// /// The audio track of this audio volume /// [DefaultValue("environment")] public AudioMixerTrackName track = AudioMixerTrackName.Environment; /// /// Whether to loop this audio while in this audio volume or just play it once /// [DefaultValue(true)] public bool loop = true; /// /// The loudness of the audio /// [Range(0f, 1f)] [DefaultValue(1f)] public float volume = 1f; /// /// How long it will take to fade this sound in and out when entering/exiting this volume. /// [DefaultValue(2f)] public float fadeSeconds = 2f; /// /// Play the sound instantly without any fading. /// public bool noFadeFromBeginning; /// /// Randomize what time the audio starts at. /// public bool randomizePlayhead; /// /// Pause the music when exiting the volume. /// public bool pauseOnFadeOut; [JsonConverter(typeof(StringEnumConverter))] public enum ClipSelectionType { [EnumMember(Value = @"random")] RANDOM, [EnumMember(Value = @"sequential")] SEQUENTIAL, [EnumMember(Value = @"manual")] MANUAL } [JsonConverter(typeof(StringEnumConverter))] public enum AudioMixerTrackName { [EnumMember(Value = @"undefined")] Undefined = 0, [EnumMember(Value = @"menu")] Menu = 1, [EnumMember(Value = @"music")] Music = 2, [EnumMember(Value = @"environment")] Environment = 4, [EnumMember(Value = @"environmentUnfiltered")] Environment_Unfiltered = 5, [EnumMember(Value = @"endTimesSfx")] EndTimes_SFX = 8, [EnumMember(Value = @"signal")] Signal = 16, [EnumMember(Value = @"death")] Death = 32, [EnumMember(Value = @"player")] Player = 64, [EnumMember(Value = @"playerExternal")] Player_External = 65, [EnumMember(Value = @"ship")] Ship = 128, [EnumMember(Value = @"map")] Map = 256, [EnumMember(Value = @"endTimesMusic")] EndTimes_Music = 512, [EnumMember(Value = @"muffleWhileRafting")] MuffleWhileRafting = 1024, [EnumMember(Value = @"muffleIndoors")] MuffleIndoors = 2048, [EnumMember(Value = @"slideReelMusic")] SlideReelMusic = 4096, } } }