Input.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "Input.hpp"
  2. Input::Input(const Input& other): _type(other._type), _positive(other._positive)
  3. {
  4. std::memcpy(&_event, &other._event, sizeof(sf::Event));
  5. }
  6. Input& Input::operator=(const Input& other)
  7. {
  8. std::memcpy(&_event, &other._event, sizeof(sf::Event));
  9. _type = other._type;
  10. return *this;
  11. }
  12. Input::Input(const sf::Keyboard::Key& key, int type): _type(type), _positive(true)
  13. {
  14. _event.type = sf::Event::EventType::KeyPressed;
  15. _event.key.code = key;
  16. }
  17. Input::Input(const sf::Mouse::Button& button, int type): _type(type), _positive(true)
  18. {
  19. _event.type = sf::Event::EventType::MouseButtonPressed;
  20. _event.mouseButton.button = button;
  21. }
  22. Input::Input(const int joystickButton, int type): _type(type), _positive(true)
  23. {
  24. _event.type = sf::Event::EventType::JoystickButtonPressed;
  25. _event.joystickButton.button = joystickButton;
  26. }
  27. Input::Input(const sf::Joystick::Axis& axis, bool positive): _type(Type::RealTime|Type::Pressed), _positive(positive)
  28. {
  29. _event.type = sf::Event::EventType::JoystickMoved;
  30. _event.joystickMove.joystickId = 0;
  31. _event.joystickMove.axis = axis;
  32. }
  33. float Input::test() const
  34. {
  35. switch(_event.type)
  36. {
  37. case sf::Event::EventType::KeyPressed:
  38. if(_type & Type::Pressed)
  39. return sf::Keyboard::isKeyPressed(_event.key.code) ? 1.f : 0.f;
  40. break;
  41. case sf::Event::EventType::MouseButtonPressed:
  42. if(_type & Type::Pressed)
  43. return sf::Mouse::isButtonPressed(_event.mouseButton.button) ? 1.f : 0.f;
  44. break;
  45. case sf::Event::EventType::JoystickButtonPressed:
  46. if(_type & Type::Pressed)
  47. return sf::Joystick::isButtonPressed(0, _event.joystickButton.button) ? 1.f : 0.f;
  48. break;
  49. case sf::Event::EventType::JoystickMoved:
  50. if(_type & Type::Pressed)
  51. {
  52. float f = sf::Joystick::getAxisPosition(_event.joystickMove.joystickId, _event.joystickMove.axis) / 100.f;
  53. if(!_positive)
  54. f = -f;
  55. return f > 0.f ? f : 0.f;
  56. }
  57. break;
  58. default:
  59. break;
  60. }
  61. return 0.f;
  62. }
  63. bool Input::operator==(const sf::Event& event) const
  64. {
  65. switch(event.type)
  66. {
  67. case sf::Event::EventType::KeyPressed:
  68. if(_type & Type::Pressed && _event.type == sf::Event::EventType::KeyPressed)
  69. return event.key.code == _event.key.code;
  70. break;
  71. case sf::Event::EventType::KeyReleased:
  72. if(_type & Type::Released && _event.type == sf::Event::EventType::KeyPressed)
  73. return event.key.code == _event.key.code;
  74. break;
  75. case sf::Event::EventType::MouseButtonPressed:
  76. if(_type & Type::Pressed && _event.type == sf::Event::EventType::MouseButtonPressed)
  77. return event.mouseButton.button == _event.mouseButton.button;
  78. break;
  79. case sf::Event::EventType::MouseButtonReleased:
  80. if(_type & Type::Released && _event.type == sf::Event::EventType::MouseButtonPressed)
  81. return event.mouseButton.button == _event.mouseButton.button;
  82. break;
  83. case sf::Event::EventType::JoystickButtonPressed:
  84. if(_type & Type::Pressed && _event.type == sf::Event::EventType::JoystickButtonPressed)
  85. return event.joystickButton.button == _event.joystickButton.button;
  86. break;
  87. case sf::Event::EventType::JoystickMoved:
  88. if(_type & Type::Pressed && _event.type == sf::Event::EventType::JoystickMoved)
  89. return event.joystickMove.position == _event.joystickMove.position;
  90. break;
  91. default:
  92. break;
  93. }
  94. return false;
  95. }
  96. bool Input::operator==(const Input& other) const
  97. {
  98. return _type == other._type and other == _event;
  99. }