nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include "opengl.h" nuclear@0: #include "part.h" nuclear@0: #include "menu_part.h" nuclear@0: #include "game_part.h" nuclear@0: nuclear@0: static bool init(); nuclear@0: static void cleanup(); nuclear@0: static void disp(); nuclear@0: static void idle(); nuclear@0: static void reshape(int x, int y); nuclear@0: static void key_press(unsigned char key, int x, int y); nuclear@0: static void key_release(unsigned char key, int x, int y); nuclear@0: static void mouse(int bn, int state, 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: static void sball_button(int bn, int state); nuclear@0: nuclear@0: int main(int argc, char **argv) nuclear@0: { nuclear@0: glutInit(&argc, argv); nuclear@1: glutInitWindowSize(800, 450); nuclear@0: glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | GLUT_STENCIL); nuclear@0: glutCreateWindow("Foo"); nuclear@0: nuclear@0: glutDisplayFunc(disp); nuclear@0: glutIdleFunc(idle); nuclear@0: glutReshapeFunc(reshape); nuclear@0: glutKeyboardFunc(key_press); nuclear@0: glutKeyboardUpFunc(key_release); nuclear@0: glutMouseFunc(mouse); nuclear@0: glutMotionFunc(motion); nuclear@0: glutPassiveMotionFunc(motion); nuclear@0: glutSpaceballMotionFunc(sball_motion); nuclear@0: glutSpaceballRotateFunc(sball_rotate); nuclear@0: glutSpaceballButtonFunc(sball_button); 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: nuclear@0: static bool init() nuclear@0: { nuclear@0: glewInit(); nuclear@0: nuclear@0: menu_part = new MainMenu; nuclear@2: if(!menu_part->init()) { nuclear@2: return false; nuclear@2: } nuclear@2: nuclear@0: game_part = new Game; nuclear@2: if(!game_part->init()) { nuclear@2: return false; nuclear@2: } nuclear@2: nuclear@3: //menu_part->start(); nuclear@3: game_part->start(); nuclear@0: return true; nuclear@0: } nuclear@0: nuclear@0: static void cleanup() nuclear@0: { nuclear@0: delete menu_part; nuclear@0: delete game_part; nuclear@0: } nuclear@0: nuclear@0: static void disp() nuclear@0: { nuclear@0: unsigned int msec = glutGet(GLUT_ELAPSED_TIME); nuclear@0: cur_part->update(msec); nuclear@0: cur_part->draw(); nuclear@0: nuclear@0: glutSwapBuffers(); nuclear@0: usleep(1000); 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: glViewport(0, 0, x, y); nuclear@0: nuclear@0: cur_part->reshape(x, y); nuclear@0: } nuclear@0: nuclear@0: static void key_press(unsigned char key, int x, int y) nuclear@0: { nuclear@0: cur_part->key(key, true); nuclear@0: } nuclear@0: nuclear@0: static void key_release(unsigned char key, int x, int y) nuclear@0: { nuclear@0: cur_part->key(key, false); nuclear@0: } nuclear@0: nuclear@0: static void mouse(int bn, int state, int x, int y) nuclear@0: { nuclear@0: cur_part->mouse_button(bn - GLUT_LEFT_BUTTON, state == GLUT_DOWN); nuclear@0: } nuclear@0: nuclear@0: static void motion(int x, int y) nuclear@0: { nuclear@0: cur_part->mouse_motion(x, y); nuclear@0: } nuclear@0: nuclear@0: static int sbmotion[6]; nuclear@0: nuclear@0: static void sball_motion(int x, int y, int z) nuclear@0: { nuclear@0: sbmotion[0] = x; nuclear@0: sbmotion[1] = y; nuclear@0: sbmotion[2] = z; nuclear@0: cur_part->spaceball_motion(sbmotion[0], sbmotion[1], sbmotion[2], nuclear@0: sbmotion[3], sbmotion[4], sbmotion[5]); nuclear@0: } nuclear@0: nuclear@0: static void sball_rotate(int x, int y, int z) nuclear@0: { nuclear@0: sbmotion[3] = x; nuclear@0: sbmotion[4] = y; nuclear@0: sbmotion[5] = z; nuclear@0: cur_part->spaceball_motion(sbmotion[0], sbmotion[1], sbmotion[2], nuclear@0: sbmotion[3], sbmotion[4], sbmotion[5]); nuclear@0: } nuclear@0: nuclear@0: static void sball_button(int bn, int state) nuclear@0: { nuclear@0: cur_part->spaceball_button(bn, state == GLUT_DOWN); nuclear@0: }