using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using RhythmBullet.Utilities.Input; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RhythmBullet.Utilities.Input { public static class InputUtilities { public static List InputListeners; static KeyboardState keyboardState; static MouseState mouseState; static InputUtilities() { InputListeners = new List(); } public static void Update() { KeyboardState updatedKeyboardState = Keyboard.GetState(); MouseState updatedMouseState = Mouse.GetState(); bool disableKeyboard = false; bool disableMouse = false; foreach (IInputListener inputListener in InputListeners) { if (!disableKeyboard && keyboardState != updatedKeyboardState) { disableKeyboard = inputListener.KeyboardStateChanged(updatedKeyboardState); } if (!disableMouse && mouseState != updatedMouseState) { disableMouse = inputListener.MouseStateChanged(updatedMouseState); } if (disableKeyboard && disableMouse) { break; } } UpdateStates(); } public static bool MouseClicked() { if (mouseState.LeftButton == ButtonState.Pressed) { return Mouse.GetState().LeftButton != ButtonState.Pressed; } return false; } private static void UpdateStates() { keyboardState = Keyboard.GetState(); mouseState = Mouse.GetState(); } public static bool MouseWithinBoundries(Rectangle bounds) { MouseState mouseState = Mouse.GetState(); if (mouseState.X >= bounds.X && mouseState.X <= (bounds.X + bounds.Width) && mouseState.Y >= bounds.Y && mouseState.Y <= (bounds.Y + bounds.Height)) { return true; } return false; } } }