InputButton.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Microsoft.Xna.Framework.Input;
  2. using System;
  3. using System.Collections.Generic;
  4. namespace OpenVIII
  5. {
  6. [Serializable]
  7. public class InputButton
  8. {
  9. #region Fields
  10. public List<InputButton> Combo;
  11. public GamePadButtons GamePadButton;
  12. public double HoldMS;
  13. public Keys Key;
  14. public MouseButtons MouseButton;
  15. public ButtonTrigger Trigger = ButtonTrigger.OnPress;
  16. #endregion Fields
  17. #region Methods
  18. public InputButton Clone()
  19. {
  20. var i = (InputButton)MemberwiseClone();
  21. i.Combo = new List<InputButton>(Combo.Count);
  22. foreach (var item in Combo)
  23. {
  24. i.Combo.Add(item.Clone());
  25. }
  26. return i;
  27. }
  28. public override bool Equals(object obj)
  29. {
  30. var o = (InputButton)obj;
  31. if (o.Key == Key &&
  32. o.MouseButton == MouseButton &&
  33. o.GamePadButton == GamePadButton &&
  34. //(o.Trigger & Trigger)!=0 &&
  35. (o.Combo == null || o.Combo.Equals(Combo)))
  36. return true;
  37. return false;
  38. }
  39. public override int GetHashCode()
  40. {
  41. var hashCode = 37823841;
  42. hashCode = hashCode * -1521134295 + EqualityComparer<List<InputButton>>.Default.GetHashCode(Combo);
  43. hashCode = hashCode * -1521134295 + GamePadButton.GetHashCode();
  44. hashCode = hashCode * -1521134295 + Key.GetHashCode();
  45. hashCode = hashCode * -1521134295 + MouseButton.GetHashCode();
  46. return hashCode;
  47. }
  48. public override string ToString()
  49. {
  50. var s = "";
  51. if (Key != Keys.None)
  52. s = Key.ToString();
  53. if (GamePadButton != GamePadButtons.None)
  54. s = GamePadButton.ToString();
  55. if (MouseButton != MouseButtons.None)
  56. s = MouseButton.ToString();
  57. if (Combo != null)
  58. {
  59. foreach (var item in Combo)
  60. {
  61. s = $"{s}+{item}";
  62. }
  63. }
  64. return s.Replace('_',' ').Trim();
  65. }
  66. #endregion Methods
  67. }
  68. }