瀏覽代碼

Simplify MouseButtons

Jean-David Moisan 6 年之前
父節點
當前提交
2733762386
共有 4 個文件被更改,包括 55 次插入14 次删除
  1. 1 1
      Source/ConditionComposite.cs
  2. 16 11
      Source/ConditionMouse.cs
  3. 2 2
      Source/ConditionSet.cs
  4. 36 0
      Source/InputHelper.cs

+ 1 - 1
Source/ConditionComposite.cs

@@ -42,7 +42,7 @@ namespace Apos.Input {
         /// </summary>
         /// <param name="button">A mouse button that will have it's own set.</param>
         /// <returns>Returns the set for easy function chaining.</returns>
-        public ConditionSet AddSet(Func<MouseState, ButtonState> button) {
+        public ConditionSet AddSet(InputHelper.MouseButton button) {
             ConditionSet newSet = new ConditionSet().AddNeed(button);
             AddSet(newSet);
             return newSet;

+ 16 - 11
Source/ConditionMouse.cs

@@ -11,7 +11,7 @@ namespace Apos.Input {
         // Group: Constructors
 
         /// <param name="needButton">The button to operate on.</param>
-        public ConditionMouse(Func<MouseState, ButtonState> needButton) {
+        public ConditionMouse(InputHelper.MouseButton needButton) {
             _needButton = needButton;
         }
 
@@ -37,24 +37,29 @@ namespace Apos.Input {
         // Group: Static Functions
 
         /// <returns>Returns true when a button was not pressed and is now pressed.</returns>
-        public static bool Pressed(Func<MouseState, ButtonState> button) {
-            return button(InputHelper.NewMouse) == ButtonState.Pressed && button(InputHelper.OldMouse) == ButtonState.Released;
+        public static bool Pressed(InputHelper.MouseButton button) {
+            return InputHelper.MouseButtons[button](InputHelper.NewMouse) == ButtonState.Pressed &&
+                   InputHelper.MouseButtons[button](InputHelper.OldMouse) == ButtonState.Released;
         }
         /// <returns>Returns true when a button is now pressed.</returns>
-        public static bool Held(Func<MouseState, ButtonState> button) {
-            return button(InputHelper.NewMouse) == ButtonState.Pressed;
+        public static bool Held(InputHelper.MouseButton button) {
+            return InputHelper.MouseButtons[button](InputHelper.NewMouse) == ButtonState.Pressed;
         }
         /// <returns>Returns true when a button was pressed and is now pressed.</returns>
-        public static bool HeldOnly(Func<MouseState, ButtonState> button) {
-            return button(InputHelper.NewMouse) == ButtonState.Pressed && button(InputHelper.OldMouse) == ButtonState.Pressed;
+        public static bool HeldOnly(InputHelper.MouseButton button) {
+            return InputHelper.MouseButtons[button](InputHelper.NewMouse) == ButtonState.Pressed &&
+                   InputHelper.MouseButtons[button](InputHelper.OldMouse) == ButtonState.Pressed;
         }
         /// <returns>Returns true when a button was pressed and is now not pressed.</returns>
-        public static bool Released(Func<MouseState, ButtonState> button) {
-            return button(InputHelper.NewMouse) == ButtonState.Released && button(InputHelper.OldMouse) == ButtonState.Pressed;
+        public static bool Released(InputHelper.MouseButton button) {
+            return InputHelper.MouseButtons[button](InputHelper.NewMouse) == ButtonState.Released &&
+                   InputHelper.MouseButtons[button](InputHelper.OldMouse) == ButtonState.Pressed;
         }
         /// <returns>Returns true when the mouse is within the game window.</returns>
         public static bool IsMouseValid(bool IsActive) {
-            if (IsActive && InputHelper.NewMouse.X >= 0 && InputHelper.NewMouse.X <= InputHelper.WindowWidth && InputHelper.NewMouse.Y >= 0 && InputHelper.NewMouse.Y <= InputHelper.WindowHeight) {
+            if (IsActive &&
+                InputHelper.NewMouse.X >= 0 && InputHelper.NewMouse.X <= InputHelper.WindowWidth &&
+                InputHelper.NewMouse.Y >= 0 && InputHelper.NewMouse.Y <= InputHelper.WindowHeight) {
                 return true;
             }
             return false;
@@ -65,6 +70,6 @@ namespace Apos.Input {
         /// <summary>
         /// The button that will be checked.
         /// </summary>
-        private Func<MouseState, ButtonState> _needButton;
+        private InputHelper.MouseButton _needButton;
     }
 }

+ 2 - 2
Source/ConditionSet.cs

@@ -43,7 +43,7 @@ namespace Apos.Input {
         /// </summary>
         /// <param name="button">Adds a new needed mouse button.</param>
         /// <returns>Returns itself for easy function chaining.</returns>
-        public ConditionSet AddNeed(Func<MouseState, ButtonState> button) {
+        public ConditionSet AddNeed(InputHelper.MouseButton button) {
             return AddNeed(new ConditionMouse(button));
         }
         /// <summary>
@@ -73,7 +73,7 @@ namespace Apos.Input {
         /// </summary>
         /// <param name="button">Adds a mouse button that must not be pressed.</param>
         /// <returns>Returns itself for easy function chaining.</returns>
-        public ConditionSet AddNot(Func<MouseState, ButtonState> button) {
+        public ConditionSet AddNot(InputHelper.MouseButton button) {
             return AddNot(new ConditionMouse(button));
         }
         /// <summary>

+ 36 - 0
Source/InputHelper.cs

@@ -14,6 +14,31 @@ namespace Apos.Input {
 
         // Group: Public Variables
 
+        /// <summary>
+        /// Available mouse buttons.
+        /// </summary>
+        public enum MouseButton {
+            /// <summary>
+            /// Left mouse button.
+            /// </summary>
+            LeftButton,
+            /// <summary>
+            /// Middle mouse button.
+            /// </summary>
+            MiddleButton,
+            /// <summary>
+            /// Right mouse button.
+            /// </summary>
+            RightButton,
+            /// <summary>
+            /// XButton1 mouse button.
+            /// </summary>
+            XButton1,
+            /// <summary>
+            /// XButton2 mouse button.
+            /// </summary>
+            XButton2
+        }
         /// <value>Pass your game class here.</value>
         public static Game Game {
             get;
@@ -75,6 +100,10 @@ namespace Apos.Input {
         /// Useful for handling text inputs from any keyboard layouts. This is useful when coding textboxes.
         /// </summary>
         public static List<KeyCharacter> TextEvents => _textEvents;
+        /// <summary>
+        /// Maps a MouseButton to a function that can extract a specific ButtonState from a MouseState.
+        /// </summary>
+        public static Dictionary<MouseButton, Func<MouseState, ButtonState>> MouseButtons => _mouseButtons;
 
         // Group: Public Functions
 
@@ -202,5 +231,12 @@ namespace Apos.Input {
         /// Useful for handling text inputs from any keyboard layouts. This is useful when coding textboxes.
         /// </summary>
         private static List<KeyCharacter> _textEvents = new List<KeyCharacter>();
+        private static Dictionary<MouseButton, Func<MouseState, ButtonState>> _mouseButtons = new Dictionary<MouseButton, Func<MouseState, ButtonState>> {
+            {MouseButton.LeftButton, s => s.LeftButton},
+            {MouseButton.MiddleButton, s => s.MiddleButton},
+            {MouseButton.RightButton, s => s.RightButton},
+            {MouseButton.XButton1, s => s.XButton1},
+            {MouseButton.XButton2, s => s.XButton2},
+        };
     }
 }