#include #include #include "common.h" #include "physics.h" #include "renderer.h" #include "ui.h" #include "console.h" //TEST #include int main(void) { int rv = 0; r_window *first_window; phy_sim sim; SDL_Thread *sim_thread = NULL; if (con_init(&sim)) { con_printf("fatal error: console initialization failed\n"); rv = 1; goto quit; } if (r_init()) { con_printf("fatal error: renderer initialization failed\n"); rv = 1; goto quit; } if (ui_init()) { con_printf("fatal error: UI initialization failed\n"); rv = 1; goto quit; } signal(SIGINT, SIG_DFL); signal(SIGTERM, SIG_DFL); first_window = r_window_create(); if (!first_window) { con_printf("fatal error: couldn't open first window\n"); rv = 1; goto quit; } ui_renderer_window_register(first_window); if (phy_sim_create(&sim)) { con_printf("fatal error: phy_sim_create failed\n"); rv = 1; goto quit; } sim_thread = SDL_CreateThread((SDL_ThreadFunction)phy_thread, "phy_thread", &sim); if (!sim_thread) { con_printf("fatal error: SDL_CreateThread failed: %s\n", SDL_GetError()); rv = 1; goto quit; } while (1) { SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) goto quit; else ui_event(&event); } ui_draw(&sim); } quit: con_printf("main: exitting, rv=%i\n", rv); ui_quit(); r_quit(); if (sim_thread) { itc_chan_push(&sim.ctl, PHY_CMD_QUIT, NULL); SDL_WaitThread(sim_thread, NULL); } phy_sim_destroy(&sim); con_quit(); SDL_Quit(); return rv; }