#include "Key.h" Key Key::keyArray[Key::NUMBER_OF_KEYS]; int Key::mappingArray[Key::NUMBER_OF_KEYS]; Key::Key() { } bool Key::isDown(int mapping) { return isInRange(mapping) && keyArray[mappingArray[mapping]].down; } bool Key::isReleased(int mapping) { return isInRange(mapping) && keyArray[mappingArray[mapping]].shouldRelease; } unsigned int Key::getDownTime(int mapping) { bool m = isInRange(mapping); return m * keyArray[mappingArray[mapping * m]].downTime; } void Key::resetDownTime(int mapping) { keyArray[mappingArray[mapping * isInRange(mapping)]].downTime = 0; } bool Key::map(int mapping, int key) { bool b = isInRange(mapping) && isInRange(key); mappingArray[mapping * b] = b * key; } bool Key::isInRange(int i) { return i >= 0 && i < NUMBER_OF_KEYS; } void Key::init() { for(int i = 0; i < NUMBER_OF_KEYS; i++) { mappingArray[i] = 0; } } void Key::tick() { for(int i = 0; i < NUMBER_OF_KEYS; i++) { keyArray[i].downTime += keyArray[i].down; keyArray[i].down = keyArray[i].down && !keyArray[i].shouldRelease; keyArray[i].downTime *= !keyArray[i].shouldRelease; keyArray[i].shouldRelease = false; } } bool Key::press(int key) { int index = isInRange(key) * key; keyArray[index].down = true; keyArray[index].shouldRelease = false; } bool Key::release(int key) { int index = isInRange(key) * key; keyArray[index].shouldRelease = true; }