mirror of https://git.sr.ht/~kikoodx/momento
80 lines
1.9 KiB
C
80 lines
1.9 KiB
C
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
|
/* Copyright (C) 2021 KikooDX */
|
|
|
|
#include "conf.h"
|
|
#include "level.h"
|
|
#include "player.h"
|
|
#include <gint/clock.h>
|
|
#include <gint/display.h>
|
|
#include <gint/gint.h>
|
|
#include <gint/keyboard.h>
|
|
#include <gint/timer.h>
|
|
|
|
#define PANIC(msg) \
|
|
{ \
|
|
dclear(C_BLACK); \
|
|
dprint_opt(DWIDTH / 2, DHEIGHT / 2, C_RED, C_NONE, \
|
|
DTEXT_CENTER, DTEXT_MIDDLE, "ERROR: %s", \
|
|
msg); \
|
|
dupdate(); \
|
|
getkey(); \
|
|
return 0; \
|
|
}
|
|
|
|
extern struct Level level;
|
|
extern int level_id;
|
|
extern int fatal_error;
|
|
extern char *fatal_error_msg;
|
|
|
|
static int callback(volatile void *arg);
|
|
|
|
int main(void)
|
|
{
|
|
int i;
|
|
int timer;
|
|
volatile int has_ticked = 1;
|
|
|
|
/* load level */
|
|
level_id = 0;
|
|
gint_switch(level_load);
|
|
if (fatal_error == -1)
|
|
PANIC(fatal_error_msg);
|
|
/* create player */
|
|
struct Player player = player_init();
|
|
/* timer setup */
|
|
timer = timer_setup(TIMER_ANY, 1000000 / TARGET_UPS, callback,
|
|
&has_ticked);
|
|
if (timer == -1)
|
|
PANIC("timer_setup failed");
|
|
timer_start(timer);
|
|
|
|
/* main game loop */
|
|
while (!keydown(KEY_EXIT)) {
|
|
/* do x updates per frame, x being ups/fps */
|
|
for (i = 0; i < TARGET_UPS / TARGET_FPS; i += 1) {
|
|
/* speed limiter */
|
|
while (!has_ticked)
|
|
sleep();
|
|
has_ticked = 0;
|
|
/* update */
|
|
clearevents();
|
|
player_update(&player);
|
|
}
|
|
/* draw */
|
|
dclear(C_BLACK);
|
|
level_draw();
|
|
player_draw(player);
|
|
dupdate();
|
|
}
|
|
|
|
timer_stop(timer);
|
|
return 1;
|
|
}
|
|
|
|
static int callback(volatile void *arg)
|
|
{
|
|
volatile int *has_ticked = arg;
|
|
*has_ticked = 1;
|
|
return 0;
|
|
}
|