Skip to content

Commit

Permalink
Merge pull request #2483 from smoogipoo/disable-mouse-buttons
Browse files Browse the repository at this point in the history
Add keybind to disable mouse buttons
  • Loading branch information
peppy committed May 15, 2018
2 parents da4c839 + fc192c8 commit 457b98e
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 30 deletions.
82 changes: 65 additions & 17 deletions osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs
Expand Up @@ -4,43 +4,91 @@
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Configuration;
using osu.Framework.Configuration.Tracking;
using osu.Framework.Graphics;
using osu.Game.Overlays;

namespace osu.Game.Tests.Visual
{
[TestFixture]
public class TestCaseOnScreenDisplay : OsuTestCase
{
private FrameworkConfigManager config;
private Bindable<FrameSync> frameSyncMode;
[BackgroundDependencyLoader]
private void load()
{
var config = new TestConfigManager();

var osd = new TestOnScreenDisplay();
osd.BeginTracking(this, config);
Add(osd);

protected override void LoadComplete()
AddRepeatStep("Change toggle (no bind)", () => config.ToggleSetting(TestConfigSetting.ToggleSettingNoKeybind), 2);
AddRepeatStep("Change toggle (with bind)", () => config.ToggleSetting(TestConfigSetting.ToggleSettingWithKeybind), 2);
AddRepeatStep("Change enum (no bind)", () => config.IncrementEnumSetting(TestConfigSetting.EnumSettingNoKeybind), 3);
AddRepeatStep("Change enum (with bind)", () => config.IncrementEnumSetting(TestConfigSetting.EnumSettingWithKeybind), 3);
}

private class TestConfigManager : ConfigManager<TestConfigSetting>
{
base.LoadComplete();
public TestConfigManager()
{
InitialiseDefaults();
}

protected override void InitialiseDefaults()
{
Set(TestConfigSetting.ToggleSettingNoKeybind, false);
Set(TestConfigSetting.EnumSettingNoKeybind, EnumSetting.Setting1);
Set(TestConfigSetting.ToggleSettingWithKeybind, false);
Set(TestConfigSetting.EnumSettingWithKeybind, EnumSetting.Setting1);

Add(new OnScreenDisplay());
base.InitialiseDefaults();
}

frameSyncMode = config.GetBindable<FrameSync>(FrameworkSetting.FrameSync);
public void ToggleSetting(TestConfigSetting setting) => Set(setting, !Get<bool>(setting));

FrameSync initial = frameSyncMode.Value;
public void IncrementEnumSetting(TestConfigSetting setting)
{
var nextValue = Get<EnumSetting>(setting) + 1;
if (nextValue > EnumSetting.Setting4)
nextValue = EnumSetting.Setting1;
Set(setting, nextValue);
}

AddRepeatStep(@"Change frame limiter", setNextMode, 3);
public override TrackedSettings CreateTrackedSettings() => new TrackedSettings
{
new TrackedSetting<bool>(TestConfigSetting.ToggleSettingNoKeybind, b => new SettingDescription(b, "toggle setting with no keybind", b ? "enabled" : "disabled")),
new TrackedSetting<EnumSetting>(TestConfigSetting.EnumSettingNoKeybind, v => new SettingDescription(v, "enum setting with no keybind", v.ToString())),
new TrackedSetting<bool>(TestConfigSetting.ToggleSettingWithKeybind, b => new SettingDescription(b, "toggle setting with keybind", b ? "enabled" : "disabled", "fake keybind")),
new TrackedSetting<EnumSetting>(TestConfigSetting.EnumSettingWithKeybind, v => new SettingDescription(v, "enum setting with keybind", v.ToString(), "fake keybind")),
};

AddStep(@"Restore frame limiter", () => frameSyncMode.Value = initial);
protected override void PerformLoad()
{
}

protected override bool PerformSave() => false;
}

private void setNextMode()
private enum TestConfigSetting
{
var nextMode = frameSyncMode.Value + 1;
if (nextMode > FrameSync.Unlimited)
nextMode = FrameSync.VSync;
frameSyncMode.Value = nextMode;
ToggleSettingNoKeybind,
EnumSettingNoKeybind,
ToggleSettingWithKeybind,
EnumSettingWithKeybind
}

[BackgroundDependencyLoader]
private void load(FrameworkConfigManager config)
private enum EnumSetting
{
Setting1,
Setting2,
Setting3,
Setting4
}

private class TestOnScreenDisplay : OnScreenDisplay
{
this.config = config;
protected override void Display(Drawable toDisplay) => toDisplay.FadeIn().ResizeHeightTo(110);
}
}
}
6 changes: 6 additions & 0 deletions osu.Game/Configuration/OsuConfigManager.cs
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE

using osu.Framework.Configuration;
using osu.Framework.Configuration.Tracking;
using osu.Framework.Platform;
using osu.Game.Overlays;
using osu.Game.Screens.Select;
Expand Down Expand Up @@ -95,6 +96,11 @@ protected override void InitialiseDefaults()
public OsuConfigManager(Storage storage) : base(storage)
{
}

