void run() { Uint32 currentTicks = 0; while(RUNNING) { Uint32 currentTicks = SDL_GetTicks(); while(SDL_PollEvent(&event)) { if(event.type == SDL_QUIT) { RUNNING = false; } if(event.type == SDL_KEYDOWN) { if(event.key.keysym.sym == SDLK_ESCAPE) { RUNNING = false; } } Player_eventInput(); } Player_gameInput(); Map_update(); // includes entities screen_clear(); Map_render(); // includes entities screen_display(); if(SDL_GetTicks() - currentTicks < (1000 / GAME_FPS)) { SDL_Delay((1000 / GAME_FPS) - (SDL_GetTicks() - currentTicks)); } } SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); }
static void Game_renderRaceView(const Game *g, size_t view_index) { const View *v = g->race.views + view_index; View_apply(v); Map_render(&g->race.map); size_t i; for(i=0 ; i<g->race.ship_count ; ++i) { Ship_render(g->race.ships+i); if(i==view_index) { Map_renderCheckpoints(&g->race.map, g->race.ships[i].next_checkpoint_index); Ship_renderGuides(g->race.ships+i); } } Game_renderWorldMouseCursor(g); View gui_view; gui_view.zoom = 1.f; gui_view.ortho_right = 1.f; gui_view.center.x = 0.f; gui_view.center.y = 0.f; gui_view.tilt = 0; gui_view.viewport_pos = v->viewport_pos; gui_view.viewport_size = v->viewport_size; char str[16]; snprintf(str, sizeof(str), "speed: %4u", (unsigned)(1000.f*sqrtf( g->race.ships[view_index].physic_solid.speed.x*g->race.ships[view_index].physic_solid.speed.x + g->race.ships[view_index].physic_solid.speed.y*g->race.ships[view_index].physic_solid.speed.y ))); View_apply(&gui_view); glPushMatrix(); glTranslatef(.8f-Monospace_getStringWidth(str, .1f)*.5f, -View_getOrthoTop(&gui_view)+.1f, 0.f); Monospace_renderCenteredString(str, .1f); glPopMatrix(); }