Key.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "Key.h"
  2. Key Key::keyArray[Key::NUMBER_OF_KEYS];
  3. int Key::mappingArray[Key::NUMBER_OF_KEYS];
  4. Key::Key()
  5. {
  6. }
  7. bool Key::isDown(int mapping)
  8. {
  9. return isInRange(mapping) && keyArray[mappingArray[mapping]].down;
  10. }
  11. bool Key::isReleased(int mapping)
  12. {
  13. return isInRange(mapping) && keyArray[mappingArray[mapping]].shouldRelease;
  14. }
  15. unsigned int Key::getDownTime(int mapping)
  16. {
  17. bool m = isInRange(mapping);
  18. return m * keyArray[mappingArray[mapping * m]].downTime;
  19. }
  20. void Key::resetDownTime(int mapping)
  21. {
  22. keyArray[mappingArray[mapping * isInRange(mapping)]].downTime = 0;
  23. }
  24. bool Key::map(int mapping, int key)
  25. {
  26. bool b = isInRange(mapping) && isInRange(key);
  27. mappingArray[mapping * b] = b * key;
  28. }
  29. bool Key::isInRange(int i)
  30. {
  31. return i >= 0 && i < NUMBER_OF_KEYS;
  32. }
  33. void Key::init()
  34. {
  35. for(int i = 0; i < NUMBER_OF_KEYS; i++)
  36. {
  37. mappingArray[i] = 0;
  38. }
  39. }
  40. void Key::tick()
  41. {
  42. for(int i = 0; i < NUMBER_OF_KEYS; i++)
  43. {
  44. keyArray[i].downTime += keyArray[i].down;
  45. keyArray[i].down = keyArray[i].down && !keyArray[i].shouldRelease;
  46. keyArray[i].downTime *= !keyArray[i].shouldRelease;
  47. keyArray[i].shouldRelease = false;
  48. }
  49. }
  50. bool Key::press(int key)
  51. {
  52. int index = isInRange(key) * key;
  53. keyArray[index].down = true;
  54. keyArray[index].shouldRelease = false;
  55. }
  56. bool Key::release(int key)
  57. {
  58. int index = isInRange(key) * key;
  59. keyArray[index].shouldRelease = true;
  60. }