nuclear@0: #include nuclear@0: #include nuclear@0: #include "opengl.h" nuclear@0: #include "game.h" nuclear@0: nuclear@0: static bool init(); nuclear@0: static void cleanup(); nuclear@0: nuclear@0: static void display(); nuclear@0: static void idle(); nuclear@0: static void reshape(int x, int y); nuclear@0: static void keyb(unsigned char key, int x, int y); nuclear@0: static void keyb_up(unsigned char key, int x, int y); nuclear@0: static void mouse(int bn, int st, int x, int y); nuclear@0: static void motion(int x, int y); nuclear@0: static void sball_motion(int x, int y, int z); nuclear@0: static void sball_rotate(int x, int y, int z); nuclear@0: nuclear@0: int main(int argc, char **argv) nuclear@0: { nuclear@0: glutInitWindowSize(1024, 600); nuclear@0: glutInit(&argc, argv); nuclear@0: glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); nuclear@0: glutCreateWindow("VR Chess"); nuclear@0: nuclear@0: glutDisplayFunc(display); nuclear@0: glutIdleFunc(idle); nuclear@0: glutReshapeFunc(reshape); nuclear@0: glutKeyboardFunc(keyb); nuclear@0: glutKeyboardUpFunc(keyb_up); nuclear@0: glutMouseFunc(mouse); nuclear@0: glutMotionFunc(motion); nuclear@0: glutSpaceballMotionFunc(sball_motion); nuclear@0: glutSpaceballRotateFunc(sball_rotate); nuclear@0: nuclear@0: if(!init()) { nuclear@0: return 1; nuclear@0: } nuclear@0: atexit(cleanup); nuclear@0: nuclear@0: glutMainLoop(); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: static bool init() nuclear@0: { nuclear@0: glewInit(); nuclear@0: nuclear@0: if(!game_init()) { nuclear@0: return false; nuclear@0: } nuclear@0: return true; nuclear@0: } nuclear@0: nuclear@0: static void cleanup() nuclear@0: { nuclear@0: game_cleanup(); nuclear@0: } nuclear@0: nuclear@0: static void display() nuclear@0: { nuclear@0: unsigned int msec = glutGet(GLUT_ELAPSED_TIME); nuclear@0: nuclear@0: game_update(msec); nuclear@0: game_render(0); nuclear@0: nuclear@0: glutSwapBuffers(); nuclear@0: } nuclear@0: nuclear@0: static void idle() nuclear@0: { nuclear@0: glutPostRedisplay(); nuclear@0: } nuclear@0: nuclear@0: static void reshape(int x, int y) nuclear@0: { nuclear@0: game_reshape(x, y); nuclear@0: } nuclear@0: nuclear@0: static void keyb(unsigned char key, int x, int y) nuclear@0: { nuclear@0: game_keyboard(key, true, x, y); nuclear@0: } nuclear@0: nuclear@0: static void keyb_up(unsigned char key, int x, int y) nuclear@0: { nuclear@0: game_keyboard(key, false, x, y); nuclear@0: } nuclear@0: nuclear@0: static void mouse(int bn, int st, int x, int y) nuclear@0: { nuclear@0: game_mouse(bn - GLUT_LEFT_BUTTON, st == GLUT_DOWN, x, y); nuclear@0: } nuclear@0: nuclear@0: static void motion(int x, int y) nuclear@0: { nuclear@0: game_motion(x, y); nuclear@0: } nuclear@0: nuclear@0: #define SBALL_MOVE_SCALE 0.00025 nuclear@0: #define SBALL_ROT_SCALE 0.01 nuclear@0: nuclear@0: static void sball_motion(int x, int y, int z) nuclear@0: { nuclear@0: game_6dof_move(x * SBALL_MOVE_SCALE, y * SBALL_MOVE_SCALE, z * SBALL_MOVE_SCALE); nuclear@0: } nuclear@0: nuclear@0: static void sball_rotate(int x, int y, int z) nuclear@0: { nuclear@0: game_6dof_rotate(x * SBALL_ROT_SCALE, y * SBALL_ROT_SCALE, z * SBALL_ROT_SCALE); nuclear@0: }