#include "conf.h" #include "input.h" #include "level.h" #include "player.h" #include #include #include static struct Player player; static int timer; static volatile int has_ticked; static void init(void); static void deinit(void); static void draw(void); static void update(void); static int timer_callback(volatile int *); int main(void) { int frameskip = 1; init(); level_load(0); do { int i; draw(); for (i = 0; i < frameskip; i++) { if (has_ticked > frameskip) frameskip = has_ticked; while (!has_ticked) sleep(); while (has_ticked) has_ticked = 0; update(); } } while (input_up(K_EXIT)); deinit(); return 0; } static void init(void) { extern font_t font_dina; dfont(&font_dina); timer = timer_configure(TIMER_ANY, 1000000 / TARGET_FPS, GINT_CALL(timer_callback, &has_ticked)); timer_start(timer); input_init(); level_init(&player); } static void deinit(void) { level_deinit(); timer_stop(timer); } static void update(void) { input_update(); player_update(&player); } static void draw(void) { dclear(C_BLACK); level_draw(); player_draw(&player); dupdate(); } static int timer_callback(volatile int *arg) { *arg += 1; return 0; }