1 module grape.input; 2 3 import derelict.sdl2.sdl; 4 import std.stdio; 5 import grape.event; 6 public import grape.keyboard; 7 8 /** 9 * ユーザーの入力を管理するクラス 10 * 11 * キーボード、ジョイパッド、マウス等のイベントは全てこのクラスが管理します。 12 */ 13 class Input { 14 public: 15 /** 16 * 入力をpollし、実行 17 * 18 * 毎フレーム呼ぶことが推奨されます。 19 */ 20 static void poll() { 21 while (Event.is_happening) { 22 switch (Event.type) { 23 case KeyDown: 24 if (Event.scancode in keyMap) { 25 keyMap[Event.scancode](); 26 } 27 break; 28 case JoyAxisMotion: 29 writeln("motion"); 30 if (Event.axis in joyAxisMap) { 31 joyAxisMap[Event.axis](); 32 } 33 break; 34 case JoyButtonDown: 35 writeln("down"); 36 if (Event.button in joyButtonMap) { 37 joyButtonMap[Event.button](); 38 } 39 break; 40 case JoyHatMotion: 41 // joyHatMap(); 42 break; 43 default: break; 44 } 45 } 46 } 47 48 static void key_down(in int key, in void delegate() callback) { 49 keyMap[key] = callback; 50 } 51 52 static void axis_move(in int num, in void delegate() callback) { 53 joyAxisMap[num] = callback; 54 } 55 56 static void button_down(in int num, in void delegate() callback) { 57 joyButtonMap[num] = callback; 58 } 59 60 static void hat_down() { 61 62 } 63 64 private: 65 static void delegate()[int] keyMap; 66 static void delegate()[int] joyAxisMap; 67 static void delegate()[int] joyButtonMap; 68 static void delegate() joyHatMap; 69 } 70