From: John Tsiombikas Date: Thu, 30 Dec 2021 17:16:19 +0000 (+0200) Subject: screen override X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;h=86b5ef7c43c2a3485850b8a4f58c33aaf6ca2566;p=andemo screen override --- diff --git a/src/demo.c b/src/demo.c index 4acbb8c..f51dcc1 100644 --- a/src/demo.c +++ b/src/demo.c @@ -123,6 +123,12 @@ void demo_keyboard(int key, int pressed) } else { int i; + + if(dsys.scr_override && dsys.scr_override->keyboard) { + dsys.scr_override->keyboard(key, pressed); + break; + } + for(i=0; ikeyboard) scr->keyboard(key, pressed); @@ -134,6 +140,12 @@ void demo_keyboard(int key, int pressed) void demo_mouse(int bn, int pressed, int x, int y) { int i; + + if(dsys.scr_override && dsys.scr_override->mouse) { + dsys.scr_override->mouse(bn, pressed, x, y); + return; + } + for(i=0; imouse) scr->mouse(bn, pressed, x, y); @@ -143,6 +155,11 @@ void demo_mouse(int bn, int pressed, int x, int y) void demo_motion(int x, int y) { int i; + + if(dsys.scr_override && dsys.scr_override->motion) { + dsys.scr_override->motion(x, y); + } + for(i=0; imotion) scr->motion(x, y); diff --git a/src/demosys.c b/src/demosys.c index 12c7a15..06aa8c2 100644 --- a/src/demosys.c +++ b/src/demosys.c @@ -154,6 +154,18 @@ void dsys_update(void) dsys.tmsec = time_msec; + /* evaluate tracks */ + for(i=0; ivis = 1; + if(scr->update) scr->update(dsys.tmsec); + return; + } + dsys.num_act = 0; for(i=0; idraw(); + return; + } + for(i=0; idraw(); } @@ -244,16 +257,22 @@ void dsys_run_screen(struct demoscreen *scr) { int i; - if(!scr) return; - if(dsys.num_act == 1 && dsys.act[0] == scr) return; + if(!scr) { + if(dsys.scr_override) { + scr = dsys.scr_override; + if(scr->stop) scr->stop(); + } + dsys.scr_override = 0; + return; + } for(i=0; istop) dsys.act[i]->stop(); dsys.act[i]->active = 0; } + dsys.num_act = 0; - dsys.act[0] = scr; - dsys.num_act = 1; + dsys.scr_override = scr; if(scr->start) scr->start(); scr->active = 1; diff --git a/src/demosys.h b/src/demosys.h index 717ac4e..e2bdb8a 100644 --- a/src/demosys.h +++ b/src/demosys.h @@ -36,6 +36,8 @@ struct demosystem { struct demoscreen *act[MAX_DSYS_SCREENS]; int num_act; + struct demoscreen *scr_override; + void *trackmap; struct anm_track *track; float *value; /* values for each track, stored on update */