mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 11:37:28 +08:00
Use new population methods and implement osu! ruleset actions
This commit is contained in:
parent
b6bb07c0b5
commit
e9a11ebc9f
@ -49,9 +49,19 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
||||
disc.Texture = textures.Get(@"Play/osu/disc");
|
||||
}
|
||||
|
||||
protected override bool OnMouseDown(InputState state, MouseDownEventArgs args)
|
||||
protected override bool OnKeyDown(InputState state, KeyDownEventArgs args)
|
||||
{
|
||||
return Hit?.Invoke() ?? false;
|
||||
if (state.Data is OsuAction)
|
||||
{
|
||||
switch ((OsuAction)state.Data)
|
||||
{
|
||||
case OsuAction.LeftButton:
|
||||
case OsuAction.RightButton:
|
||||
return IsHovered && (Hit?.Invoke() ?? false);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
50
osu.Game.Rulesets.Osu/OsuInputManager.cs
Normal file
50
osu.Game.Rulesets.Osu/OsuInputManager.cs
Normal file
@ -0,0 +1,50 @@
|
||||
// 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.Collections.Generic;
|
||||
using System.Linq;
|
||||
using osu.Framework.Input;
|
||||
using osu.Game.Input;
|
||||
using OpenTK.Input;
|
||||
using KeyboardState = osu.Framework.Input.KeyboardState;
|
||||
using MouseState = osu.Framework.Input.MouseState;
|
||||
|
||||
namespace osu.Game.Rulesets.Osu
|
||||
{
|
||||
public class OsuInputManager : ActionMappingInputManager<OsuAction>
|
||||
{
|
||||
public OsuInputManager(RulesetInfo ruleset) : base(ruleset, concurrencyMode: ConcurrentActionMode.UniqueActions)
|
||||
{
|
||||
|
||||
}
|
||||
protected override void TransformState(InputState state)
|
||||
{
|
||||
base.TransformState(state);
|
||||
|
||||
var mouse = state.Mouse as MouseState;
|
||||
var keyboard = state.Keyboard as KeyboardState;
|
||||
|
||||
if (mouse != null && keyboard != null)
|
||||
{
|
||||
if (mouse.IsPressed(MouseButton.Left))
|
||||
keyboard.Keys = keyboard.Keys.Concat(new[] { Key.LastKey + 1 });
|
||||
if (mouse.IsPressed(MouseButton.Right))
|
||||
keyboard.Keys = keyboard.Keys.Concat(new[] { Key.LastKey + 2 });
|
||||
}
|
||||
}
|
||||
|
||||
protected override IDictionary<KeyCombination, OsuAction> CreateDefaultMappings() => new Dictionary<KeyCombination, OsuAction>
|
||||
{
|
||||
{ Key.Z, OsuAction.LeftButton },
|
||||
{ Key.X, OsuAction.RightButton },
|
||||
{ Key.LastKey + 1, OsuAction.LeftButton },
|
||||
{ Key.LastKey + 2, OsuAction.RightButton },
|
||||
};
|
||||
}
|
||||
|
||||
public enum OsuAction
|
||||
{
|
||||
LeftButton,
|
||||
RightButton
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
// 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.Linq;
|
||||
using osu.Framework.Input;
|
||||
using OpenTK.Input;
|
||||
using KeyboardState = osu.Framework.Input.KeyboardState;
|
||||
using MouseState = osu.Framework.Input.MouseState;
|
||||
|
||||
namespace osu.Game.Rulesets.Osu
|
||||
{
|
||||
public class OsuKeyConversionInputManager : PassThroughInputManager
|
||||
{
|
||||
private bool leftViaKeyboard;
|
||||
private bool rightViaKeyboard;
|
||||
|
||||
protected override void TransformState(InputState state)
|
||||
{
|
||||
base.TransformState(state);
|
||||
|
||||
var mouse = state.Mouse as MouseState;
|
||||
var keyboard = state.Keyboard as KeyboardState;
|
||||
|
||||
if (keyboard != null)
|
||||
{
|
||||
leftViaKeyboard = keyboard.Keys.Contains(Key.Z);
|
||||
rightViaKeyboard = keyboard.Keys.Contains(Key.X);
|
||||
}
|
||||
|
||||
if (mouse != null)
|
||||
{
|
||||
if (leftViaKeyboard)
|
||||
mouse.SetPressed(MouseButton.Left, true);
|
||||
if (rightViaKeyboard)
|
||||
mouse.SetPressed(MouseButton.Right, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -31,7 +31,7 @@ namespace osu.Game.Rulesets.Osu.UI
|
||||
|
||||
protected override Playfield<OsuHitObject, OsuJudgement> CreatePlayfield() => new OsuPlayfield();
|
||||
|
||||
protected override PassThroughInputManager CreateActionMappingInputManager() => new OsuKeyConversionInputManager();
|
||||
protected override PassThroughInputManager CreateActionMappingInputManager() => new OsuInputManager(Ruleset?.RulesetInfo);
|
||||
|
||||
protected override DrawableHitObject<OsuHitObject, OsuJudgement> GetVisualRepresentation(OsuHitObject h)
|
||||
{
|
||||
|
@ -77,7 +77,7 @@
|
||||
<Compile Include="OsuDifficulty\Skills\Skill.cs" />
|
||||
<Compile Include="OsuDifficulty\Skills\Speed.cs" />
|
||||
<Compile Include="OsuDifficulty\Utils\History.cs" />
|
||||
<Compile Include="OsuKeyConversionInputManager.cs" />
|
||||
<Compile Include="OsuInputManager.cs" />
|
||||
<Compile Include="UI\OsuSettings.cs" />
|
||||
<Compile Include="Scoring\OsuScoreProcessor.cs" />
|
||||
<Compile Include="UI\OsuRulesetContainer.cs" />
|
||||
|
@ -94,7 +94,7 @@ namespace osu.Game.Input
|
||||
|
||||
private readonly List<Binding> pressedBindings = new List<Binding>();
|
||||
|
||||
protected override bool OnKeyDown(InputState state, KeyDownEventArgs args)
|
||||
protected override void PopulateDataKeyDown(InputState state, KeyDownEventArgs args)
|
||||
{
|
||||
if (!args.Repeat && (concurrencyMode > ConcurrentActionMode.None || pressedBindings.Count == 0))
|
||||
{
|
||||
@ -109,11 +109,9 @@ namespace osu.Game.Input
|
||||
pressedBindings.Add(validBinding);
|
||||
}
|
||||
}
|
||||
|
||||
return base.OnKeyDown(state, args);
|
||||
}
|
||||
|
||||
protected override bool OnKeyUp(InputState state, KeyUpEventArgs args)
|
||||
protected override void PopulateDataKeyUp(InputState state, KeyUpEventArgs args)
|
||||
{
|
||||
foreach (var binding in pressedBindings.ToList())
|
||||
{
|
||||
@ -127,8 +125,6 @@ namespace osu.Game.Input
|
||||
state.Data = binding.GetAction<T>();
|
||||
}
|
||||
}
|
||||
|
||||
return base.OnKeyUp(state, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user