improved spiral(...) and random_bright(...) for non-square displays

This commit is contained in:
Christian Kroll 2014-05-17 22:20:52 +02:00
parent 8a3ecd882e
commit 020efc3fd1
1 changed files with 32 additions and 44 deletions

View File

@ -47,45 +47,32 @@ void test_palette2(){
#ifdef ANIMATION_SPIRAL #ifdef ANIMATION_SPIRAL
static void walk(cursor_t* cur, unsigned char steps, int delay){
unsigned char x;
for(x=steps;x--;){
set_cursor(cur, next_pixel(cur->pos, cur->dir));
wait(delay);
}
}
void spiral(int delay) { void spiral(int delay) {
clear_screen(0); clear_screen(0);
static signed char const PROGMEM delta[5] = { 0, -1, 0, 1, 0 };
unsigned char length[2] = { NUM_ROWS, NUM_COLS - 1 };
unsigned char x = NUM_COLS - 1, y = NUM_ROWS, i = 0;
cursor_t cur; while (length[i & 0x01]) {
cur.dir = right; for (unsigned char j = 0; j < length[i & 0x01]; ++j) {
cur.mode = set; x += pgm_read_byte(&delta[i]);
set_cursor (&cur, (pixel){NUM_COLS-1,0}); y += pgm_read_byte(&delta[i + 1]);
setpixel((pixel){x, y}, NUMPLANE);
unsigned char clearbit=0; wait(delay);
while(clearbit == 0){
clearbit = 1;
while (!get_next_pixel(cur.pos, cur.dir)){
clearbit = 0;
walk(&cur, 1, delay);
} }
cur.dir = direction_r(cur.dir); length[i++ & 0x01]--;
i %= 4;
} }
i = (i + 2u) % 4u;
cur.mode = clear; while (length[0] <= NUM_ROWS && length[1] < NUM_COLS) {
set_cursor(&cur, (pixel){(NUM_COLS/2)-1,(NUM_ROWS/2)-1}); for (unsigned char j = 0; j < length[i & 0x01]; ++j) {
setpixel((pixel){x, y}, 0);
for(clearbit=0;clearbit==0;){ x += pgm_read_byte(&delta[i]);
if( get_next_pixel(cur.pos, direction_r(cur.dir)) ){ y += pgm_read_byte(&delta[i + 1]);
cur.dir = direction_r(cur.dir); wait(delay);
}
if( get_next_pixel(cur.pos, cur.dir) == 1 ){
walk(&cur , 1, delay);
}else{
clearbit = 1;
} }
length[(i += 3) & 0x01]++;
i %= 4;
} }
} }
#endif #endif
@ -179,16 +166,17 @@ void fire()
* void random_bright(void) * void random_bright(void)
* by Daniel Otte * by Daniel Otte
*/ */
void random_bright(unsigned cycles){ void random_bright(unsigned int cycles) {
uint8_t t,x,y;
while (cycles--) { while (cycles--) {
for(y=0; y<NUM_ROWS; ++y) for (unsigned char p = NUMPLANE; p--;) {
for(x=0; x<NUM_COLS/4; ++x){ for (unsigned char y = NUM_ROWS; y--;) {
t=random8(); for (unsigned char x = LINEBYTES; x--;) {
setpixel((pixel){x*4+0, y}, 0x3&(t>>0)); if (p < (NUMPLANE - 1)) {
setpixel((pixel){x*4+1, y}, 0x3&(t>>2)); pixmap[p][y][x] |= pixmap[p - 1][y][x];
setpixel((pixel){x*4+2, y}, 0x3&(t>>4)); }
setpixel((pixel){x*4+3, y}, 0x3&(t>>6)); pixmap[p][y][x] = random8();
}
}
} }
wait(200); wait(200);
} }