From f58e3c94d5b3c176d52419d81c2239570cb1486e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 31 Oct 2022 13:20:26 +0100 Subject: [PATCH] Marked EnumHelper and DynamicEnum as obsolete due to their reimplementation in the DynamicEnums library --- CHANGELOG.md | 6 ++ MLEM.Data/DynamicEnum.cs | 2 +- MLEM.Data/Json/DynamicEnumConverter.cs | 1 + MLEM.Ui/Parsers/UiParser.cs | 4 +- MLEM/Input/InputHandler.cs | 14 ++++- MLEM/Input/KeysExtensions.cs | 4 +- MLEM/Input/MouseExtensions.cs | 3 +- MLEM/Misc/Direction2.cs | 2 +- MLEM/Misc/EnumHelper.cs | 3 + Sandbox/GameImpl.cs | 2 +- Tests/DataTests.cs | 2 - Tests/EnumTests.cs | 84 -------------------------- 12 files changed, 28 insertions(+), 99 deletions(-) delete mode 100644 Tests/EnumTests.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index f38ab0a..7905014 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,9 @@ Fixes - Fixed some TokenizedString tokens starting with a line break not being split correctly - Fixed InputHandler maintaining old input states when input types are toggled off +Removals +- Marked EnumHelper as obsolete due to its reimplementation in [DynamicEnums](https://www.nuget.org/packages/DynamicEnums) + ### MLEM.Ui Additions - Added some extension methods for querying Anchor types @@ -70,6 +73,9 @@ Improvements Fixes - Fixed data texture atlases not allowing most characters in their region names +Removals +- Marked DynamicEnum as obsolete due to its reimplementation in [DynamicEnums](https://www.nuget.org/packages/DynamicEnums) + ## MLEM.Extended Improvements - Multi-target net452, making MLEM compatible with MonoGame for consoles diff --git a/MLEM.Data/DynamicEnum.cs b/MLEM.Data/DynamicEnum.cs index 5f368f2..4ef258d 100644 --- a/MLEM.Data/DynamicEnum.cs +++ b/MLEM.Data/DynamicEnum.cs @@ -25,7 +25,7 @@ namespace MLEM.Data { /// public static MyEnum operator ~(MyEnum value) => Neg(value); /// /// - [JsonConverter(typeof(DynamicEnumConverter))] + [Obsolete("DynamicEnum has been moved into the DynamicEnums library: https://www.nuget.org/packages/DynamicEnums"), JsonConverter(typeof(DynamicEnumConverter))] public abstract class DynamicEnum { private static readonly Dictionary Storages = new Dictionary(); diff --git a/MLEM.Data/Json/DynamicEnumConverter.cs b/MLEM.Data/Json/DynamicEnumConverter.cs index fa034e4..69fc81b 100644 --- a/MLEM.Data/Json/DynamicEnumConverter.cs +++ b/MLEM.Data/Json/DynamicEnumConverter.cs @@ -5,6 +5,7 @@ namespace MLEM.Data.Json { /// /// Converts a to and from JSON /// + [Obsolete("DynamicEnum has been moved into the DynamicEnums library: https://www.nuget.org/packages/DynamicEnums"), JsonConverter(typeof(DynamicEnumConverter))] public class DynamicEnumConverter : JsonConverter { /// Writes the JSON representation of the object. diff --git a/MLEM.Ui/Parsers/UiParser.cs b/MLEM.Ui/Parsers/UiParser.cs index 85325aa..b14fea6 100644 --- a/MLEM.Ui/Parsers/UiParser.cs +++ b/MLEM.Ui/Parsers/UiParser.cs @@ -4,14 +4,12 @@ using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using MLEM.Formatting; -using MLEM.Misc; using MLEM.Textures; using MLEM.Ui.Elements; using MLEM.Ui.Style; #if NETSTANDARD2_0_OR_GREATER || NET6_0_OR_GREATER using System.Net.Http; - #else using System.Net; #endif @@ -26,7 +24,7 @@ namespace MLEM.Ui.Parsers { /// /// An array containing all of the enum values. /// - public static readonly ElementType[] ElementTypes = EnumHelper.GetValues(); + public static readonly ElementType[] ElementTypes = (ElementType[]) Enum.GetValues(typeof(ElementType)); /// /// The base path for images, which is prepended to the image link. diff --git a/MLEM/Input/InputHandler.cs b/MLEM/Input/InputHandler.cs index db3c046..0fba60f 100644 --- a/MLEM/Input/InputHandler.cs +++ b/MLEM/Input/InputHandler.cs @@ -6,7 +6,6 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; -using MLEM.Misc; namespace MLEM.Input { /// @@ -15,6 +14,15 @@ namespace MLEM.Input { /// public class InputHandler : GameComponent { + /// + /// All values of the enum. + /// + public static readonly Buttons[] AllButtons = (Buttons[]) Enum.GetValues(typeof(Buttons)); + /// + /// All values of the enum. + /// + public static readonly Keys[] AllKeys = (Keys[]) Enum.GetValues(typeof(Keys)); + #if FNA private const int MaximumGamePadCount = 4; #else @@ -257,7 +265,7 @@ namespace MLEM.Input { if (GamePad.GetCapabilities((PlayerIndex) i).IsConnected) { if (active) { this.gamepads[i] = GamePad.GetState((PlayerIndex) i); - foreach (var button in EnumHelper.Buttons) { + foreach (var button in InputHandler.AllButtons) { if (this.IsGamepadButtonDown(button, i)) this.AccumulateDown(button, i); } @@ -270,7 +278,7 @@ namespace MLEM.Input { for (var i = 0; i < this.ConnectedGamepads; i++) { this.triggerGamepadButtonRepeat[i] = false; if (this.HandleGamepadRepeats) { - this.heldGamepadButtons[i] = EnumHelper.Buttons + this.heldGamepadButtons[i] = InputHandler.AllButtons .Where(b => this.IsGamepadButtonDown(b, i)) .OrderBy(b => this.GetDownTime(b, i)) .Cast().FirstOrDefault(); diff --git a/MLEM/Input/KeysExtensions.cs b/MLEM/Input/KeysExtensions.cs index f1f5131..9a5714d 100644 --- a/MLEM/Input/KeysExtensions.cs +++ b/MLEM/Input/KeysExtensions.cs @@ -1,7 +1,7 @@ +using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework.Input; -using MLEM.Misc; namespace MLEM.Input { /// @@ -12,7 +12,7 @@ namespace MLEM.Input { /// /// All enum values of /// - public static readonly ModifierKey[] ModifierKeys = EnumHelper.GetValues(); + public static readonly ModifierKey[] ModifierKeys = (ModifierKey[]) Enum.GetValues(typeof(ModifierKey)); private static readonly Dictionary KeysLookup = new Dictionary { {ModifierKey.Shift, new[] {Keys.LeftShift, Keys.RightShift}}, {ModifierKey.Control, new[] {Keys.LeftControl, Keys.RightControl}}, diff --git a/MLEM/Input/MouseExtensions.cs b/MLEM/Input/MouseExtensions.cs index b3d0c42..7276331 100644 --- a/MLEM/Input/MouseExtensions.cs +++ b/MLEM/Input/MouseExtensions.cs @@ -1,6 +1,5 @@ using System; using Microsoft.Xna.Framework.Input; -using MLEM.Misc; namespace MLEM.Input { /// @@ -11,7 +10,7 @@ namespace MLEM.Input { /// /// All enum values of /// - public static readonly MouseButton[] MouseButtons = EnumHelper.GetValues(); + public static readonly MouseButton[] MouseButtons = (MouseButton[]) Enum.GetValues(typeof(MouseButton)); /// /// Returns the of the given mouse button. diff --git a/MLEM/Misc/Direction2.cs b/MLEM/Misc/Direction2.cs index 111e6b7..6d139f7 100644 --- a/MLEM/Misc/Direction2.cs +++ b/MLEM/Misc/Direction2.cs @@ -71,7 +71,7 @@ namespace MLEM.Misc { /// /// All enum values /// - public static readonly Direction2[] All = EnumHelper.GetValues(); + public static readonly Direction2[] All = (Direction2[]) Enum.GetValues(typeof(Direction2)); /// /// The through directions /// diff --git a/MLEM/Misc/EnumHelper.cs b/MLEM/Misc/EnumHelper.cs index 435be1b..69c0dcd 100644 --- a/MLEM/Misc/EnumHelper.cs +++ b/MLEM/Misc/EnumHelper.cs @@ -6,15 +6,18 @@ namespace MLEM.Misc { /// /// A helper class that allows easier usage of values. /// + [Obsolete("EnumHelper has been moved into the DynamicEnums library: https://www.nuget.org/packages/DynamicEnums")] public static class EnumHelper { /// /// All values of the enum. /// + [Obsolete("This field has been moved to InputHandler.AllButtons")] public static readonly Buttons[] Buttons = EnumHelper.GetValues(); /// /// All values of the enum. /// + [Obsolete("This field has been moved to InputHandler.AllKeys")] public static readonly Keys[] Keys = EnumHelper.GetValues(); /// diff --git a/Sandbox/GameImpl.cs b/Sandbox/GameImpl.cs index 82d15d2..e72a77d 100644 --- a/Sandbox/GameImpl.cs +++ b/Sandbox/GameImpl.cs @@ -347,7 +347,7 @@ public class GameImpl : MlemGame { widthPanel.AddChild(new Paragraph(Anchor.AutoCenter, 100000, "Test String " + Math.Pow(10, i), true) { OnUpdated = (e, _) => { if (MlemGame.Input.IsPressed(Keys.A)) { - e.Anchor = (Anchor) (((int) e.Anchor + 1) % EnumHelper.GetValues().Length); + e.Anchor = (Anchor) (((int) e.Anchor + 1) % 14); Console.WriteLine(e.Anchor); } } diff --git a/Tests/DataTests.cs b/Tests/DataTests.cs index b8fdc95..d7032f7 100644 --- a/Tests/DataTests.cs +++ b/Tests/DataTests.cs @@ -1,8 +1,6 @@ using System; using System.IO; -using System.Numerics; using Microsoft.Xna.Framework; -using MLEM.Data; using MLEM.Data.Json; using MLEM.Misc; using Newtonsoft.Json; diff --git a/Tests/EnumTests.cs b/Tests/EnumTests.cs deleted file mode 100644 index 50430e0..0000000 --- a/Tests/EnumTests.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Linq; -using System.Numerics; -using MLEM.Data; -using MLEM.Misc; -using NUnit.Framework; - -namespace Tests; - -public class EnumTests { - - [Test] - public void TestRegularEnums() { - Assert.AreEqual( - new[] {TestEnum.One, TestEnum.Two, TestEnum.Eight, TestEnum.Sixteen, TestEnum.EightSixteen}, - EnumHelper.GetFlags(TestEnum.One | TestEnum.Sixteen | TestEnum.Eight | TestEnum.Two)); - - Assert.AreEqual( - new[] {TestEnum.One, TestEnum.Two, TestEnum.Eight, TestEnum.Sixteen}, - EnumHelper.GetUniqueFlags(TestEnum.One | TestEnum.Sixteen | TestEnum.Eight | TestEnum.Two)); - } - - [Test] - public void TestDynamicEnums() { - var flags = new TestDynamicEnum[100]; - for (var i = 0; i < flags.Length; i++) - flags[i] = DynamicEnum.AddFlag("Flag" + i); - var combined = DynamicEnum.Add("Combined", DynamicEnum.GetValue(DynamicEnum.Or(flags[7], flags[13]))); - - Assert.AreEqual(DynamicEnum.GetValue(flags[7]), BigInteger.One << 7); - Assert.AreEqual(DynamicEnum.GetEnumValue(BigInteger.One << 75), flags[75]); - - Assert.AreEqual(DynamicEnum.GetValue(DynamicEnum.Or(flags[2], flags[17])), BigInteger.One << 2 | BigInteger.One << 17); - Assert.AreEqual(DynamicEnum.GetValue(DynamicEnum.And(flags[2], flags[3])), BigInteger.Zero); - Assert.AreEqual(DynamicEnum.And(DynamicEnum.Or(flags[24], flags[52]), DynamicEnum.Or(flags[52], flags[75])), flags[52]); - Assert.AreEqual(DynamicEnum.Xor(DynamicEnum.Or(flags[85], flags[73]), flags[73]), flags[85]); - Assert.AreEqual(DynamicEnum.Xor(DynamicEnum.Or(flags[85], DynamicEnum.Or(flags[73], flags[12])), flags[73]), DynamicEnum.Or(flags[85], flags[12])); - Assert.AreEqual(DynamicEnum.GetValue(DynamicEnum.Neg(flags[74])), ~(BigInteger.One << 74)); - - Assert.AreEqual(DynamicEnum.Or(flags[24], flags[52]).HasFlag(flags[24]), true); - Assert.AreEqual(DynamicEnum.Or(flags[24], flags[52]).HasAnyFlag(flags[24]), true); - Assert.AreEqual(DynamicEnum.Or(flags[24], flags[52]).HasFlag(DynamicEnum.Or(flags[24], flags[26])), false); - Assert.AreEqual(DynamicEnum.Or(flags[24], flags[52]).HasAnyFlag(DynamicEnum.Or(flags[24], flags[26])), true); - - Assert.AreEqual(DynamicEnum.Parse("Flag24"), flags[24]); - Assert.AreEqual(DynamicEnum.Parse("Flag24 | Flag43"), DynamicEnum.Or(flags[24], flags[43])); - Assert.AreEqual(flags[24].ToString(), "Flag24"); - Assert.AreEqual(DynamicEnum.Or(flags[24], flags[43]).ToString(), "Flag24 | Flag43"); - - Assert.True(DynamicEnum.IsDefined(flags[27])); - Assert.True(DynamicEnum.IsDefined(combined)); - Assert.False(DynamicEnum.IsDefined(DynamicEnum.Or(flags[17], flags[49]))); - Assert.False(DynamicEnum.IsDefined(DynamicEnum.Or(combined, flags[49]))); - - Assert.AreEqual( - new[] {flags[0], flags[7], flags[13], combined}, - DynamicEnum.GetFlags(DynamicEnum.Or(DynamicEnum.Or(flags[0], flags[13]), flags[7]))); - - Assert.AreEqual( - new[] {flags[0], flags[7], flags[13]}, - DynamicEnum.GetUniqueFlags(DynamicEnum.Or(DynamicEnum.Or(flags[0], flags[13]), flags[7]))); - } - - [Flags] - private enum TestEnum { - - One = 1, - Two = 2, - Eight = 8, - Sixteen = 16, - EightSixteen = TestEnum.Eight | TestEnum.Sixteen, - ThirtyTwo = 32, - OneTwentyEight = 128, - OneTwentyEightTwoOne = TestEnum.OneTwentyEight | TestEnum.Two | TestEnum.One - - } - - private class TestDynamicEnum : DynamicEnum { - - public TestDynamicEnum(string name, BigInteger value) : base(name, value) {} - - } - -}