1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-13 17:27:48 +08:00

Implement method to deduplicate keybindings

This commit is contained in:
Bartłomiej Dach 2023-10-16 20:46:20 +02:00
parent 79273b88f6
commit 90c44cee54
No known key found for this signature in database
2 changed files with 19 additions and 3 deletions

View File

@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.Input.Bindings; using osu.Framework.Input.Bindings;
using osu.Game.Input; using osu.Game.Input;
@ -24,7 +25,7 @@ namespace osu.Game.Tests.Input
new RealmKeyBinding(GlobalAction.MusicNext, KeyCombination.FromKey(Key.F5)) new RealmKeyBinding(GlobalAction.MusicNext, KeyCombination.FromKey(Key.F5))
}; };
bool anyCleared = RealmKeyBindingStore.ClearDuplicateBindings(bindings); bool anyCleared = RealmKeyBindingStore.ClearDuplicateBindings(bindings.AsQueryable());
Assert.Multiple(() => Assert.Multiple(() =>
{ {
@ -58,7 +59,7 @@ namespace osu.Game.Tests.Input
new RealmKeyBinding(GlobalAction.TakeScreenshot, KeyCombination.FromKey(Key.PrintScreen)), new RealmKeyBinding(GlobalAction.TakeScreenshot, KeyCombination.FromKey(Key.PrintScreen)),
}; };
bool anyCleared = RealmKeyBindingStore.ClearDuplicateBindings(bindings); bool anyCleared = RealmKeyBindingStore.ClearDuplicateBindings(bindings.AsQueryable());
Assert.Multiple(() => Assert.Multiple(() =>
{ {

View File

@ -139,7 +139,22 @@ namespace osu.Game.Input
/// <returns>Whether any bindings have been cleared.</returns> /// <returns>Whether any bindings have been cleared.</returns>
public static bool ClearDuplicateBindings(IQueryable<RealmKeyBinding> keyBindings) public static bool ClearDuplicateBindings(IQueryable<RealmKeyBinding> keyBindings)
{ {
return false; bool anyRemoved = false;
var lookup = keyBindings.ToLookup(kb => kb.KeyCombination);
foreach (var group in lookup)
{
if (group.Count() <= 1)
continue;
foreach (var binding in group)
binding.KeyCombination = new KeyCombination(InputKey.None);
anyRemoved = true;
}
return anyRemoved;
} }
} }
} }