main.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * Copyright (c) 2012-2015 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/taylor001/crown/blob/master/LICENSE
  4. */
  5. #include "main.h"
  6. #include "device.h"
  7. #include "os_event_queue.h"
  8. #include "input_manager.h"
  9. #include "input_device.h"
  10. #include "error.h"
  11. #include "vector3.h"
  12. #include <bgfx.h>
  13. namespace crown
  14. {
  15. bool process_events()
  16. {
  17. OsEvent event;
  18. bool exit = false;
  19. InputManager* im = device()->input_manager();
  20. while(next_event(event))
  21. {
  22. if (event.type == OsEvent::NONE) continue;
  23. switch (event.type)
  24. {
  25. case OsEvent::TOUCH:
  26. {
  27. const OsTouchEvent& ev = event.touch;
  28. switch (ev.type)
  29. {
  30. case OsTouchEvent::POINTER:
  31. im->touch()->set_button_state(ev.pointer_id, ev.pressed);
  32. break;
  33. case OsTouchEvent::MOVE:
  34. im->touch()->set_axis(ev.pointer_id, vector3(ev.x, ev.y, 0.0f));
  35. break;
  36. default:
  37. CE_FATAL("Unknown touch event type");
  38. break;
  39. }
  40. break;
  41. }
  42. case OsEvent::MOUSE:
  43. {
  44. const OsMouseEvent& ev = event.mouse;
  45. switch (ev.type)
  46. {
  47. case OsMouseEvent::BUTTON:
  48. im->mouse()->set_button_state(ev.button, ev.pressed);
  49. break;
  50. case OsMouseEvent::MOVE:
  51. im->mouse()->set_axis(0, vector3(ev.x, ev.y, 0.0f));
  52. break;
  53. case OsMouseEvent::WHEEL:
  54. im->mouse()->set_axis(1, vector3(ev.wheel, 0.0f, 0.0f));
  55. break;
  56. default:
  57. CE_FATAL("Unknown mouse event type");
  58. break;
  59. }
  60. break;
  61. }
  62. case OsEvent::KEYBOARD:
  63. {
  64. const OsKeyboardEvent& ev = event.keyboard;
  65. im->keyboard()->set_button_state(ev.button, ev.pressed);
  66. break;
  67. }
  68. case OsEvent::JOYPAD:
  69. {
  70. const OsJoypadEvent& ev = event.joypad;
  71. switch (ev.type)
  72. {
  73. case OsJoypadEvent::CONNECTED:
  74. im->joypad(ev.index)->set_connected(ev.connected);
  75. break;
  76. case OsJoypadEvent::BUTTON:
  77. im->joypad(ev.index)->set_button_state(ev.button, ev.pressed);
  78. break;
  79. case OsJoypadEvent::AXIS:
  80. im->joypad(ev.index)->set_axis(ev.button, vector3(ev.x, ev.y, ev.z));
  81. break;
  82. default:
  83. CE_FATAL("Unknown joypad event");
  84. break;
  85. }
  86. break;
  87. }
  88. case OsEvent::METRICS:
  89. {
  90. const OsMetricsEvent& ev = event.metrics;
  91. device()->update_resolution(ev.width, ev.height);
  92. bgfx::reset(ev.width, ev.height, BGFX_RESET_VSYNC);
  93. break;
  94. }
  95. case OsEvent::EXIT:
  96. {
  97. exit = true;
  98. break;
  99. }
  100. case OsEvent::PAUSE:
  101. {
  102. device()->pause();
  103. break;
  104. }
  105. case OsEvent::RESUME:
  106. {
  107. device()->unpause();
  108. break;
  109. }
  110. default:
  111. {
  112. CE_FATAL("Unknown Os Event");
  113. break;
  114. }
  115. }
  116. }
  117. return exit;
  118. }
  119. } // namespace crown