Changeset 1030
- Timestamp:
- Sep 16, 2006, 5:06:09 PM (14 years ago)
- Location:
- libcaca/trunk
- Files:
-
- 1 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/src/cacademo.c
r1027 r1030 35 35 void metaballs(enum action, cucul_canvas_t *); 36 36 void moire(enum action, cucul_canvas_t *); 37 void langton(enum action, cucul_canvas_t *); 38 void matrix(enum action, cucul_canvas_t *); 37 39 38 40 void (*demo_list[])(enum action, cucul_canvas_t *) = … … 41 43 metaballs, 42 44 moire, 45 //langton, 46 matrix, 43 47 }; 48 #define DEMOS (sizeof(demo_list)/sizeof(*demo_list)) 44 49 45 50 /* Common macros for dither-based demos */ … … 72 77 caca_set_display_time(dp, 20000); 73 78 74 demo = cucul_rand(0, 3);75 76 demo_list[demo](INIT, NULL);79 demo = cucul_rand(0, DEMOS); 80 81 demo_list[demo](INIT, frontcv); 77 82 78 83 for(;;) … … 91 96 goto paused; 92 97 93 demo_list[demo](UPDATE, NULL);98 demo_list[demo](UPDATE, frontcv); 94 99 frame++; 95 100 paused: … … 102 107 } 103 108 end: 104 demo_list[demo](FREE, NULL);109 demo_list[demo](FREE, frontcv); 105 110 106 111 caca_free_display(dp); … … 179 184 (1.0 + sin(((double)frame) * R[5])) / 2); 180 185 break; 186 181 187 case DRAW: 182 188 cucul_dither_bitmap(cv, 0, 0, … … 185 191 dither, screen); 186 192 break; 193 187 194 case FREE: 188 195 free(screen); … … 482 489 } 483 490 491 /* Langton ant effect */ 492 #define ANTS 15 493 #define ITER 2 494 495 void langton(enum action action, cucul_canvas_t *cv) 496 { 497 static char gradient[] = 498 { 499 ' ', ' ', '.', '.', ':', ':', 'x', 'x', 500 'X', 'X', '&', '&', 'W', 'W', '@', '@', 501 }; 502 static int steps[][2] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }; 503 static uint8_t *screen; 504 static int width, height; 505 static int ax[ANTS], ay[ANTS], dir[ANTS]; 506 507 int i, a, x, y; 508 509 switch(action) 510 { 511 case INIT: 512 width = cucul_get_canvas_width(cv); 513 height = cucul_get_canvas_height(cv); 514 screen = malloc(width * height); 515 memset(screen, 0, width * height); 516 for(i = 0; i < ANTS; i++) 517 { 518 ax[i] = cucul_rand(0, width); 519 ay[i] = cucul_rand(0, height); 520 dir[i] = cucul_rand(0, 4); 521 } 522 break; 523 524 case UPDATE: 525 for(i = 0; i < ITER; i++) 526 { 527 for(x = 0; x < width * height; x++) 528 { 529 uint8_t p = screen[x]; 530 if((p & 0x0f) > 1) 531 screen[x] = p - 1; 532 } 533 534 for(a = 0; a < ANTS; a++) 535 { 536 uint8_t p = screen[ax[a] + width * ay[a]]; 537 538 if(p & 0x0f) 539 { 540 dir[a] = (dir[a] + 1) % 4; 541 screen[ax[a] + width * ay[a]] = a << 4; 542 } 543 else 544 { 545 dir[a] = (dir[a] + 3) % 4; 546 screen[ax[a] + width * ay[a]] = (a << 4) | 0x0f; 547 } 548 ax[a] = (width + ax[a] + steps[dir[a]][0]) % width; 549 ay[a] = (height + ay[a] + steps[dir[a]][1]) % height; 550 } 551 } 552 break; 553 554 case DRAW: 555 for(y = 0; y < height; y++) 556 { 557 for(x = 0; x < width; x++) 558 { 559 uint8_t p = screen[x + width * y]; 560 561 if(p & 0x0f) 562 cucul_set_color(cv, CUCUL_COLOR_WHITE, p >> 4); 563 else 564 cucul_set_color(cv, CUCUL_COLOR_BLACK, CUCUL_COLOR_BLACK); 565 cucul_putchar(cv, x, y, gradient[p & 0x0f]); 566 } 567 } 568 break; 569 570 case FREE: 571 free(screen); 572 break; 573 } 574 } 575 576 /* Matrix effect */ 577 #define MAXDROPS 500 578 #define MINLEN 15 579 #define MAXLEN 30 580 581 struct drop 582 { 583 int x, y, speed, len; 584 char str[MAXLEN]; 585 } 586 drop[MAXDROPS]; 587 588 void matrix(enum action action, cucul_canvas_t *cv) 589 { 590 static int w, h; 591 592 int i, j; 593 594 switch(action) 595 { 596 case INIT: 597 for(i = 0; i < MAXDROPS; i++) 598 { 599 drop[i].x = cucul_rand(0, 1000); 600 drop[i].y = cucul_rand(0, 1000); 601 drop[i].speed = 5 + cucul_rand(0, 30); 602 drop[i].len = MINLEN + cucul_rand(0, (MAXLEN - MINLEN)); 603 for(j = 0; j < MAXLEN; j++) 604 drop[i].str[j] = cucul_rand('0', 'z'); 605 } 606 break; 607 608 case UPDATE: 609 w = cucul_get_canvas_width(cv); 610 h = cucul_get_canvas_height(cv); 611 612 for(i = 0; i < MAXDROPS && i < (w * h / 32); i++) 613 { 614 drop[i].y += drop[i].speed; 615 if(drop[i].y > 1000) 616 { 617 drop[i].y -= 1000; 618 drop[i].x = cucul_rand(0, 1000); 619 } 620 } 621 break; 622 623 case DRAW: 624 cucul_set_color(cv, CUCUL_COLOR_BLACK, CUCUL_COLOR_BLACK); 625 cucul_clear_canvas(cv); 626 627 for(i = 0; i < MAXDROPS && i < (w * h / 32); i++) 628 { 629 int x, y; 630 631 x = drop[i].x * w / 1000 / 2 * 2; 632 y = drop[i].y * (h + MAXLEN) / 1000; 633 634 for(j = 0; j < drop[i].len; j++) 635 { 636 unsigned int fg; 637 638 if(j < 2) 639 fg = CUCUL_COLOR_WHITE; 640 else if(j < drop[i].len / 4) 641 fg = CUCUL_COLOR_LIGHTGREEN; 642 else if(j < drop[i].len * 4 / 5) 643 fg = CUCUL_COLOR_GREEN; 644 else 645 fg = CUCUL_COLOR_DARKGRAY; 646 cucul_set_color(cv, fg, CUCUL_COLOR_BLACK); 647 648 cucul_putchar(cv, x, y - j, 649 drop[i].str[(y - j) % drop[i].len]); 650 } 651 } 652 break; 653 654 case FREE: 655 break; 656 } 657 } 658 659 -
libcaca/trunk/test
- Property svn:ignore
-
old new 16 16 import 17 17 input 18 matrix19 18 spritedit 20 19 text
-
- Property svn:ignore
-
libcaca/trunk/test/Makefile.am
r1014 r1030 3 3 AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/cucul -I$(top_srcdir)/caca -DDATADIR=\"$(pkgdatadir)\" 4 4 5 noinst_PROGRAMS = colors demo demo0 dithering event export font frames gamma hsv input matrixspritedit font2tga text transform truecolor unicode import5 noinst_PROGRAMS = colors demo demo0 dithering event export font frames gamma hsv input spritedit font2tga text transform truecolor unicode import 6 6 7 7 colors_SOURCES = colors.c … … 41 41 input_LDADD = ../caca/libcaca.la ../cucul/libcucul.la @CACA_LIBS@ 42 42 43 matrix_SOURCES = matrix.c44 matrix_LDADD = ../caca/libcaca.la ../cucul/libcucul.la @CACA_LIBS@ @MATH_LIBS@45 46 43 spritedit_SOURCES = spritedit.c 47 44 spritedit_LDADD = ../caca/libcaca.la ../cucul/libcucul.la @CACA_LIBS@
Note: See TracChangeset
for help on using the changeset viewer.