MouseButtons.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include <GLFW/glfw3.h>
  2. #include "client/input/MouseButtons.h"
  3. MouseButtons::MouseButton::MouseButton() : down(false), shouldRelease(false), downTime(0) {
  4. }
  5. bool MouseButtons::MouseButton::isDown() const {
  6. return down;
  7. }
  8. bool MouseButtons::MouseButton::isReleased() const {
  9. return shouldRelease;
  10. }
  11. u32 MouseButtons::MouseButton::getDownTime() const {
  12. return downTime;
  13. }
  14. std::ostream& operator<<(std::ostream& os, const MouseButtons::MouseButton& m) {
  15. os << "Mouse(down: " << m.isDown() << ", release: " << m.isReleased() <<
  16. ", time: " << m.getDownTime() << ")";
  17. return os;
  18. }
  19. MouseButtons::MouseButtons() : primary(buttons[0]), secondary(buttons[1]), middle(buttons[2]), oldX(0), oldY(0), x(0), y(0) {
  20. buttons[0].glfwButton = GLFW_MOUSE_BUTTON_1;
  21. buttons[1].glfwButton = GLFW_MOUSE_BUTTON_2;
  22. buttons[2].glfwButton = GLFW_MOUSE_BUTTON_3;
  23. }
  24. double MouseButtons::getOldX() const {
  25. return oldX;
  26. }
  27. double MouseButtons::getOldY() const {
  28. return oldY;
  29. }
  30. double MouseButtons::getX() const {
  31. return x;
  32. }
  33. double MouseButtons::getY() const {
  34. return y;
  35. }
  36. void MouseButtons::release(int button) {
  37. for(MouseButton& k : buttons) {
  38. if(k.glfwButton == button) {
  39. k.shouldRelease = true;
  40. }
  41. }
  42. }
  43. void MouseButtons::press(int button) {
  44. for(MouseButton& k : buttons) {
  45. if(k.glfwButton == button) {
  46. k.down = true;
  47. k.shouldRelease = false;
  48. }
  49. }
  50. }
  51. void MouseButtons::move(double x, double y) {
  52. MouseButtons::x = x;
  53. MouseButtons::y = y;
  54. }
  55. void MouseButtons::tick() {
  56. for(MouseButton& k : buttons) {
  57. k.downTime += k.down;
  58. k.down = k.down && !k.shouldRelease;
  59. k.downTime *= !k.shouldRelease;
  60. k.shouldRelease = false;
  61. }
  62. }
  63. void MouseButtons::postTick() {
  64. oldX = x;
  65. oldY = y;
  66. }