Input.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "Input.h"
  2. #include <libndls.h>
  3. #define INPUT WalrusRPG::Input
  4. using WalrusRPG::Input::Key;
  5. using WalrusRPG::Input::KeyState;
  6. struct InputMap
  7. {
  8. Key key;
  9. t_key key_code;
  10. };
  11. static KeyState key_states[Key::K_SIZE] = {KeyState::KS_RELEASED};
  12. static InputMap key_map[] = {
  13. {Key::K_A, KEY_NSPIRE_CTRL},
  14. {Key::K_B, KEY_NSPIRE_SHIFT},
  15. {Key::K_L, KEY_NSPIRE_TAB},
  16. {Key::K_R, KEY_NSPIRE_MENU},
  17. {Key::K_UP, KEY_NSPIRE_8},
  18. {Key::K_DOWN, KEY_NSPIRE_5},
  19. {Key::K_LEFT, KEY_NSPIRE_4},
  20. {Key::K_RIGHT, KEY_NSPIRE_6},
  21. {Key::K_START, KEY_NSPIRE_HOME},
  22. {Key::K_SELECT, KEY_NSPIRE_ESC},
  23. };
  24. void INPUT::key_poll()
  25. {
  26. for(unsigned i = 0; i < K_SIZE; i++)
  27. {
  28. bool current_key_state = isKeyPressed(key_map[i].key_code);
  29. KeyState previous_key_state = key_states[i];
  30. KeyState resulting_key_state = KS_RELEASED;
  31. if(current_key_state)
  32. {
  33. if(previous_key_state == KS_RELEASED || previous_key_state == KS_JUST_RELEASED)
  34. resulting_key_state = KS_JUST_PRESSED;
  35. else if(previous_key_state == KS_JUST_PRESSED || previous_key_state == KS_PRESSED)
  36. resulting_key_state = KS_PRESSED;
  37. }
  38. else
  39. {
  40. if(previous_key_state == KS_PRESSED || previous_key_state == KS_JUST_PRESSED)
  41. resulting_key_state = KS_JUST_RELEASED;
  42. else if(previous_key_state == KS_JUST_RELEASED || previous_key_state == KS_RELEASED)
  43. resulting_key_state = KS_RELEASED;
  44. }
  45. key_states[i] = resulting_key_state;
  46. }
  47. }
  48. bool INPUT::key_pressed(Key key)
  49. {
  50. return key_states[key] == KS_JUST_PRESSED;
  51. }
  52. bool INPUT::key_released(Key key)
  53. {
  54. return key_states[key] == KS_JUST_RELEASED;
  55. }
  56. bool INPUT::key_down(Key key)
  57. {
  58. return key_states[key] == KS_JUST_PRESSED || key_states[key] == KS_PRESSED;
  59. }
  60. bool INPUT::key_up(Key key)
  61. {
  62. return key_states[key] == KS_JUST_RELEASED || key_states[key] == KS_RELEASED;
  63. }