1 module d2d.toolkit.input.keyboard; 2 3 import d2d.window.windowevent; 4 5 struct Keyboard 6 { 7 @disable this(this); 8 9 bool[256] keys; 10 bool[uint] extendedKeys; 11 12 static Keyboard instance; 13 14 Keyboard dup() 15 { 16 return Keyboard(keys, extendedKeys.dup); 17 } 18 19 bool isPressed(int key) 20 { 21 if (key < keys.length) 22 return keys[key]; 23 else if (auto v = key in extendedKeys) 24 return *v; 25 else 26 return false; 27 } 28 29 void keyDown(int key) 30 { 31 if (key < keys.length) 32 keys[key] = true; 33 else 34 extendedKeys[key] = true; 35 } 36 37 void keyUp(int key) 38 { 39 if (key < keys.length) 40 keys[key] = false; 41 else 42 extendedKeys[key] = false; 43 } 44 45 void handle(Event event) 46 { 47 switch (event.type) 48 { 49 case Event.Type.KeyPressed: 50 keyDown(event.key); 51 break; 52 case Event.Type.KeyReleased: 53 keyUp(event.key); 54 break; 55 default: 56 break; 57 } 58 } 59 }