public override TrackedSettings CreateTrackedSettings() => new TrackedSettings
{
new TrackedSetting<bool>(OsuSetting.MouseDisableButtons, v => new SettingDescription(!v, "gameplay mouse buttons", v ? "disabled" : "enabled"))
};
}

public enum OsuSetting
Expand Down
7 changes: 5 additions & 2 deletions osu.Game/Input/Bindings/GlobalActionContainer.cs
Expand Up @@ -26,7 +26,8 @@ public GlobalActionContainer(OsuGameBase game)
{
new KeyBinding(InputKey.F8, GlobalAction.ToggleChat),
new KeyBinding(InputKey.F9, GlobalAction.ToggleSocial),
new KeyBinding(InputKey.F12,GlobalAction.TakeScreenshot),
new KeyBinding(InputKey.F10, GlobalAction.ToggleGameplayMouseButtons),
new KeyBinding(InputKey.F12, GlobalAction.TakeScreenshot),

new KeyBinding(new[] { InputKey.Control, InputKey.Alt, InputKey.R }, GlobalAction.ResetInputSettings),
new KeyBinding(new[] { InputKey.Control, InputKey.T }, GlobalAction.ToggleToolbar),
Expand Down Expand Up @@ -76,6 +77,8 @@ public enum GlobalAction
QuickRetry,

[Description("Take screenshot")]
TakeScreenshot
TakeScreenshot,
[Description("Toggle gameplay mouse buttons")]
ToggleGameplayMouseButtons,
}
}
3 changes: 3 additions & 0 deletions osu.Game/OsuGame.cs
Expand Up @@ -466,6 +466,9 @@ public bool OnPressed(GlobalAction action)
case GlobalAction.ToggleDirect:
direct.ToggleVisibility();
return true;
case GlobalAction.ToggleGameplayMouseButtons:
LocalConfig.Set(OsuSetting.MouseDisableButtons, !LocalConfig.Get<bool>(OsuSetting.MouseDisableButtons));
return true;
}

return false;
Expand Down
33 changes: 22 additions & 11 deletions osu.Game/Overlays/OnScreenDisplay.cs
Expand Up @@ -14,6 +14,7 @@
using OpenTK;
using OpenTK.Graphics;
using osu.Framework.Extensions.Color4Extensions;
using osu.Game.Configuration;
using osu.Game.Graphics.Sprites;

namespace osu.Game.Overlays
Expand All @@ -30,6 +31,7 @@ public class OnScreenDisplay : Container
private readonly SpriteText textLine3;

private const float height = 110;
private const float height_notext = 98;
private const float height_contracted = height * 0.9f;

private readonly FillFlowContainer<OptionLight> optionLights;
Expand Down Expand Up @@ -101,12 +103,12 @@ public OnScreenDisplay()
},
textLine3 = new OsuSpriteText
{
Padding = new MarginPadding { Bottom = 15 },
Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre,
Margin = new MarginPadding { Bottom = 15 },
Font = @"Exo2.0-Bold",
TextSize = 12,
Alpha = 0.3f,
Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre,
},
}
}
Expand All @@ -116,9 +118,10 @@ public OnScreenDisplay()
}

[BackgroundDependencyLoader]
private void load(FrameworkConfigManager frameworkConfig)
private void load(FrameworkConfigManager frameworkConfig, OsuConfigManager osuConfig)
{
BeginTracking(this, frameworkConfig);
BeginTracking(this, osuConfig);
}

private readonly Dictionary<(object, IConfigManager), TrackedSettings> trackedConfigManagers = new Dictionary<(object, IConfigManager), TrackedSettings>();
Expand Down Expand Up @@ -175,13 +178,10 @@ private void display(SettingDescription description)
textLine2.Text = description.Value;
textLine3.Text = description.Shortcut.ToUpper();
box.Animate(
b => b.FadeIn(500, Easing.OutQuint),
b => b.ResizeHeightTo(height, 500, Easing.OutQuint)
).Then(
b => b.FadeOutFromOne(1500, Easing.InQuint),
b => b.ResizeHeightTo(height_contracted, 1500, Easing.InQuint)
);
if (string.IsNullOrEmpty(textLine3.Text))
textLine3.Text = "NO KEY BOUND";
Display(box);
int optionCount = 0;
int selectedOption = -1;
Expand Down Expand Up @@ -213,6 +213,17 @@ private void display(SettingDescription description)
});
}

protected virtual void Display(Drawable toDisplay)
{
toDisplay.Animate(
b => b.FadeIn(500, Easing.OutQuint),
b => b.ResizeHeightTo(height, 500, Easing.OutQuint)
).Then(
b => b.FadeOutFromOne(1500, Easing.InQuint),
b => b.ResizeHeightTo(height_contracted, 1500, Easing.InQuint)
);
}

private class OptionLight : Container
{
private Color4 glowingColour, idleColour;
Expand Down

0 comments on commit 457b98e

Please sign in to comment.