conworlds

annotate src/main.cc @ 5:8b7da5ab814e

vr wrapper in progress
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 20 Aug 2014 16:34:43 +0300
parents 879194e4b1f0
children 3c36bc28c6c2
rev   line source
nuclear@2 1 #include <stdio.h>
nuclear@2 2 #include <stdlib.h>
nuclear@2 3 #include "opengl.h"
nuclear@2 4 #include "game.h"
nuclear@2 5
nuclear@2 6 static bool init();
nuclear@2 7 static void cleanup();
nuclear@2 8
nuclear@2 9 static void display();
nuclear@2 10 static void idle();
nuclear@2 11 static void reshape(int x, int y);
nuclear@2 12 static void keyb(unsigned char key, int x, int y);
nuclear@2 13 static void keyb_up(unsigned char key, int x, int y);
nuclear@2 14 static void mouse(int bn, int st, int x, int y);
nuclear@2 15 static void motion(int x, int y);
nuclear@2 16 static void sball_motion(int x, int y, int z);
nuclear@2 17 static void sball_rotate(int x, int y, int z);
nuclear@2 18
nuclear@2 19 int main(int argc, char **argv)
nuclear@2 20 {
nuclear@2 21 glutInitWindowSize(1024, 600);
nuclear@2 22 glutInit(&argc, argv);
nuclear@2 23 glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
nuclear@2 24 glutCreateWindow("VR Chess");
nuclear@2 25
nuclear@2 26 glutDisplayFunc(display);
nuclear@2 27 glutIdleFunc(idle);
nuclear@2 28 glutReshapeFunc(reshape);
nuclear@2 29 glutKeyboardFunc(keyb);
nuclear@2 30 glutKeyboardUpFunc(keyb_up);
nuclear@2 31 glutMouseFunc(mouse);
nuclear@2 32 glutMotionFunc(motion);
nuclear@2 33 glutSpaceballMotionFunc(sball_motion);
nuclear@2 34 glutSpaceballRotateFunc(sball_rotate);
nuclear@2 35
nuclear@2 36 if(!init()) {
nuclear@2 37 return 1;
nuclear@2 38 }
nuclear@2 39 atexit(cleanup);
nuclear@2 40
nuclear@2 41 glutMainLoop();
nuclear@2 42 return 0;
nuclear@2 43 }
nuclear@2 44
nuclear@2 45 static bool init()
nuclear@2 46 {
nuclear@2 47 glewInit();
nuclear@2 48
nuclear@2 49 if(!game_init()) {
nuclear@2 50 return false;
nuclear@2 51 }
nuclear@2 52 return true;
nuclear@2 53 }
nuclear@2 54
nuclear@2 55 static void cleanup()
nuclear@2 56 {
nuclear@2 57 game_cleanup();
nuclear@2 58 }
nuclear@2 59
nuclear@2 60 static void display()
nuclear@2 61 {
nuclear@2 62 unsigned int msec = glutGet(GLUT_ELAPSED_TIME);
nuclear@2 63
nuclear@2 64 game_update(msec);
nuclear@2 65 game_render(0);
nuclear@2 66
nuclear@2 67 glutSwapBuffers();
nuclear@2 68 }
nuclear@2 69
nuclear@2 70 static void idle()
nuclear@2 71 {
nuclear@2 72 glutPostRedisplay();
nuclear@2 73 }
nuclear@2 74
nuclear@2 75 static void reshape(int x, int y)
nuclear@2 76 {
nuclear@2 77 game_reshape(x, y);
nuclear@2 78 }
nuclear@2 79
nuclear@2 80 static void keyb(unsigned char key, int x, int y)
nuclear@2 81 {
nuclear@2 82 game_keyboard(key, true, x, y);
nuclear@2 83 }
nuclear@2 84
nuclear@2 85 static void keyb_up(unsigned char key, int x, int y)
nuclear@2 86 {
nuclear@2 87 game_keyboard(key, false, x, y);
nuclear@2 88 }
nuclear@2 89
nuclear@2 90 static void mouse(int bn, int st, int x, int y)
nuclear@2 91 {
nuclear@3 92 switch(bn) {
nuclear@3 93 case GLUT_RIGHT_BUTTON + 1:
nuclear@3 94 if(st == GLUT_DOWN) {
nuclear@3 95 game_mwheel(1);
nuclear@3 96 }
nuclear@3 97 break;
nuclear@3 98
nuclear@3 99 case GLUT_RIGHT_BUTTON + 2:
nuclear@3 100 if(st == GLUT_DOWN) {
nuclear@3 101 game_mwheel(-1);
nuclear@3 102 }
nuclear@3 103 break;
nuclear@3 104
nuclear@3 105 default:
nuclear@3 106 game_mouse(bn - GLUT_LEFT_BUTTON, st == GLUT_DOWN, x, y);
nuclear@3 107 }
nuclear@2 108 }
nuclear@2 109
nuclear@2 110 static void motion(int x, int y)
nuclear@2 111 {
nuclear@2 112 game_motion(x, y);
nuclear@2 113 }
nuclear@2 114
nuclear@2 115 #define SBALL_MOVE_SCALE 0.00025
nuclear@2 116 #define SBALL_ROT_SCALE 0.01
nuclear@2 117
nuclear@2 118 static void sball_motion(int x, int y, int z)
nuclear@2 119 {
nuclear@2 120 game_6dof_move(x * SBALL_MOVE_SCALE, y * SBALL_MOVE_SCALE, z * SBALL_MOVE_SCALE);
nuclear@2 121 }
nuclear@2 122
nuclear@2 123 static void sball_rotate(int x, int y, int z)
nuclear@2 124 {
nuclear@2 125 game_6dof_rotate(x * SBALL_ROT_SCALE, y * SBALL_ROT_SCALE, z * SBALL_ROT_SCALE);
nuclear@2 126 }