4 #include <GL/freeglut.h>
7 #define KEYST_SZ 65536 / 32
11 static void reshape(int x, int y);
12 static void keydown(unsigned char key, int x, int y);
13 static void keyup(unsigned char key, int x, int y);
14 static void skeydown(int key, int x, int y);
15 static void skeyup(int key, int x, int y);
16 static void mouse(int bn, int st, int x, int y);
17 static void motion(int x, int y);
18 static void wheel(int wheel, int dir, int x, int y);
20 static long prev_time;
21 static uint32_t keystate[KEYST_SZ];
22 static bool bnstate[16];
23 static unsigned int modkeys;
25 int main(int argc, char **argv)
27 glutInit(&argc, argv);
28 glutInitWindowSize(1024, 600);
29 glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_SRGB | GLUT_MULTISAMPLE);
30 glutCreateWindow("ludum dare 42");
32 glutDisplayFunc(display);
34 glutReshapeFunc(reshape);
35 glutKeyboardFunc(keydown);
36 glutKeyboardUpFunc(keyup);
37 glutSpecialFunc(skeydown);
38 glutSpecialUpFunc(skeyup);
40 glutMotionFunc(motion);
41 glutPassiveMotionFunc(motion);
42 glutMouseWheelFunc(wheel);
49 prev_time = glutGet(GLUT_ELAPSED_TIME);
60 bool game_keystate(int key)
64 return keystate[idx] & (1 << bit);
67 bool game_bnstate(int bn)
72 unsigned int game_modkeys()
79 frame_time = glutGet(GLUT_ELAPSED_TIME);
80 frame_dt = (frame_time - prev_time) / 1000.0f;
91 static void reshape(int x, int y)
93 glViewport(0, 0, x, y);
96 win_aspect = (float)x / (float)y;
101 static void keydown(unsigned char key, int x, int y)
103 modkeys = glutGetModifiers();
104 keystate[key / 32] |= (1 << (key % 32));
105 game_keyboard(key, true);
108 static void keyup(unsigned char key, int x, int y)
110 modkeys = glutGetModifiers();
111 keystate[key / 32] &= ~(1 << (key % 32));
112 game_keyboard(key, false);
115 static int conv_skey(int key)
117 if(key >= GLUT_KEY_F1 && key <= GLUT_KEY_F12) {
118 return KEY_F1 + (key - GLUT_KEY_F1);
130 case GLUT_KEY_PAGE_UP:
132 case GLUT_KEY_PAGE_DOWN:
138 case GLUT_KEY_INSERT:
147 static void skeydown(int key, int x, int y)
149 modkeys = glutGetModifiers();
150 keystate[key / 32] |= (1 << (key % 32));
151 game_keyboard(conv_skey(key), true);
154 static void skeyup(int key, int x, int y)
156 modkeys = glutGetModifiers();
157 keystate[key / 32] &= ~(1 << (key % 32));
158 game_keyboard(conv_skey(key), false);
161 static void mouse(int bn, int st, int x, int y)
163 int idx = bn - GLUT_LEFT_BUTTON;
164 bool pressed = st == GLUT_DOWN;
166 modkeys = glutGetModifiers();
171 } else if(idx == 4) {
177 bnstate[idx] = pressed;
179 game_mbutton(idx, pressed, x, y);
182 static void motion(int x, int y)
187 static void wheel(int wheel, int dir, int x, int y)
189 game_mwheel(dir, x, y);