2020-04-20 20:28:36 +08:00
|
|
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
|
|
|
// See the LICENCE file in the repository root for full licence text.
|
|
|
|
|
2022-06-17 15:37:17 +08:00
|
|
|
#nullable disable
|
|
|
|
|
2020-04-20 20:28:36 +08:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using osu.Framework.Input.Bindings;
|
|
|
|
|
|
|
|
namespace osu.Game.Rulesets.Mania
|
|
|
|
{
|
|
|
|
public class VariantMappingGenerator
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// All the <see cref="InputKey"/>s available to the left hand.
|
|
|
|
/// </summary>
|
|
|
|
public InputKey[] LeftKeys;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// All the <see cref="InputKey"/>s available to the right hand.
|
|
|
|
/// </summary>
|
|
|
|
public InputKey[] RightKeys;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// The <see cref="InputKey"/> for the special key.
|
|
|
|
/// </summary>
|
|
|
|
public InputKey SpecialKey;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// The <see cref="ManiaAction"/> at which the normal columns should begin.
|
|
|
|
/// </summary>
|
|
|
|
public ManiaAction NormalActionStart;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// The <see cref="ManiaAction"/> for the special column.
|
|
|
|
/// </summary>
|
|
|
|
public ManiaAction SpecialAction;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Generates a list of <see cref="KeyBinding"/>s for a specific number of columns.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="columns">The number of columns that need to be bound.</param>
|
|
|
|
/// <param name="nextNormalAction">The next <see cref="ManiaAction"/> to use for normal columns.</param>
|
|
|
|
/// <returns>The keybindings.</returns>
|
|
|
|
public IEnumerable<KeyBinding> GenerateKeyBindingsFor(int columns, out ManiaAction nextNormalAction)
|
|
|
|
{
|
|
|
|
ManiaAction currentNormalAction = NormalActionStart;
|
|
|
|
|
|
|
|
var bindings = new List<KeyBinding>();
|
|
|
|
|
|
|
|
for (int i = LeftKeys.Length - columns / 2; i < LeftKeys.Length; i++)
|
|
|
|
bindings.Add(new KeyBinding(LeftKeys[i], currentNormalAction++));
|
|
|
|
|
|
|
|
if (columns % 2 == 1)
|
|
|
|
bindings.Add(new KeyBinding(SpecialKey, SpecialAction));
|
|
|
|
|
|
|
|
for (int i = 0; i < columns / 2; i++)
|
|
|
|
bindings.Add(new KeyBinding(RightKeys[i], currentNormalAction++));
|
|
|
|
|
|
|
|
nextNormalAction = currentNormalAction;
|
|
|
|
return bindings;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|