mirror of
https://github.com/osukey/osukey.git
synced 2025-08-04 15:16:38 +09:00
Merge branch 'master' into hardrock-flipping
This commit is contained in:
@ -22,7 +22,7 @@ namespace osu.Game.Input
|
||||
{
|
||||
var ruleset = info.CreateInstance();
|
||||
foreach (var variant in ruleset.AvailableVariants)
|
||||
insertDefaults(ruleset.GetDefaultKeyBindings(), info.ID, variant);
|
||||
insertDefaults(ruleset.GetDefaultKeyBindings(variant), info.ID, variant);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,21 +3,29 @@
|
||||
|
||||
using osu.Framework.Input.Bindings;
|
||||
using osu.Game.Graphics;
|
||||
using osu.Game.Overlays.Settings;
|
||||
|
||||
namespace osu.Game.Overlays.KeyBinding
|
||||
{
|
||||
public class GlobalKeyBindingsSection : KeyBindingsSection
|
||||
public class GlobalKeyBindingsSection : SettingsSection
|
||||
{
|
||||
private readonly string name;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_hot;
|
||||
public override string Header => "Global";
|
||||
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_nofail;
|
||||
public override string Header => name;
|
||||
|
||||
public GlobalKeyBindingsSection(KeyBindingInputManager manager, string name)
|
||||
public GlobalKeyBindingsSection(KeyBindingInputManager manager)
|
||||
{
|
||||
this.name = name;
|
||||
Add(new DefaultBindingsSubsection(manager));
|
||||
}
|
||||
|
||||
Defaults = manager.DefaultKeyBindings;
|
||||
private class DefaultBindingsSubsection : KeyBindingsSubsection
|
||||
{
|
||||
protected override string Header => string.Empty;
|
||||
|
||||
public DefaultBindingsSubsection(KeyBindingInputManager manager)
|
||||
: base(null)
|
||||
{
|
||||
Defaults = manager.DefaultKeyBindings;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using osu.Framework.Allocation;
|
||||
@ -22,7 +21,7 @@ namespace osu.Game.Overlays.KeyBinding
|
||||
{
|
||||
internal class KeyBindingRow : Container, IFilterable
|
||||
{
|
||||
private readonly Enum action;
|
||||
private readonly object action;
|
||||
private readonly IEnumerable<Framework.Input.Bindings.KeyBinding> bindings;
|
||||
|
||||
private const float transition_time = 150;
|
||||
@ -50,7 +49,7 @@ namespace osu.Game.Overlays.KeyBinding
|
||||
|
||||
public string[] FilterTerms => new[] { text.Text }.Concat(bindings.Select(b => b.KeyCombination.ReadableString())).ToArray();
|
||||
|
||||
public KeyBindingRow(Enum action, IEnumerable<Framework.Input.Bindings.KeyBinding> bindings)
|
||||
public KeyBindingRow(object action, IEnumerable<Framework.Input.Bindings.KeyBinding> bindings)
|
||||
{
|
||||
this.action = action;
|
||||
this.bindings = bindings;
|
||||
|
@ -1,7 +1,6 @@
|
||||
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using osu.Framework.Allocation;
|
||||
@ -12,38 +11,34 @@ using OpenTK;
|
||||
|
||||
namespace osu.Game.Overlays.KeyBinding
|
||||
{
|
||||
public abstract class KeyBindingsSection : SettingsSection
|
||||
public abstract class KeyBindingsSubsection : SettingsSubsection
|
||||
{
|
||||
protected IEnumerable<Framework.Input.Bindings.KeyBinding> Defaults;
|
||||
|
||||
protected RulesetInfo Ruleset;
|
||||
|
||||
protected KeyBindingsSection()
|
||||
private readonly int? variant;
|
||||
|
||||
protected KeyBindingsSubsection(int? variant)
|
||||
{
|
||||
this.variant = variant;
|
||||
|
||||
FlowContent.Spacing = new Vector2(0, 1);
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load(KeyBindingStore store)
|
||||
{
|
||||
var enumType = Defaults?.FirstOrDefault()?.Action?.GetType();
|
||||
|
||||
if (enumType == null) return;
|
||||
|
||||
// for now let's just assume a variant of zero.
|
||||
// this will need to be implemented in a better way in the future.
|
||||
int? variant = null;
|
||||
if (Ruleset != null)
|
||||
variant = 0;
|
||||
|
||||
var bindings = store.Query(Ruleset?.ID, variant);
|
||||
|
||||
foreach (Enum v in Enum.GetValues(enumType))
|
||||
foreach (var defaultBinding in Defaults)
|
||||
{
|
||||
// one row per valid action.
|
||||
Add(new KeyBindingRow(v, bindings.Where(b => b.Action.Equals((int)(object)v)))
|
||||
Add(new KeyBindingRow(defaultBinding.Action, bindings.Where(b => b.Action.Equals((int)defaultBinding.Action)))
|
||||
{
|
||||
AllowMainMouseButtons = Ruleset != null
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -2,20 +2,26 @@
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using osu.Game.Graphics;
|
||||
using osu.Game.Overlays.Settings;
|
||||
using osu.Game.Rulesets;
|
||||
|
||||
namespace osu.Game.Overlays.KeyBinding
|
||||
{
|
||||
public class RulesetBindingsSection : KeyBindingsSection
|
||||
public class RulesetBindingsSection : SettingsSection
|
||||
{
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_nofail;
|
||||
public override string Header => Ruleset.Name;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_hot;
|
||||
public override string Header => ruleset.Name;
|
||||
|
||||
private readonly RulesetInfo ruleset;
|
||||
|
||||
public RulesetBindingsSection(RulesetInfo ruleset)
|
||||
{
|
||||
Ruleset = ruleset;
|
||||
this.ruleset = ruleset;
|
||||
|
||||
Defaults = ruleset.CreateInstance().GetDefaultKeyBindings();
|
||||
var r = ruleset.CreateInstance();
|
||||
|
||||
foreach (var variant in r.AvailableVariants)
|
||||
Add(new VariantBindingsSubsection(ruleset, variant));
|
||||
}
|
||||
}
|
||||
}
|
24
osu.Game/Overlays/KeyBinding/VariantBindingsSubsection.cs
Normal file
24
osu.Game/Overlays/KeyBinding/VariantBindingsSubsection.cs
Normal file
@ -0,0 +1,24 @@
|
||||
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using osu.Game.Rulesets;
|
||||
|
||||
namespace osu.Game.Overlays.KeyBinding
|
||||
{
|
||||
public class VariantBindingsSubsection : KeyBindingsSubsection
|
||||
{
|
||||
protected override string Header => variantName;
|
||||
private readonly string variantName;
|
||||
|
||||
public VariantBindingsSubsection(RulesetInfo ruleset, int variant)
|
||||
: base(variant)
|
||||
{
|
||||
Ruleset = ruleset;
|
||||
|
||||
var rulesetInstance = ruleset.CreateInstance();
|
||||
|
||||
variantName = rulesetInstance.GetVariantName(variant);
|
||||
Defaults = rulesetInstance.GetDefaultKeyBindings(variant);
|
||||
}
|
||||
}
|
||||
}
|
@ -17,7 +17,7 @@ namespace osu.Game.Overlays
|
||||
[BackgroundDependencyLoader(permitNulls: true)]
|
||||
private void load(RulesetStore rulesets, GlobalKeyBindingInputManager global)
|
||||
{
|
||||
AddSection(new GlobalKeyBindingsSection(global, "Global"));
|
||||
AddSection(new GlobalKeyBindingsSection(global));
|
||||
|
||||
foreach (var ruleset in rulesets.AllRulesets)
|
||||
AddSection(new RulesetBindingsSection(ruleset));
|
||||
|
@ -7,14 +7,15 @@ using osu.Framework.Graphics.Containers;
|
||||
using osu.Game.Graphics.Sprites;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using osu.Framework.Allocation;
|
||||
|
||||
namespace osu.Game.Overlays.Settings
|
||||
{
|
||||
public abstract class SettingsSubsection : FillFlowContainer, IHasFilterableChildren
|
||||
{
|
||||
protected override Container<Drawable> Content => content;
|
||||
protected override Container<Drawable> Content => FlowContent;
|
||||
|
||||
private readonly Container<Drawable> content;
|
||||
protected readonly FillFlowContainer FlowContent;
|
||||
|
||||
protected abstract string Header { get; }
|
||||
|
||||
@ -33,6 +34,19 @@ namespace osu.Game.Overlays.Settings
|
||||
RelativeSizeAxes = Axes.X;
|
||||
AutoSizeAxes = Axes.Y;
|
||||
Direction = FillDirection.Vertical;
|
||||
|
||||
FlowContent = new FillFlowContainer
|
||||
{
|
||||
Direction = FillDirection.Vertical,
|
||||
Spacing = new Vector2(0, 5),
|
||||
RelativeSizeAxes = Axes.X,
|
||||
AutoSizeAxes = Axes.Y,
|
||||
};
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load()
|
||||
{
|
||||
AddRangeInternal(new Drawable[]
|
||||
{
|
||||
new OsuSpriteText
|
||||
@ -41,13 +55,7 @@ namespace osu.Game.Overlays.Settings
|
||||
Margin = new MarginPadding { Bottom = 10 },
|
||||
Font = @"Exo2.0-Black",
|
||||
},
|
||||
content = new FillFlowContainer
|
||||
{
|
||||
Direction = FillDirection.Vertical,
|
||||
Spacing = new Vector2(0, 5),
|
||||
RelativeSizeAxes = Axes.X,
|
||||
AutoSizeAxes = Axes.Y,
|
||||
},
|
||||
FlowContent
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -63,5 +63,12 @@ namespace osu.Game.Rulesets
|
||||
/// <param name="variant">A variant.</param>
|
||||
/// <returns>A list of valid <see cref="KeyBinding"/>s.</returns>
|
||||
public virtual IEnumerable<KeyBinding> GetDefaultKeyBindings(int variant = 0) => new KeyBinding[] { };
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name for a key binding variant. This is used for display in the settings overlay.
|
||||
/// </summary>
|
||||
/// <param name="variant">The variant.</param>
|
||||
/// <returns>A descriptive name of the variant.</returns>
|
||||
public virtual string GetVariantName(int variant) => string.Empty;
|
||||
}
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ namespace osu.Game.Rulesets.UI
|
||||
/// <summary>
|
||||
/// The key conversion input manager for this RulesetContainer.
|
||||
/// </summary>
|
||||
public readonly PassThroughInputManager KeyBindingInputManager;
|
||||
public PassThroughInputManager KeyBindingInputManager;
|
||||
|
||||
/// <summary>
|
||||
/// Whether we are currently providing the local user a gameplay cursor.
|
||||
@ -76,6 +76,11 @@ namespace osu.Game.Rulesets.UI
|
||||
internal RulesetContainer(Ruleset ruleset)
|
||||
{
|
||||
Ruleset = ruleset;
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load()
|
||||
{
|
||||
KeyBindingInputManager = CreateInputManager();
|
||||
KeyBindingInputManager.RelativeSizeAxes = Axes.Both;
|
||||
}
|
||||
@ -244,7 +249,7 @@ namespace osu.Game.Rulesets.UI
|
||||
public Playfield<TObject, TJudgement> Playfield { get; private set; }
|
||||
|
||||
protected override Container<Drawable> Content => content;
|
||||
private readonly Container content;
|
||||
private Container content;
|
||||
|
||||
private readonly List<DrawableHitObject<TObject, TJudgement>> drawableObjects = new List<DrawableHitObject<TObject, TJudgement>>();
|
||||
|
||||
@ -256,6 +261,11 @@ namespace osu.Game.Rulesets.UI
|
||||
/// <param name="isForCurrentRuleset">Whether to assume the beatmap is for the current ruleset.</param>
|
||||
protected RulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap, bool isForCurrentRuleset)
|
||||
: base(ruleset, beatmap, isForCurrentRuleset)
|
||||
{
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load()
|
||||
{
|
||||
InputManager.Add(content = new Container
|
||||
{
|
||||
@ -264,11 +274,6 @@ namespace osu.Game.Rulesets.UI
|
||||
});
|
||||
|
||||
AddInternal(InputManager);
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load()
|
||||
{
|
||||
KeyBindingInputManager.Add(Playfield = CreatePlayfield());
|
||||
|
||||
loadObjects();
|
||||
|
@ -105,9 +105,10 @@
|
||||
<Compile Include="Overlays\Chat\ChatTabControl.cs" />
|
||||
<Compile Include="Overlays\KeyBinding\GlobalKeyBindingsSection.cs" />
|
||||
<Compile Include="Overlays\KeyBinding\KeyBindingRow.cs" />
|
||||
<Compile Include="Overlays\KeyBinding\KeyBindingsSection.cs" />
|
||||
<Compile Include="Overlays\KeyBinding\KeyBindingsSubsection.cs" />
|
||||
<Compile Include="Overlays\KeyBindingOverlay.cs" />
|
||||
<Compile Include="Overlays\KeyBinding\RulesetBindingsSection.cs" />
|
||||
<Compile Include="Overlays\KeyBinding\VariantBindingsSubsection.cs" />
|
||||
<Compile Include="Overlays\MainSettings.cs" />
|
||||
<Compile Include="Overlays\Music\CollectionsDropdown.cs" />
|
||||
<Compile Include="Overlays\Music\FilterControl.cs" />
|
||||
|
Reference in New Issue
Block a user