mirror of
https://github.com/osukey/osukey.git
synced 2025-06-05 12:57:39 +09:00
Add web-like hover behavior
This commit is contained in:
parent
62a91e4aaa
commit
b71c776e65
@ -57,12 +57,13 @@ namespace osu.Game.Overlays.BeatmapSet
|
|||||||
|
|
||||||
modsContainer.Add(new ModButton(new NoMod()));
|
modsContainer.Add(new ModButton(new NoMod()));
|
||||||
|
|
||||||
foreach (var mod in ruleset.NewValue.CreateInstance().GetAllMods())
|
ruleset.NewValue.CreateInstance().GetAllMods().ForEach(mod =>
|
||||||
|
{
|
||||||
if (mod.Ranked)
|
if (mod.Ranked)
|
||||||
modsContainer.Add(new ModButton(mod));
|
modsContainer.Add(new ModButton(mod));
|
||||||
|
});
|
||||||
|
|
||||||
foreach (var mod in modsContainer)
|
modsContainer.ForEach(button => button.OnSelectionChanged += selectionChanged);
|
||||||
mod.OnSelectionChanged += selectionChanged;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectionChanged(Mod mod, bool selected)
|
private void selectionChanged(Mod mod, bool selected)
|
||||||
@ -74,11 +75,39 @@ namespace osu.Game.Overlays.BeatmapSet
|
|||||||
else
|
else
|
||||||
mods.Remove(mod);
|
mods.Remove(mod);
|
||||||
|
|
||||||
|
if (!mods.Any() && !IsHovered)
|
||||||
|
modsContainer.ForEach(button => button.Highlighted.Value = true);
|
||||||
|
|
||||||
SelectedMods.Value = mods;
|
SelectedMods.Value = mods;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool OnHover(HoverEvent e)
|
||||||
|
{
|
||||||
|
if (!SelectedMods.Value.Any())
|
||||||
|
dehighlightAll();
|
||||||
|
|
||||||
|
return base.OnHover(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnHoverLost(HoverLostEvent e)
|
||||||
|
{
|
||||||
|
base.OnHoverLost(e);
|
||||||
|
|
||||||
|
if (!SelectedMods.Value.Any())
|
||||||
|
modsContainer.ForEach(mod => mod.Highlighted.Value = true);
|
||||||
|
}
|
||||||
|
|
||||||
public void DeselectAll() => modsContainer.ForEach(mod => mod.Selected.Value = false);
|
public void DeselectAll() => modsContainer.ForEach(mod => mod.Selected.Value = false);
|
||||||
|
|
||||||
|
private void dehighlightAll()
|
||||||
|
{
|
||||||
|
modsContainer.ForEach(button =>
|
||||||
|
{
|
||||||
|
if (!button.IsHovered)
|
||||||
|
button.Highlighted.Value = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private class ModButton : ModIcon
|
private class ModButton : ModIcon
|
||||||
{
|
{
|
||||||
private const float mod_scale = 0.4f;
|
private const float mod_scale = 0.4f;
|
||||||
@ -98,11 +127,13 @@ namespace osu.Game.Overlays.BeatmapSet
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
|
Highlighted.Value = true;
|
||||||
|
|
||||||
Selected.BindValueChanged(selected =>
|
Selected.BindValueChanged(selected =>
|
||||||
{
|
{
|
||||||
updateState();
|
updateState();
|
||||||
OnSelectionChanged?.Invoke(Mod, selected.NewValue);
|
OnSelectionChanged?.Invoke(Mod, selected.NewValue);
|
||||||
}, true);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool OnClick(ClickEvent e)
|
protected override bool OnClick(ClickEvent e)
|
||||||
|
@ -115,7 +115,7 @@ namespace osu.Game.Rulesets.UI
|
|||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
Highlighted.BindValueChanged(OnHighlightedChange, true);
|
Highlighted.BindValueChanged(OnHighlightedChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnHighlightedChange(ValueChangedEvent<bool> highlighted)
|
protected virtual void OnHighlightedChange(ValueChangedEvent<bool> highlighted)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user