mesh dump routines
[vrtris] / src / gamescr.c
1 #include "opengl.h"
2 #include "screen.h"
3 #include "cmesh.h"
4
5 static int init(void);
6 static void cleanup(void);
7 static void start(void);
8 static void stop(void);
9 static void update(float dt);
10 static void draw(void);
11 static void reshape(int x, int y);
12 static void keyboard(int key, int pressed);
13 static void mouse(int bn, int pressed, int x, int y);
14 static void motion(int x, int y);
15 static void wheel(int dir);
16
17 struct game_screen game_screen = {
18         "game",
19         1,      /* opaque */
20         0,      /* next */
21         init,
22         cleanup,
23         start,
24         stop,
25         update,
26         draw,
27         reshape,
28         keyboard,
29         mouse,
30         motion,
31         wheel
32 };
33
34 static struct cmesh *blkmesh;
35 static float cam_theta, cam_phi, cam_dist = 6;
36 static int bnstate[16];
37 static int prev_mx, prev_my;
38
39 static int init(void)
40 {
41         if(!(blkmesh = cmesh_alloc())) {
42                 return -1;
43         }
44         if(cmesh_load(blkmesh, "data/noisecube.obj") == -1) {
45                 fprintf(stderr, "failed to load block model\n");
46                 return -1;
47         }
48         cmesh_dump_obj(blkmesh, "dump.obj");
49         return 0;
50 }
51
52 static void cleanup(void)
53 {
54         cmesh_free(blkmesh);
55 }
56
57 static void start(void)
58 {
59 }
60
61 static void stop(void)
62 {
63 }
64
65 static void update(float dt)
66 {
67 }
68
69 static void draw(void)
70 {
71         glTranslatef(0, 0, -cam_dist);
72         glRotatef(cam_phi, 1, 0, 0);
73         glRotatef(cam_theta, 0, 1, 0);
74
75         cmesh_draw(blkmesh);
76 }
77
78 static void reshape(int x, int y)
79 {
80 }
81
82 static void keyboard(int key, int pressed)
83 {
84 }
85
86 static void mouse(int bn, int pressed, int x, int y)
87 {
88         bnstate[bn] = pressed;
89         prev_mx = x;
90         prev_my = y;
91 }
92
93 static void motion(int x, int y)
94 {
95         float dx = x - prev_mx;
96         float dy = y - prev_my;
97         prev_mx = x;
98         prev_my = y;
99
100         if(bnstate[0]) {
101                 cam_theta += dx * 0.5;
102                 cam_phi += dy * 0.5;
103
104                 if(cam_phi < -90) cam_phi = -90;
105                 if(cam_phi > 90) cam_phi = 90;
106         }
107         if(bnstate[2]) {
108                 cam_dist += dy * 0.1;
109                 if(cam_dist < 0) cam_dist = 0;
110         }
111 }
112
113 static void wheel(int dir)
114 {
115 }