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