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