mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 12:58:33 +01:00
Improved KeysExtensions memory usage
This commit is contained in:
parent
866dad49ab
commit
6537ff00c1
2 changed files with 12 additions and 20 deletions
|
@ -11,12 +11,13 @@ Additions
|
||||||
- Added RotateBy to Direction2Helper
|
- Added RotateBy to Direction2Helper
|
||||||
|
|
||||||
Improvements
|
Improvements
|
||||||
- Improved NinePatch memory performance
|
- Improved NinePatch memory usage
|
||||||
- Moved sound-related classes into Sound namespace
|
- Moved sound-related classes into Sound namespace
|
||||||
- Added customizable overloads for Keybind, Combination and GenericInput ToString methods
|
- Added customizable overloads for Keybind, Combination and GenericInput ToString methods
|
||||||
- Moved ColorHelper.Invert to ColorExtensions.Invert
|
- Moved ColorHelper.Invert to ColorExtensions.Invert
|
||||||
- Removed LINQ Any and All usage in various methods to improve memory usage
|
- Removed LINQ Any and All usage in various methods to improve memory usage
|
||||||
- Allow enumerating SoundEffectInstanceHandler entries
|
- Allow enumerating SoundEffectInstanceHandler entries
|
||||||
|
- Improved KeysExtensions memory usage
|
||||||
|
|
||||||
Fixes
|
Fixes
|
||||||
- Set default values for InputHandler held and pressed keys to avoid an exception if buttons are held in the very first frame
|
- Set default values for InputHandler held and pressed keys to avoid an exception if buttons are held in the very first frame
|
||||||
|
|
|
@ -13,6 +13,14 @@ namespace MLEM.Input {
|
||||||
/// All enum values of <see cref="ModifierKey"/>
|
/// All enum values of <see cref="ModifierKey"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly ModifierKey[] ModifierKeys = EnumHelper.GetValues<ModifierKey>().ToArray();
|
public static readonly ModifierKey[] ModifierKeys = EnumHelper.GetValues<ModifierKey>().ToArray();
|
||||||
|
private static readonly Dictionary<ModifierKey, Keys[]> KeysLookup = new Dictionary<ModifierKey, Keys[]> {
|
||||||
|
{ModifierKey.Shift, new[] {Keys.LeftShift, Keys.RightShift}},
|
||||||
|
{ModifierKey.Control, new[] {Keys.LeftControl, Keys.RightControl}},
|
||||||
|
{ModifierKey.Alt, new[] {Keys.LeftAlt, Keys.RightAlt}}
|
||||||
|
};
|
||||||
|
private static readonly Dictionary<Keys, ModifierKey> ModifiersLookup = KeysLookup
|
||||||
|
.SelectMany(kv => kv.Value.Select(v => (kv.Key, v)))
|
||||||
|
.ToDictionary(kv => kv.Item2, kv => kv.Item1);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns all of the keys that the given modifier key represents
|
/// Returns all of the keys that the given modifier key represents
|
||||||
|
@ -20,20 +28,7 @@ namespace MLEM.Input {
|
||||||
/// <param name="modifier">The modifier key</param>
|
/// <param name="modifier">The modifier key</param>
|
||||||
/// <returns>All of the keys the modifier key represents</returns>
|
/// <returns>All of the keys the modifier key represents</returns>
|
||||||
public static IEnumerable<Keys> GetKeys(this ModifierKey modifier) {
|
public static IEnumerable<Keys> GetKeys(this ModifierKey modifier) {
|
||||||
switch (modifier) {
|
return KeysLookup.TryGetValue(modifier, out var keys) ? keys : Enumerable.Empty<Keys>();
|
||||||
case ModifierKey.Shift:
|
|
||||||
yield return Keys.LeftShift;
|
|
||||||
yield return Keys.RightShift;
|
|
||||||
break;
|
|
||||||
case ModifierKey.Control:
|
|
||||||
yield return Keys.LeftControl;
|
|
||||||
yield return Keys.RightControl;
|
|
||||||
break;
|
|
||||||
case ModifierKey.Alt:
|
|
||||||
yield return Keys.LeftAlt;
|
|
||||||
yield return Keys.RightAlt;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -43,11 +38,7 @@ namespace MLEM.Input {
|
||||||
/// <param name="key">The key to convert to a modifier key</param>
|
/// <param name="key">The key to convert to a modifier key</param>
|
||||||
/// <returns>The modifier key, or <see cref="ModifierKey.None"/></returns>
|
/// <returns>The modifier key, or <see cref="ModifierKey.None"/></returns>
|
||||||
public static ModifierKey GetModifier(this Keys key) {
|
public static ModifierKey GetModifier(this Keys key) {
|
||||||
foreach (var mod in ModifierKeys) {
|
return ModifiersLookup.TryGetValue(key, out var mod) ? mod : ModifierKey.None;
|
||||||
if (GetKeys(mod).Contains(key))
|
|
||||||
return mod;
|
|
||||||
}
|
|
||||||
return ModifierKey.None;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc cref="GetModifier(Microsoft.Xna.Framework.Input.Keys)"/>
|
/// <inheritdoc cref="GetModifier(Microsoft.Xna.Framework.Input.Keys)"/>
|
||||||
|
|
Loading…
Reference in a new issue