using OpenTK.Input; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Input; using osu.Framework.Platform; using osu.Game.Configuration; using System; using System.Linq; namespace osu.Game.Screens.Play { class PlayerInputManager : UserInputManager { public PlayerInputManager(BasicGameHost host) : base(host) { } bool leftViaKeyboard; bool rightViaKeyboard; Bindable mouseDisabled; [BackgroundDependencyLoader] private void load(OsuConfigManager config) { mouseDisabled = config.GetBindable(OsuConfig.MouseDisableButtons) ?? new Bindable(false); } protected override void TransformState(InputState state) { base.TransformState(state); if (state.Keyboard != null) { leftViaKeyboard = state.Keyboard.Keys.Contains(Key.Z); rightViaKeyboard = state.Keyboard.Keys.Contains(Key.X); } var mouse = (Framework.Input.MouseState)state.Mouse; if (state.Mouse != null) { if (mouseDisabled.Value) { mouse.ButtonStates.Find(s => s.Button == MouseButton.Left).State = false; mouse.ButtonStates.Find(s => s.Button == MouseButton.Right).State = false; } if (leftViaKeyboard) mouse.ButtonStates.Find(s => s.Button == MouseButton.Left).State = true; if (rightViaKeyboard) mouse.ButtonStates.Find(s => s.Button == MouseButton.Right).State = true; } } } }