moving on
[eradicate] / src / game.c
1 #include <stdio.h>
2 #include <stdarg.h>
3 #include "game.h"
4 #include "screens.h"
5 #include "sprite.h"
6
7 int fb_width, fb_height;
8 long fb_size;
9 uint16_t *fb_pixels, *vmem;
10
11 long time_msec;
12 int show_fps = 1;
13
14 void (*draw)(void);
15 void (*key_event)(int key, int pressed);
16
17 static struct sprites dbgfont;
18
19
20 int init(int argc, char **argv)
21 {
22         if(load_sprites(&dbgfont, "data/dbgfont.spr") == -1) {
23                 return -1;
24         }
25         if(intro_init() == -1) {
26                 return -1;
27         }
28         if(menu_init() == -1) {
29                 return -1;
30         }
31
32         intro_start();
33         return 0;
34 }
35
36 void cleanup(void)
37 {
38         intro_cleanup();
39         menu_cleanup();
40 }
41
42 void dbg_print(void *fb, int x, int y, const char *str)
43 {
44         uint16_t *dest = (uint16_t*)fb + y * fb_width + x;
45
46         while(*str) {
47                 int c = *str++;
48
49                 if(c > ' ' && c < 128) {
50                         draw_sprite(dest, fb_width * 2, &dbgfont, c - ' ');
51                 }
52                 dest += 8;
53         }
54 }
55
56 void dbg_printf(void *fb, int x, int y, const char *fmt, ...)
57 {
58         static char buf[2048];
59         va_list ap;
60
61         va_start(ap, fmt);
62         vsprintf(buf, fmt, ap);
63         va_end(ap);
64
65         dbg_print(fb, x, y, buf);
66 }
67
68 void dbg_fps(void *fb)
69 {
70         static char fpsbuf[8];
71         static long frame, prev_upd;
72         long msec = time_msec;
73         long delta;
74
75         frame++;
76
77         delta = msec - prev_upd;
78         if(delta >= 1024) {
79                 frame *= 1000;
80                 sprintf(fpsbuf, "%2ld.%1ld", frame >> 10, 10 * (frame & 0x3ff) >> 10);
81                 frame = 0;
82                 prev_upd = msec;
83         }
84
85         dbg_print(fb, 2, 2, fpsbuf);
86 }