vrheights

annotate src/main.cc @ 0:ccbd444939a1

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 22 Sep 2014 18:36:24 +0300
parents
children b49461618f61
rev   line source
nuclear@0 1 #include <stdio.h>
nuclear@0 2 #include <stdlib.h>
nuclear@0 3 #include <SDL2/SDL.h>
nuclear@0 4 #include "game.h"
nuclear@0 5
nuclear@0 6 static bool init();
nuclear@0 7 static void cleanup();
nuclear@0 8 static void handle_event(SDL_Event *ev);
nuclear@0 9
nuclear@0 10 static bool done;
nuclear@0 11 static SDL_Window *win;
nuclear@0 12 static SDL_GLContext ctx;
nuclear@0 13
nuclear@0 14 int main(int argc, char **argv)
nuclear@0 15 {
nuclear@0 16 if(!init()) {
nuclear@0 17 return 1;
nuclear@0 18 }
nuclear@0 19
nuclear@0 20 for(;;) {
nuclear@0 21 SDL_Event ev;
nuclear@0 22 while(SDL_PollEvent(&ev)) {
nuclear@0 23 handle_event(&ev);
nuclear@0 24 if(done) break;
nuclear@0 25 }
nuclear@0 26
nuclear@0 27 game_update(SDL_GetTicks());
nuclear@0 28 game_display();
nuclear@0 29 }
nuclear@0 30
nuclear@0 31 cleanup();
nuclear@0 32 return 0;
nuclear@0 33 }
nuclear@0 34
nuclear@0 35 void exit_game()
nuclear@0 36 {
nuclear@0 37 done = true;
nuclear@0 38 }
nuclear@0 39
nuclear@0 40 static bool init()
nuclear@0 41 {
nuclear@0 42 if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) {
nuclear@0 43 fprintf(stderr, "failed to initialize SDL\n");
nuclear@0 44 return false;
nuclear@0 45 }
nuclear@0 46
nuclear@0 47 win = SDL_CreateWindow("vrheights", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
nuclear@0 48 1280, 800, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
nuclear@0 49 if(!win) {
nuclear@0 50 fprintf(stderr, "failed to create window\n");
nuclear@0 51 return false;
nuclear@0 52 }
nuclear@0 53
nuclear@0 54 if(!(ctx = SDL_GL_CreateContext(win))) {
nuclear@0 55 fprintf(stderr, "failed to create OpenGL context\n");
nuclear@0 56 return false;
nuclear@0 57 }
nuclear@0 58
nuclear@0 59 return game_init();
nuclear@0 60 }
nuclear@0 61
nuclear@0 62 static void cleanup()
nuclear@0 63 {
nuclear@0 64 game_cleanup();
nuclear@0 65 SDL_Quit();
nuclear@0 66 }
nuclear@0 67
nuclear@0 68 static void handle_event(SDL_Event *ev)
nuclear@0 69 {
nuclear@0 70 switch(ev->type) {
nuclear@0 71 case SDL_WINDOWEVENT:
nuclear@0 72 if(ev->window.event == SDL_WINDOWEVENT_RESIZED) {
nuclear@0 73 game_reshape(ev->window.data1, ev->window.data2);
nuclear@0 74 }
nuclear@0 75 break;
nuclear@0 76
nuclear@0 77 case SDL_KEYDOWN:
nuclear@0 78 case SDL_KEYUP:
nuclear@0 79 game_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED);
nuclear@0 80 break;
nuclear@0 81
nuclear@0 82 case SDL_MOUSEBUTTONDOWN:
nuclear@0 83 case SDL_MOUSEBUTTONUP:
nuclear@0 84 game_mouse_button(ev->button.button, ev->button.state == SDL_PRESSED, ev->button.x, ev->button.y);
nuclear@0 85 break;
nuclear@0 86
nuclear@0 87 case SDL_MOUSEMOTION:
nuclear@0 88 game_mouse_motion(ev->motion.x, ev->motion.y);
nuclear@0 89 break;
nuclear@0 90
nuclear@0 91 default:
nuclear@0 92 break;
nuclear@0 93 }
nuclear@0 94 }