# HG changeset patch # User Matti Hamalainen # Date 1432339289 -10800 # Node ID 952e27204992fb795f19eaf8ec8769930fee16a6 # Parent bc1a226cc2d595675b1df7997618924a7e793f23 More work. diff -r bc1a226cc2d5 -r 952e27204992 demo.c --- a/demo.c Fri May 22 03:22:37 2015 +0300 +++ b/demo.c Sat May 23 03:01:29 2015 +0300 @@ -43,16 +43,29 @@ typedef struct { int layer; + int freq; + int max; + float ypos; + float speed; char *filename; SDL_Surface *img; + int count; } DMItemDef; -DMItemDef items[] = +typedef struct { - { 1, "viitta.png", NULL }, - { 1, "puu_pv_1.png", NULL }, - { 0, "puu_pv_2.png", NULL }, + BOOL enabled; + float xtime, xpos, ypos; + DMItemDef *ref; +} DMFooItemDef; + + +static DMItemDef items[] = +{ + { 0, 3, 1, 0.53, 0.2, "viitta.png", NULL, 0 }, + { 0, 1, 3, 0.28 , 0.1 , "puu_pv_2.png", NULL, 0 }, + { 1, 9, 2, 0.25 , 0.8 , "puu_pv_1.png", NULL, 0 }, }; static const int nitems = sizeof(items) / sizeof(items[0]); @@ -230,6 +243,38 @@ } +static DMItemDef * dmGetItem(int t) +{ + int i; + for (i = 0; i < nitems; i++) + { + DMItemDef *def = &items[i]; + if (t % def->freq == 0 && def->count <= def->max) + return def; + } + return NULL; +} + + +static void dmRenderItems(DMEngineData *engine, DMScaledBlitFunc ablit, DMFooItemDef *mitems, const int nmitems, const int layer) +{ + int i; + for (i = 0; i < nmitems; i++) + { + DMFooItemDef *item = &mitems[i]; + + if (item->enabled && item->ref->layer == layer) + { + ablit(item->ref->img, + dmCX(engine, item->xpos), + dmCY(engine, item->ypos), + dmQX(engine, item->ref->img, 1), + dmQY(engine, item->ref->img, 1), + engine->screen); + } + } +} + static int demoRender(DMEngineData *engine) { @@ -312,13 +357,58 @@ cblit(tausta, x2, 0, dmQX(engine, tausta, 1), dmQY(engine, tausta, 1), engine->screen); } - float qm = sin(t * 0.1 + fftPow * 5) * 15, qm2 = qm*2; + float qm = sin(t * 0.1 + fftPow * 5) * 0.05, qm2 = qm * 10; dmScaledBlitSurface32to32TransparentGA(aurinko, - dmCX(engine, 0.8 - dmLerpSCurveClamp(&fadeLerp3, engineGetTime(engine, 0) * 0.01) * 0.3 ) - qm, - dmCY(engine, 0.05) - qm, - aurinko->w + qm2, aurinko->h + qm2, + dmCX(engine, 0.8 - dmLerpSCurveClamp(&fadeLerp3, engineGetTime(engine, 0) * 0.01) * 0.3 - qm), + dmCY(engine, 0.05 - qm), + dmQX(engine, aurinko, 1 + qm2), + dmQY(engine, aurinko, 1 + qm2), engine->screen, fadeVal); + // Puut ym. liikennejutut + #define DM_MAX_MITEMS 16 + static DMFooItemDef mitems[DM_MAX_MITEMS]; + if (t > 0) + { + float dt = (t - 0); + static BOOL nollattu = FALSE; + int i; + + if (!nollattu) + { + memset(mitems, 0, sizeof(mitems)); + nollattu = TRUE; + } + + for (i = 0; i < DM_MAX_MITEMS; i++) + { + DMFooItemDef *item = &mitems[i]; + if (!item->enabled && (item->ref = dmGetItem((int) t * 10 + 1)) != NULL) + { + item->enabled = TRUE; + item->ref->count++; + item->xtime = dt; + item->ypos = item->ref->ypos + sin(dt) * 0.001f; + } + } + for (i = 0; i < DM_MAX_MITEMS; i++) + { + DMFooItemDef *item = &mitems[i]; + if (item->enabled) + { + float xpos = (dt - item->xtime) * item->ref->speed; + if (xpos > 1.5) + { + item->enabled = FALSE; + item->ref->count--; + } + else + item->xpos = 1 - xpos; + } + } + } + + dmRenderItems(engine, ablit, mitems, DM_MAX_MITEMS, 0); // Bussi ajaa sisään if (t > 14) @@ -327,7 +417,7 @@ dt = engineGetTime(engine, 14), ajelu = dmLerpSCurveClamp(&fadeLerp3, dt), xc = dmCX(engine, -1 + ajelu), - yc = dmCY(engine, 0.35 + sin(t * 10) * 0.005), + yc = dmCY(engine, 0.38 + sin(t * 10) * 0.005), yc2 = yc + dmQY(engine, bussi, 0.7) + dmCY(engine, sin(t * 20) * 0.001); ablit(rengas, xc + dmQX(engine, bussi, 0.07), yc2, dmQX(engine, rengas, 1), dmQY(engine, rengas, 1), engine->screen); @@ -335,11 +425,7 @@ ablit(bussi, xc, yc, dmQX(engine, bussi, 1), dmQY(engine, bussi, 1), engine->screen); } - - // Puut ym. liikennejutut - if (t > 10) - { - } + dmRenderItems(engine, ablit, mitems, DM_MAX_MITEMS, 1); } // @@ -430,26 +516,10 @@ } - { - static DMScaledBlitFunc cblit = NULL; - static SDL_Surface *maski = NULL; - static BOOL nollattu = FALSE; - - if (!nollattu) - { - engineGetResImage(engine, maski, "maski.png"); - cblit = dmGetScaledBlitFunc(maski->format, engine->screen->format, DMD_TRANSPARENT); - } - - cblit(maski, - 0, 0, - dmQX(engine, maski, 1), - dmQY(engine, maski, 1), - engine->screen); - } - + // // Skrolleri - if (t > 2) + // + if (t > 3) { int tt = engineGetTime(engine, 2); static DMScaledBlitFunc cblit, qblit; @@ -485,7 +555,9 @@ } } + // // Loppufeidi + // if (t > 70) { static DMLerpContext fadeLerp; @@ -503,6 +575,28 @@ dmLerpSCurveClamp(&fadeLerp, fadeTime)); } + // + // Maskaus + // + { + static DMScaledBlitFunc cblit = NULL; + static SDL_Surface *maski = NULL; + static BOOL nollattu = FALSE; + + if (!nollattu) + { + engineGetResImage(engine, maski, "maski.png"); + cblit = dmGetScaledBlitFunc(maski->format, engine->screen->format, DMD_TRANSPARENT); + } + + cblit(maski, + 0, 0, + dmQX(engine, maski, 1), + dmQY(engine, maski, 1), + engine->screen); + } + + if (t > 75) return 1; else