// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Game.Audio; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Database; using osu.Game.Rulesets.Objects.Types; namespace osu.Game.Rulesets.Objects { /// /// A HitObject describes an object in a Beatmap. /// /// HitObjects may contain more properties for which you should be checking through the IHas* types. /// /// public class HitObject { /// /// The time at which the HitObject starts. /// public virtual double StartTime { get; set; } /// /// The samples to be played when this hit object is hit. /// /// In the case of types, this is the sample of the curve body /// and can be treated as the default samples for the hit object. /// /// public SampleInfoList Samples = new SampleInfoList(); /// /// Applies default values to this HitObject. /// /// The control points. /// The difficulty settings to use. public virtual void ApplyDefaults(ControlPointInfo controlPointInfo, BeatmapDifficulty difficulty) { SoundControlPoint soundPoint = controlPointInfo.SoundPointAt(StartTime); // Initialize first sample Samples.ForEach(s => initializeSampleInfo(s, soundPoint)); // Initialize any repeat samples var repeatData = this as IHasRepeats; repeatData?.RepeatSamples?.ForEach(r => r.ForEach(s => initializeSampleInfo(s, soundPoint))); } private void initializeSampleInfo(SampleInfo sample, SoundControlPoint soundPoint) { if (sample.Volume == 0) sample.Volume = soundPoint?.SampleVolume ?? 0; // If the bank is not assigned a name, assign it from the control point if (string.IsNullOrEmpty(sample.Bank)) sample.Bank = soundPoint?.SampleBank ?? @"normal"; } } }