void gfx_loop(int target_frame_rate, void (*render_func)(unsigned int)) { int b_end = 0; unsigned int last_render_t = time_ticks(); while(!b_end) { gfx_handleWindowEvents(&b_end); unsigned int current_time = time_ticks(); if ((current_time - last_render_t) * target_frame_rate >= 1000) { render_func(current_time - last_render_t); gfx_swapBuffers(); last_render_t = current_time; } } }
void simulation_tick(float delta_time) // Simulation loop { SDL_Rect r_dest; switch(simulation.state) { case 0: // Configuration r_dest.x = (Application->Window->w / 2) - Logo->w / 2; r_dest.y = (Application->Window->h / 2) - Logo->h / 2; SDL_BlitSurface(Logo, NULL, Application->Window, &r_dest); // Menu simulation.generation = simulation.total_prey = simulation.total_pred = amount = 0; break; case 1: if(time_ticks(Gametimer) > simulation.tickdelay) { if(!Gametimer->t_paused) { int i = 0; for(i = 0; i < simulation.generations; i++) { simulation_process(delta_time); } simulation.update = 1; } time_start(Gametimer); } if(simulation.update) { simulation_render(delta_time); simulation.update = 0; } // Update Variables char buff[512]; int pbreed, pstarve, prbreed; pbreed = pstarve = prbreed = 0; pbreed = SendDlgItemMessage(simulation.Config, IDC_PRED_BREED, TBM_GETPOS, 0,0); pstarve = SendDlgItemMessage(simulation.Config, IDC_PRED_STARVE, TBM_GETPOS, 0,0); prbreed = SendDlgItemMessage(simulation.Config, IDC_PREY_BREED, TBM_GETPOS, 0,0); if(pbreed != simulation.g_pred_breed) { simulation.g_pred_breed = pbreed; snprintf(buff, 512, "%d", simulation.g_pred_breed); SetDlgItemText(simulation.Config, IDC_PRED_BREED_V, buff); } if(pstarve != simulation.g_pred_starve) { simulation.g_pred_starve = pstarve; snprintf(buff, 512, "%d", simulation.g_pred_starve); SetDlgItemText(simulation.Config, IDC_PRED_STARVE_V, buff); } if(prbreed != simulation.g_prey_breed) { simulation.g_prey_breed = prbreed; snprintf(buff, 512, "%d", simulation.g_prey_breed); SetDlgItemText(simulation.Config, IDC_PREY_BREED_V, buff); } // break; } }