// 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.Timing; 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 double StartTime; /// /// 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 difficulty settings to use. /// The timing settings to use. public virtual void ApplyDefaults(TimingInfo timing, BeatmapDifficulty difficulty) { ControlPoint overridePoint; ControlPoint timingPoint = timing.TimingPointAt(StartTime, out overridePoint); ControlPoint samplePoint = overridePoint ?? timingPoint; // Initialize first sample Samples.ForEach(s => initializeSampleInfo(s, samplePoint)); // Initialize any repeat samples var repeatData = this as IHasRepeats; repeatData?.RepeatSamples?.ForEach(r => r.ForEach(s => initializeSampleInfo(s, samplePoint))); } private void initializeSampleInfo(SampleInfo sample, ControlPoint controlPoint) { if (sample.Volume == 0) sample.Volume = controlPoint?.SampleVolume ?? 0; // If the bank is not assigned a name, assign it from the control point if (string.IsNullOrEmpty(sample.Bank)) sample.Bank = controlPoint?.SampleBank ?? @"normal"; } } }