Mercurial > hg > demos > bussi
comparison demo.c @ 13:952e27204992
More work.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 23 May 2015 03:01:29 +0300 |
parents | 77b2bb97fa59 |
children | 80634079f275 |
comparison
equal
deleted
inserted
replaced
11:bc1a226cc2d5 | 13:952e27204992 |
---|---|
41 DMBitmapFont *font = NULL; | 41 DMBitmapFont *font = NULL; |
42 | 42 |
43 typedef struct | 43 typedef struct |
44 { | 44 { |
45 int layer; | 45 int layer; |
46 int freq; | |
47 int max; | |
48 float ypos; | |
49 float speed; | |
46 char *filename; | 50 char *filename; |
47 SDL_Surface *img; | 51 SDL_Surface *img; |
52 int count; | |
48 } DMItemDef; | 53 } DMItemDef; |
49 | 54 |
50 | 55 |
51 DMItemDef items[] = | 56 typedef struct |
52 { | 57 { |
53 { 1, "viitta.png", NULL }, | 58 BOOL enabled; |
54 { 1, "puu_pv_1.png", NULL }, | 59 float xtime, xpos, ypos; |
55 { 0, "puu_pv_2.png", NULL }, | 60 DMItemDef *ref; |
61 } DMFooItemDef; | |
62 | |
63 | |
64 static DMItemDef items[] = | |
65 { | |
66 { 0, 3, 1, 0.53, 0.2, "viitta.png", NULL, 0 }, | |
67 { 0, 1, 3, 0.28 , 0.1 , "puu_pv_2.png", NULL, 0 }, | |
68 { 1, 9, 2, 0.25 , 0.8 , "puu_pv_1.png", NULL, 0 }, | |
56 }; | 69 }; |
57 | 70 |
58 static const int nitems = sizeof(items) / sizeof(items[0]); | 71 static const int nitems = sizeof(items) / sizeof(items[0]); |
59 | 72 |
60 | 73 |
228 return ch; | 241 return ch; |
229 } | 242 } |
230 } | 243 } |
231 | 244 |
232 | 245 |
246 static DMItemDef * dmGetItem(int t) | |
247 { | |
248 int i; | |
249 for (i = 0; i < nitems; i++) | |
250 { | |
251 DMItemDef *def = &items[i]; | |
252 if (t % def->freq == 0 && def->count <= def->max) | |
253 return def; | |
254 } | |
255 return NULL; | |
256 } | |
257 | |
258 | |
259 static void dmRenderItems(DMEngineData *engine, DMScaledBlitFunc ablit, DMFooItemDef *mitems, const int nmitems, const int layer) | |
260 { | |
261 int i; | |
262 for (i = 0; i < nmitems; i++) | |
263 { | |
264 DMFooItemDef *item = &mitems[i]; | |
265 | |
266 if (item->enabled && item->ref->layer == layer) | |
267 { | |
268 ablit(item->ref->img, | |
269 dmCX(engine, item->xpos), | |
270 dmCY(engine, item->ypos), | |
271 dmQX(engine, item->ref->img, 1), | |
272 dmQY(engine, item->ref->img, 1), | |
273 engine->screen); | |
274 } | |
275 } | |
276 } | |
277 | |
233 | 278 |
234 static int demoRender(DMEngineData *engine) | 279 static int demoRender(DMEngineData *engine) |
235 { | 280 { |
236 float t = engineGetTimeDT(engine); | 281 float t = engineGetTimeDT(engine); |
237 | 282 |
310 fadeVal = 255; | 355 fadeVal = 255; |
311 cblit(tausta, x1, 0, dmQX(engine, tausta, 1), dmQY(engine, tausta, 1), engine->screen); | 356 cblit(tausta, x1, 0, dmQX(engine, tausta, 1), dmQY(engine, tausta, 1), engine->screen); |
312 cblit(tausta, x2, 0, dmQX(engine, tausta, 1), dmQY(engine, tausta, 1), engine->screen); | 357 cblit(tausta, x2, 0, dmQX(engine, tausta, 1), dmQY(engine, tausta, 1), engine->screen); |
313 } | 358 } |
314 | 359 |
315 float qm = sin(t * 0.1 + fftPow * 5) * 15, qm2 = qm*2; | 360 float qm = sin(t * 0.1 + fftPow * 5) * 0.05, qm2 = qm * 10; |
316 dmScaledBlitSurface32to32TransparentGA(aurinko, | 361 dmScaledBlitSurface32to32TransparentGA(aurinko, |
317 dmCX(engine, 0.8 - dmLerpSCurveClamp(&fadeLerp3, engineGetTime(engine, 0) * 0.01) * 0.3 ) - qm, | 362 dmCX(engine, 0.8 - dmLerpSCurveClamp(&fadeLerp3, engineGetTime(engine, 0) * 0.01) * 0.3 - qm), |
318 dmCY(engine, 0.05) - qm, | 363 dmCY(engine, 0.05 - qm), |
319 aurinko->w + qm2, aurinko->h + qm2, | 364 dmQX(engine, aurinko, 1 + qm2), |
365 dmQY(engine, aurinko, 1 + qm2), | |
320 engine->screen, fadeVal); | 366 engine->screen, fadeVal); |
321 | 367 |
368 // Puut ym. liikennejutut | |
369 #define DM_MAX_MITEMS 16 | |
370 static DMFooItemDef mitems[DM_MAX_MITEMS]; | |
371 if (t > 0) | |
372 { | |
373 float dt = (t - 0); | |
374 static BOOL nollattu = FALSE; | |
375 int i; | |
376 | |
377 if (!nollattu) | |
378 { | |
379 memset(mitems, 0, sizeof(mitems)); | |
380 nollattu = TRUE; | |
381 } | |
382 | |
383 for (i = 0; i < DM_MAX_MITEMS; i++) | |
384 { | |
385 DMFooItemDef *item = &mitems[i]; | |
386 if (!item->enabled && (item->ref = dmGetItem((int) t * 10 + 1)) != NULL) | |
387 { | |
388 item->enabled = TRUE; | |
389 item->ref->count++; | |
390 item->xtime = dt; | |
391 item->ypos = item->ref->ypos + sin(dt) * 0.001f; | |
392 } | |
393 } | |
394 for (i = 0; i < DM_MAX_MITEMS; i++) | |
395 { | |
396 DMFooItemDef *item = &mitems[i]; | |
397 if (item->enabled) | |
398 { | |
399 float xpos = (dt - item->xtime) * item->ref->speed; | |
400 if (xpos > 1.5) | |
401 { | |
402 item->enabled = FALSE; | |
403 item->ref->count--; | |
404 } | |
405 else | |
406 item->xpos = 1 - xpos; | |
407 } | |
408 } | |
409 } | |
410 | |
411 dmRenderItems(engine, ablit, mitems, DM_MAX_MITEMS, 0); | |
322 | 412 |
323 // Bussi ajaa sisään | 413 // Bussi ajaa sisään |
324 if (t > 14) | 414 if (t > 14) |
325 { | 415 { |
326 float | 416 float |
327 dt = engineGetTime(engine, 14), | 417 dt = engineGetTime(engine, 14), |
328 ajelu = dmLerpSCurveClamp(&fadeLerp3, dt), | 418 ajelu = dmLerpSCurveClamp(&fadeLerp3, dt), |
329 xc = dmCX(engine, -1 + ajelu), | 419 xc = dmCX(engine, -1 + ajelu), |
330 yc = dmCY(engine, 0.35 + sin(t * 10) * 0.005), | 420 yc = dmCY(engine, 0.38 + sin(t * 10) * 0.005), |
331 yc2 = yc + dmQY(engine, bussi, 0.7) + dmCY(engine, sin(t * 20) * 0.001); | 421 yc2 = yc + dmQY(engine, bussi, 0.7) + dmCY(engine, sin(t * 20) * 0.001); |
332 | 422 |
333 ablit(rengas, xc + dmQX(engine, bussi, 0.07), yc2, dmQX(engine, rengas, 1), dmQY(engine, rengas, 1), engine->screen); | 423 ablit(rengas, xc + dmQX(engine, bussi, 0.07), yc2, dmQX(engine, rengas, 1), dmQY(engine, rengas, 1), engine->screen); |
334 ablit(rengas, xc + dmQX(engine, bussi, 0.80), yc2, dmQX(engine, rengas, 1), dmQY(engine, rengas, 1), engine->screen); | 424 ablit(rengas, xc + dmQX(engine, bussi, 0.80), yc2, dmQX(engine, rengas, 1), dmQY(engine, rengas, 1), engine->screen); |
335 ablit(bussi, xc, yc, dmQX(engine, bussi, 1), dmQY(engine, bussi, 1), engine->screen); | 425 ablit(bussi, xc, yc, dmQX(engine, bussi, 1), dmQY(engine, bussi, 1), engine->screen); |
336 } | 426 } |
337 | 427 |
338 | 428 dmRenderItems(engine, ablit, mitems, DM_MAX_MITEMS, 1); |
339 // Puut ym. liikennejutut | |
340 if (t > 10) | |
341 { | |
342 } | |
343 } | 429 } |
344 | 430 |
345 // | 431 // |
346 // AP logo | 432 // AP logo |
347 // | 433 // |
428 dmQY(engine, logo2, 1), | 514 dmQY(engine, logo2, 1), |
429 engine->screen, fadeVal2); | 515 engine->screen, fadeVal2); |
430 } | 516 } |
431 | 517 |
432 | 518 |
433 { | 519 // |
434 static DMScaledBlitFunc cblit = NULL; | |
435 static SDL_Surface *maski = NULL; | |
436 static BOOL nollattu = FALSE; | |
437 | |
438 if (!nollattu) | |
439 { | |
440 engineGetResImage(engine, maski, "maski.png"); | |
441 cblit = dmGetScaledBlitFunc(maski->format, engine->screen->format, DMD_TRANSPARENT); | |
442 } | |
443 | |
444 cblit(maski, | |
445 0, 0, | |
446 dmQX(engine, maski, 1), | |
447 dmQY(engine, maski, 1), | |
448 engine->screen); | |
449 } | |
450 | |
451 // Skrolleri | 520 // Skrolleri |
452 if (t > 2) | 521 // |
522 if (t > 3) | |
453 { | 523 { |
454 int tt = engineGetTime(engine, 2); | 524 int tt = engineGetTime(engine, 2); |
455 static DMScaledBlitFunc cblit, qblit; | 525 static DMScaledBlitFunc cblit, qblit; |
456 static BOOL nollattu = FALSE; | 526 static BOOL nollattu = FALSE; |
457 if (!nollattu) | 527 if (!nollattu) |
483 } | 553 } |
484 xc += fwidth; | 554 xc += fwidth; |
485 } | 555 } |
486 } | 556 } |
487 | 557 |
558 // | |
488 // Loppufeidi | 559 // Loppufeidi |
560 // | |
489 if (t > 70) | 561 if (t > 70) |
490 { | 562 { |
491 static DMLerpContext fadeLerp; | 563 static DMLerpContext fadeLerp; |
492 static SDL_Surface *feidi = NULL; | 564 static SDL_Surface *feidi = NULL; |
493 static BOOL nollattu = FALSE; | 565 static BOOL nollattu = FALSE; |
501 dmScaledBlitSurface32to32TransparentGA(feidi, | 573 dmScaledBlitSurface32to32TransparentGA(feidi, |
502 0, 0, engine->screen->w, engine->screen->h, engine->screen, | 574 0, 0, engine->screen->w, engine->screen->h, engine->screen, |
503 dmLerpSCurveClamp(&fadeLerp, fadeTime)); | 575 dmLerpSCurveClamp(&fadeLerp, fadeTime)); |
504 } | 576 } |
505 | 577 |
578 // | |
579 // Maskaus | |
580 // | |
581 { | |
582 static DMScaledBlitFunc cblit = NULL; | |
583 static SDL_Surface *maski = NULL; | |
584 static BOOL nollattu = FALSE; | |
585 | |
586 if (!nollattu) | |
587 { | |
588 engineGetResImage(engine, maski, "maski.png"); | |
589 cblit = dmGetScaledBlitFunc(maski->format, engine->screen->format, DMD_TRANSPARENT); | |
590 } | |
591 | |
592 cblit(maski, | |
593 0, 0, | |
594 dmQX(engine, maski, 1), | |
595 dmQY(engine, maski, 1), | |
596 engine->screen); | |
597 } | |
598 | |
599 | |
506 if (t > 75) | 600 if (t > 75) |
507 return 1; | 601 return 1; |
508 else | 602 else |
509 return DMERR_OK; | 603 return DMERR_OK; |
510 } | 604 } |