diff --git a/osu-resources b/osu-resources index 73ddad1f01..e24414a277 160000 --- a/osu-resources +++ b/osu-resources @@ -1 +1 @@ -Subproject commit 73ddad1f01f223c6c311f1302ed1658a2320813d +Subproject commit e24414a277e407ae2438e4b6d9fa9c7992dd6485 diff --git a/osu.Game.Mode.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Mode.Osu/Objects/Drawables/DrawableSlider.cs index e0af180e95..d5167f013b 100644 --- a/osu.Game.Mode.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Mode.Osu/Objects/Drawables/DrawableSlider.cs @@ -18,13 +18,12 @@ namespace osu.Game.Modes.Osu.Objects.Drawables private List components = new List(); SliderBody body; + SliderBall ball; SliderBouncer bouncer1, bouncer2; public DrawableSlider(Slider s) : base(s) { - SliderBall ball; - slider = s; Origin = Anchor.TopLeft; @@ -46,6 +45,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables StartTime = s.StartTime, Position = s.Position, Colour = s.Colour, + Sample = s.Sample, }) { Depth = -1 //override time-based depth. @@ -58,6 +58,8 @@ namespace osu.Game.Modes.Osu.Objects.Drawables components.Add(bouncer2); } + int currentRepeat; + protected override void Update() { base.Update(); @@ -67,6 +69,13 @@ namespace osu.Game.Modes.Osu.Objects.Drawables int repeat = (int)(progress * slider.RepeatCount); progress = (progress * slider.RepeatCount) % 1; + if (repeat > currentRepeat) + { + if (ball.Tracking) + PlaySample(); + currentRepeat = repeat; + } + if (repeat % 2 == 1) progress = 1 - progress; diff --git a/osu.Game.Mode.Osu/Objects/Drawables/Pieces/SliderBall.cs b/osu.Game.Mode.Osu/Objects/Drawables/Pieces/SliderBall.cs index ce34ef7c22..c0e2030a80 100644 --- a/osu.Game.Mode.Osu/Objects/Drawables/Pieces/SliderBall.cs +++ b/osu.Game.Mode.Osu/Objects/Drawables/Pieces/SliderBall.cs @@ -84,7 +84,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces } bool tracking; - protected bool Tracking + public bool Tracking { get { return tracking; } set diff --git a/osu.Game.Mode.Osu/Objects/OsuHitObjectParser.cs b/osu.Game.Mode.Osu/Objects/OsuHitObjectParser.cs index 216c40b779..ad0e45ade3 100644 --- a/osu.Game.Mode.Osu/Objects/OsuHitObjectParser.cs +++ b/osu.Game.Mode.Osu/Objects/OsuHitObjectParser.cs @@ -101,7 +101,10 @@ namespace osu.Game.Modes.Osu.Objects } result.Position = new Vector2(int.Parse(split[0]), int.Parse(split[1])); result.StartTime = double.Parse(split[2]); - result.Sample = new HitSampleInfo { Type = (SampleType)int.Parse(split[4]) }; + result.Sample = new HitSampleInfo { + Type = (SampleType)Math.Max(1, int.Parse(split[4])), + Set = SampleSet.Soft, + }; result.NewCombo = combo; // TODO: "addition" field return result; diff --git a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs index 9b5c268696..c7e29b1cad 100644 --- a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs @@ -5,7 +5,11 @@ using System; using System.ComponentModel; using System.Diagnostics; using osu.Framework; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Graphics.Containers; +using osu.Game.Beatmaps.Samples; using OpenTK; using Container = osu.Framework.Graphics.Containers.Container; @@ -40,9 +44,25 @@ namespace osu.Game.Modes.Objects.Drawables state = value; UpdateState(state); + + if (State == ArmedState.Hit) + PlaySample(); } } + AudioSample sample; + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + sample = audio.Sample.Get($@"Gameplay/{(HitObject.Sample.Set).ToString().ToLower()}-hit{HitObject.Sample.Type.ToString().ToLower()}"); + } + + protected void PlaySample() + { + sample?.Play(); + } + protected override void LoadComplete() { base.LoadComplete();