X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fgame.c;h=fdf0066b23e44b1f43c4dc6259601124e35005f1;hb=d54a3962dcb42f9921be75cf3754525ecef2bab6;hp=2ec7c45b976da2abcd1d354efb3b279b47ca0219;hpb=046fa888e4df754a20736303c27f497163edf4db;p=eradicate diff --git a/src/game.c b/src/game.c index 2ec7c45..fdf0066 100644 --- a/src/game.c +++ b/src/game.c @@ -1,18 +1,27 @@ +#include +#include #include "game.h" #include "screens.h" +#include "sprite.h" int fb_width, fb_height; long fb_size; -void *fb_pixels, *vmem; +uint16_t *fb_pixels, *vmem; long time_msec; +int show_fps = 1; void (*draw)(void); void (*key_event)(int key, int pressed); +static struct sprites dbgfont; + int init(int argc, char **argv) { + if(load_sprites(&dbgfont, "data/dbgfont.spr") == -1) { + return -1; + } if(intro_init() == -1) { return -1; } @@ -20,8 +29,7 @@ int init(int argc, char **argv) return -1; } - draw = intro_draw; - key_event = intro_keyb; + intro_start(); return 0; } @@ -30,3 +38,49 @@ void cleanup(void) intro_cleanup(); menu_cleanup(); } + +void dbg_print(void *fb, int x, int y, const char *str) +{ + uint16_t *dest = (uint16_t*)fb + y * fb_width + x; + + while(*str) { + int c = *str++; + + if(c > ' ' && c < 128) { + draw_sprite(dest, fb_width * 2, &dbgfont, c - ' '); + } + dest += 8; + } +} + +void dbg_printf(void *fb, int x, int y, const char *fmt, ...) +{ + static char buf[2048]; + va_list ap; + + va_start(ap, fmt); + vsprintf(buf, fmt, ap); + va_end(ap); + + dbg_print(fb, x, y, buf); +} + +void dbg_fps(void *fb) +{ + static char fpsbuf[8]; + static long frame, prev_upd; + long msec = time_msec; + long delta; + + frame++; + + delta = msec - prev_upd; + if(delta >= 1024) { + frame *= 1000; + sprintf(fpsbuf, "%2ld.%1ld", frame >> 10, 10 * (frame & 0x3ff) >> 10); + frame = 0; + prev_upd = msec; + } + + dbg_print(fb, 2, 2, fpsbuf); +}