#include "conf.h" #include "editor.h" #include "input.h" #include "level.h" #include "player.h" #include "time.h" #include #include #include static struct Player player; static int timer; volatile int has_ticked; int time = 0; 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) { time += 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); /* enter editor */ if (input_pressed(K_EDITOR)) editor(); } static void draw(void) { dclear(C_BLACK); level_draw(); player_draw(&player); level_draw_name(); time_draw(); dupdate(); } static int timer_callback(volatile int *arg) { *arg += 1; return 0; }