Input.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "Input.hpp"
  2. Input::Input(const Input& other): _type(other._type)
  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)
  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)
  18. {
  19. _event.type = sf::Event::EventType::MouseButtonPressed;
  20. _event.mouseButton.button = button;
  21. }
  22. bool Input::test() const
  23. {
  24. switch(_event.type)
  25. {
  26. case sf::Event::EventType::KeyPressed:
  27. if(_type & Type::Pressed)
  28. return sf::Keyboard::isKeyPressed(_event.key.code);
  29. break;
  30. case sf::Event::EventType::MouseButtonPressed:
  31. if(_type & Type::Pressed)
  32. return sf::Mouse::isButtonPressed(_event.mouseButton.button);
  33. break;
  34. default:
  35. break;
  36. }
  37. return false;
  38. }
  39. bool Input::operator==(const sf::Event& event) const
  40. {
  41. switch(event.type)
  42. {
  43. case sf::Event::EventType::KeyPressed:
  44. if(_type & Type::Pressed and _event.type == sf::Event::EventType::KeyPressed)
  45. return event.key.code == _event.key.code;
  46. break;
  47. case sf::Event::EventType::KeyReleased:
  48. if(_type & Type::Released and _event.type == sf::Event::EventType::KeyPressed)
  49. return event.key.code == _event.key.code;
  50. break;
  51. case sf::Event::EventType::MouseButtonPressed:
  52. if(_type & Type::Pressed and _event.type == sf::Event::EventType::MouseButtonPressed)
  53. return event.mouseButton.button == _event.mouseButton.button;
  54. break;
  55. case sf::Event::EventType::MouseButtonReleased:
  56. if(_type & Type::Released and _event.type == sf::Event::EventType::MouseButtonPressed)
  57. return event.mouseButton.button == _event.mouseButton.button;
  58. break;
  59. default:
  60. break;
  61. }
  62. return false;
  63. }
  64. bool Input::operator==(const Input& other) const
  65. {
  66. return _type == other._type and other == _event;
  67. }