0965147a669f83b2fe576e238c28b13847813e0e
[vrlugburz] / src / main.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "miniglut.h"
4 #include "opengl.h"
5 #include "game.h"
6
7 static void display(void);
8 static void idle(void);
9 static void keypress(unsigned char key, int x, int y);
10 static void keyrelease(unsigned char key, int x, int y);
11 static void skeypress(int key, int x, int y);
12 static void skeyrelease(int key, int x, int y);
13 static void mbutton(int bn, int st, int x, int y);
14 static int skey_translate(int key);
15
16 static int quit;
17 static long start_time;
18
19 int main(int argc, char **argv)
20 {
21         glutInit(&argc, argv);
22         glutInitWindowSize(1280, 720);
23         glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_SRGB);
24         glutCreateWindow("lugburz VR");
25
26         glutDisplayFunc(display);
27         glutIdleFunc(idle);
28         glutReshapeFunc(game_reshape);
29         glutKeyboardFunc(keypress);
30         glutKeyboardUpFunc(keyrelease);
31         glutSpecialFunc(skeypress);
32         glutSpecialUpFunc(skeyrelease);
33         glutMouseFunc(mbutton);
34         glutMotionFunc(game_mmotion);
35         glutPassiveMotionFunc(game_mmotion);
36
37         if(game_init() == -1) {
38                 return 1;
39         }
40
41         start_time = glutGet(GLUT_ELAPSED_TIME);
42         while(!quit) {
43                 glutMainLoopEvent();
44         }
45
46         game_shutdown();
47         return 0;
48 }
49
50 void game_quit(void)
51 {
52         quit = 1;
53 }
54
55 void game_swap_buffers(void)
56 {
57         glutSwapBuffers();
58 }
59
60 static void display(void)
61 {
62         time_msec = glutGet(GLUT_ELAPSED_TIME) - start_time;
63         game_display();
64 }
65
66 static void idle(void)
67 {
68         glutPostRedisplay();
69 }
70
71 static void keypress(unsigned char key, int x, int y)
72 {
73         game_keyboard(key, 1);
74 }
75
76 static void keyrelease(unsigned char key, int x, int y)
77 {
78         game_keyboard(key, 0);
79 }
80
81 static void skeypress(int key, int x, int y)
82 {
83         if((key = skey_translate(key)) >= 0) {
84                 game_keyboard(key, 1);
85         }
86 }
87
88 static void skeyrelease(int key, int x, int y)
89 {
90         if((key = skey_translate(key)) >= 0) {
91                 game_keyboard(key, 0);
92         }
93 }
94
95 static void mbutton(int bn, int st, int x, int y)
96 {
97         int bidx = bn - GLUT_LEFT_BUTTON;
98         int press = st == GLUT_DOWN;
99         game_mbutton(bidx, press, x, y);
100 }
101
102 static int skey_translate(int key)
103 {
104         switch(key) {
105         case GLUT_KEY_LEFT:
106                 return KEY_LEFT;
107         case GLUT_KEY_RIGHT:
108                 return KEY_RIGHT;
109         case GLUT_KEY_UP:
110                 return KEY_UP;
111         case GLUT_KEY_DOWN:
112                 return KEY_DOWN;
113         case GLUT_KEY_PAGE_UP:
114                 return KEY_PGUP;
115         case GLUT_KEY_PAGE_DOWN:
116                 return KEY_PGDOWN;
117         default:
118                 return -1;
119         }
120 }