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 }