# HG changeset patch # User John Tsiombikas # Date 1314949704 -10800 # Node ID 4ad7a01c4ff53a665c281d7e932509bdb0c12230 # Parent 3258d163cfbcad92ca237b24b30d17b73b6b0b28 ha diff -r 3258d163cfbc -r 4ad7a01c4ff5 src/dsys.c --- a/src/dsys.c Fri Sep 02 08:14:40 2011 +0300 +++ b/src/dsys.c Fri Sep 02 10:48:24 2011 +0300 @@ -297,6 +297,8 @@ /* seek without continuity */ void dsys_seek(struct dsys_demo *demo, demotime_t tm) { + struct dsys_event *ev; + if(tm < 0) { tm = 0; } @@ -306,6 +308,15 @@ demo->start_tm = demo->src_tm - tm; demo->stoppage_tm = 0; + + demo->nextev = demo->active = demo->evlist; + + /* recalculate events */ + ev = demo->evlist; + while(ev) { + proc_event(ev, tm); + ev = ev->next; + } } void dsys_seek_norm(struct dsys_demo *demo, float t) diff -r 3258d163cfbc -r 4ad7a01c4ff5 test.c --- a/test.c Fri Sep 02 08:14:40 2011 +0300 +++ b/test.c Fri Sep 02 10:48:24 2011 +0300 @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -14,6 +15,7 @@ void disp(void); void draw_progress(float p); void draw_teapot(float sec); +void flash_callback(struct dsys_event *ev, void *cls); void reshape(int x, int y); void keyb(unsigned char key, int x, int y); void skeyb(int key, int x, int y); @@ -21,6 +23,13 @@ struct dsys_demo *demo; +struct dsys_event *evfoo, *evfoolong, *evfooshort; + +float teapot_color[][4] = { + {0.9, 0.5, 0.3, 1.0}, + {0.3, 0.4, 0.8, 1.0} +}; + int main(int argc, char **argv) { float lpos[] = {-100, 100, 100, 1}; @@ -47,6 +56,12 @@ return 1; } + evfoo = dsys_event(demo, "foo"); + evfoolong = dsys_event(demo, "foolong"); + evfooshort = dsys_event(demo, "fooshort"); + + dsys_event_callback(evfooshort, flash_callback, 0); + glutMainLoop(); return 0; } @@ -54,7 +69,9 @@ void disp(void) { + int i; float sec; + static const float trans[][2] = {{-3, 0}, {3, 0}, {0, -3}, {0, 3}}; dsys_update(demo, dsys_msec_to_dtime(get_ticks())); sec = dsys_dtime_to_sec(dsys_time(demo)); @@ -68,6 +85,19 @@ draw_teapot(sec); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + for(i=0; i<4; i++) { + glPushMatrix(); + glRotatef(-sec * 100.0, 0, 1, 0); + glTranslatef(trans[i][0], 0, trans[i][1]); + glScalef(0.7, 0.7, 0.7); + draw_teapot(sec); + glPopMatrix(); + } + glDisable(GL_BLEND); + draw_progress(dsys_progress(demo)); glutSwapBuffers(); @@ -113,10 +143,18 @@ glPopMatrix(); } +#define LERP(a, b, t) ((a) + ((b) - (a)) * (t)) + void draw_teapot(float sec) { - float dcol[] = {0.2, 0.4, 0.8, 1.0}; + float dcol[4]; float scol[] = {0.8, 0.8, 0.8, 1.0}; + float t = dsys_event_value(evfoo); + + dcol[0] = LERP(teapot_color[0][0], teapot_color[1][0], t); + dcol[1] = LERP(teapot_color[0][1], teapot_color[1][1], t); + dcol[2] = LERP(teapot_color[0][2], teapot_color[1][2], t); + dcol[3] = dsys_event_value(evfoolong); glPushMatrix(); glRotatef(sec * 100.0, 0, 1, 0); @@ -132,6 +170,13 @@ glPopMatrix(); } +void flash_callback(struct dsys_event *ev, void *cls) +{ + float t = sin(dsys_event_value(ev) * M_PI); + + glClearColor(t, t, t, 1.0); +} + void reshape(int x, int y) { glViewport(0, 0, x, y); diff -r 3258d163cfbc -r 4ad7a01c4ff5 testscript.dsys --- a/testscript.dsys Fri Sep 02 08:14:40 2011 +0300 +++ b/testscript.dsys Fri Sep 02 10:48:24 2011 +0300 @@ -2,6 +2,6 @@ 1000 2000 foo 4000 8000 foolong -500 700 fooshort +500 650 fooshort 10000 end