X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=fbgfx;a=blobdiff_plain;f=src%2Fscreen.c;fp=src%2Fscreen.c;h=1f1dfbe1ae1f24ee8bb96876d81773337025ef11;hp=0000000000000000000000000000000000000000;hb=70c067c2da05fb71f3d2de115cefbc225eff3667;hpb=21180fdf54f0c578af0959df088de308ce25ca61 diff --git a/src/screen.c b/src/screen.c new file mode 100644 index 0000000..1f1dfbe --- /dev/null +++ b/src/screen.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include "screen.h" +#include "demo.h" + +struct screen *console_screen(void); +struct screen *tunnel_screen(void); + +#define NUM_SCR 2 +static struct screen *scr[NUM_SCR]; + +static struct screen *cur, *prev, *next; +static long trans_start, trans_dur; + +int scr_init(void) +{ + int i; + + if(!(scr[0] = console_screen())) { + return -1; + } + if(!(scr[1] = tunnel_screen())) { + return -1; + } + + for(i=0; iinit() == -1) { + return -1; + } + } + return 0; +} + +void scr_shutdown(void) +{ + int i; + for(i=0; ishutdown(); + } +} + +void scr_update(void) +{ + if(prev) { /* we're in the middle of a transition */ + long interval = time_msec - trans_start; + if(interval >= trans_dur) { + prev = 0; + cur = next; + next = 0; + } + } +} + +void scr_draw(void) +{ + if(cur) cur->draw(); +} + +struct screen *scr_lookup(const char *name) +{ + int i; + for(i=0; iname, name) == 0) { + return scr[i]; + } + } + return 0; +} + +int scr_change(struct screen *s, long trans_time) +{ + if(s == cur) return 0; + + if(trans_time && cur) { + trans_dur = trans_time / 2; /* half for each part transition out then in */ + trans_start = time_msec; + + prev = cur; + next = s; + } else { + cur = s; + } + return 0; +}