Add global actions; improve default assignment

This commit is contained in:
Dean Herbert
2017-08-09 17:10:32 +09:00
parent bd84e507de
commit 34b12fbfa4
7 changed files with 62 additions and 29 deletions

View File

@ -11,16 +11,17 @@ namespace osu.Game.Rulesets.Catch
{ {
public CatchInputManager(RulesetInfo ruleset) : base(ruleset) public CatchInputManager(RulesetInfo ruleset) : base(ruleset)
{ {
Mappings = new Dictionary<Key, CatchAction>
{
{ Key.Z, CatchAction.MoveLeft },
{ Key.Left, CatchAction.MoveLeft },
{ Key.X, CatchAction.MoveRight },
{ Key.Right, CatchAction.MoveRight },
{ Key.LShift, CatchAction.Dash },
{ Key.RShift, CatchAction.Dash },
};
} }
protected override IDictionary<Key, CatchAction> CreateDefaultMappings() => new Dictionary<Key, CatchAction>
{
{ Key.Z, CatchAction.MoveLeft },
{ Key.Left, CatchAction.MoveLeft },
{ Key.X, CatchAction.MoveRight },
{ Key.Right, CatchAction.MoveRight },
{ Key.LShift, CatchAction.Dash },
{ Key.RShift, CatchAction.Dash },
};
} }
public enum CatchAction public enum CatchAction

View File

@ -14,7 +14,7 @@ namespace osu.Game.Input
/// Maps custom action data of type <see cref="T"/> and stores to <see cref="InputState.Data"/>. /// Maps custom action data of type <see cref="T"/> and stores to <see cref="InputState.Data"/>.
/// </summary> /// </summary>
/// <typeparam name="T">The type of the custom action.</typeparam> /// <typeparam name="T">The type of the custom action.</typeparam>
public class ActionMappingInputManager<T> : PassThroughInputManager public abstract class ActionMappingInputManager<T> : PassThroughInputManager
where T : struct where T : struct
{ {
private readonly RulesetInfo ruleset; private readonly RulesetInfo ruleset;
@ -30,9 +30,13 @@ namespace osu.Game.Input
{ {
this.ruleset = ruleset; this.ruleset = ruleset;
this.variant = variant; this.variant = variant;
Mappings = CreateDefaultMappings();
} }
protected IDictionary<Key, T> Mappings { get; set; } protected IDictionary<Key, T> Mappings { get; private set; }
protected abstract IDictionary<Key, T> CreateDefaultMappings();
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(BindingStore bindings) private void load(BindingStore bindings)

View File

@ -0,0 +1,18 @@
// 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.Input;
using OpenTK.Input;
using System.Collections.Generic;
namespace osu.Game
{
public class GlobalActionMappingInputManager : ActionMappingInputManager<OsuAction>
{
protected override IDictionary<Key, OsuAction> CreateDefaultMappings() => new Dictionary<Key, OsuAction>()
{
{ Key.F8, OsuAction.ToggleChat },
{ Key.F9, OsuAction.ToggleSocial },
};
}
}

View File

@ -0,0 +1,12 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
namespace osu.Game
{
public enum OsuAction
{
ToggleChat,
ToggleSocial
}
}

View File

@ -256,22 +256,17 @@ namespace osu.Game
{ {
if (args.Repeat || intro == null) return false; if (args.Repeat || intro == null) return false;
switch (args.Key) if (state.Data is OsuAction)
{ {
case Key.F8: switch ((OsuAction)state.Data)
chat.ToggleVisibility(); {
return true; case OsuAction.ToggleChat:
case Key.F9: chat.ToggleVisibility();
social.ToggleVisibility(); return true;
return true; case OsuAction.ToggleSocial:
case Key.PageUp: social.ToggleVisibility();
case Key.PageDown: return true;
var swClock = (Clock as ThrottledFrameClock)?.Source as StopwatchClock; }
if (swClock == null) return false;
swClock.Rate *= args.Key == Key.PageUp ? 1.1f : 0.9f;
Logger.Log($@"Adjusting game clock to {swClock.Rate}", LoggingTarget.Debug);
return true;
} }
if (state.Keyboard.ControlPressed) if (state.Keyboard.ControlPressed)

View File

@ -187,13 +187,14 @@ namespace osu.Game
Children = new Drawable[] Children = new Drawable[]
{ {
Cursor = new MenuCursor(), Cursor = new MenuCursor(),
new OsuTooltipContainer(Cursor) new GlobalActionMappingInputManager
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Child = content = new OsuContextMenuContainer Child = new OsuTooltipContainer(Cursor)
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
}, Child = content = new OsuContextMenuContainer { RelativeSizeAxes = Axes.Both },
}
} }
} }
}); });

View File

@ -94,6 +94,8 @@
<Compile Include="Graphics\UserInterface\OsuContextMenuItem.cs" /> <Compile Include="Graphics\UserInterface\OsuContextMenuItem.cs" />
<Compile Include="Input\Binding.cs" /> <Compile Include="Input\Binding.cs" />
<Compile Include="Input\BindingStore.cs" /> <Compile Include="Input\BindingStore.cs" />
<Compile Include="Input\OsuAction.cs" />
<Compile Include="Input\GlobalActionMappingInputManager.cs" />
<Compile Include="IO\FileStore.cs" /> <Compile Include="IO\FileStore.cs" />
<Compile Include="IO\FileInfo.cs" /> <Compile Include="IO\FileInfo.cs" />
<Compile Include="Online\API\Requests\GetUsersRequest.cs" /> <Compile Include="Online\API\Requests\GetUsersRequest.cs" />