1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-28 14:12:55 +08:00

Fix inconsistent sound effects on mod buttons

Because HoverClickSounds.OnClick() does not fire upon right clicking
on mod buttons, the sound effects that play on left and right click
were inconsistent. Introduce HoverMouseUpSounds drawable that allows
to play the click sound effect upon mouse up events for an arbitrary
set of mouse buttons and use it on mod buttons.
This commit is contained in:
Bartłomiej Dach 2019-08-31 17:01:12 +02:00
parent ee4869647f
commit a1c72db5f6
2 changed files with 44 additions and 1 deletions

View File

@ -0,0 +1,42 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System.Collections.Generic;
using osu.Framework.Allocation;
using osu.Framework.Audio;
using osu.Framework.Audio.Sample;
using osu.Framework.Extensions;
using osu.Framework.Input.Events;
using osuTK.Input;
namespace osu.Game.Graphics.UserInterface
{
/// <summary>
/// Adds hover sounds to a drawable, as well as click sounds upon MouseUp events for selected mouse buttons.
/// Intended to be used for controls that can respond to clicks of buttons other than the left mouse button in place of <see cref="HoverClickSounds" />.
/// </summary>
public class HoverMouseUpSounds : HoverSounds
{
private SampleChannel sampleClick;
private readonly List<MouseButton> buttons;
public HoverMouseUpSounds(List<MouseButton> buttons, HoverSampleSet sampleSet = HoverSampleSet.Normal)
: base(sampleSet)
{
this.buttons = buttons;
}
protected override bool OnMouseUp(MouseUpEvent e)
{
if (Contains(e.ScreenSpaceMousePosition) && buttons.Contains(e.Button))
sampleClick?.Play();
return base.OnMouseUp(e);
}
[BackgroundDependencyLoader]
private void load(AudioManager audio)
{
sampleClick = audio.Samples.Get($@"UI/generic-select{SampleSet.GetDescription()}");
}
}
}

View File

@ -11,6 +11,7 @@ using osu.Game.Graphics.Sprites;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.UI;
using System;
using System.Collections.Generic;
using System.Linq;
using osu.Framework.Graphics.Cursor;
using osu.Framework.Input.Events;
@ -283,7 +284,7 @@ namespace osu.Game.Overlays.Mods
Anchor = Anchor.TopCentre,
Font = OsuFont.GetFont(size: 18)
},
new HoverClickSounds()
new HoverMouseUpSounds(new List<MouseButton> { MouseButton.Left, MouseButton.Right })
};
Mod = mod;