1
0

input_system.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <application/context.h>
  2. #include <component/input_listener_component.h>
  3. #include <entt/entity/registry.hpp>
  4. #include <system/input_system.h>
  5. namespace testbed {
  6. namespace internal {
  7. static void update_listeners(entt::registry &registry, input_listener_component::type command) {
  8. for([[maybe_unused]] auto [entt, elem]: registry.view<input_listener_component>().each()) {
  9. elem.command = command;
  10. }
  11. }
  12. } // namespace internal
  13. void input_system(entt::registry &registry, const SDL_Event &event, bool &quit) {
  14. switch(event.type) {
  15. case SDL_EVENT_QUIT:
  16. quit = true;
  17. break;
  18. case SDL_EVENT_KEY_DOWN:
  19. switch(event.key.key) {
  20. case SDLK_ESCAPE:
  21. quit = true;
  22. break;
  23. case SDLK_UP:
  24. internal::update_listeners(registry, input_listener_component::type::UP);
  25. break;
  26. case SDLK_DOWN:
  27. internal::update_listeners(registry, input_listener_component::type::DOWN);
  28. break;
  29. case SDLK_LEFT:
  30. internal::update_listeners(registry, input_listener_component::type::LEFT);
  31. break;
  32. case SDLK_RIGHT:
  33. internal::update_listeners(registry, input_listener_component::type::RIGHT);
  34. break;
  35. }
  36. break;
  37. }
  38. }
  39. } // namespace testbed