// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using System.Collections.Generic; namespace osu.Game.Audio { [Serializable] public class SampleInfo { public const string HIT_WHISTLE = @"hitwhistle"; public const string HIT_FINISH = @"hitfinish"; public const string HIT_NORMAL = @"hitnormal"; public const string HIT_CLAP = @"hitclap"; /// <summary> /// An optional ruleset namespace. /// </summary> public string Namespace; /// <summary> /// The bank to load the sample from. /// </summary> public string Bank; /// <summary> /// The name of the sample to load. /// </summary> public string Name; /// <summary> /// An optional suffix to provide priority lookup. Falls back to non-suffixed <see cref="Name"/>. /// </summary> public string Suffix; /// <summary> /// The sample volume. /// </summary> public int Volume; /// <summary> /// Retrieve all possible filenames that can be used as a source, returned in order of preference (highest first). /// </summary> public virtual IEnumerable<string> LookupNames { get { if (!string.IsNullOrEmpty(Namespace)) { if (!string.IsNullOrEmpty(Suffix)) yield return $"{Namespace}/{Bank}-{Name}{Suffix}"; yield return $"{Namespace}/{Bank}-{Name}"; } // check non-namespace as a fallback even when we have a namespace if (!string.IsNullOrEmpty(Suffix)) yield return $"{Bank}-{Name}{Suffix}"; yield return $"{Bank}-{Name}"; } } public SampleInfo Clone() => (SampleInfo)MemberwiseClone(); } }