diff --git a/firmware/l0dable/nick_life.c b/firmware/l0dable/nick_life.c index b4d1382..f3e5457 100644 --- a/firmware/l0dable/nick_life.c +++ b/firmware/l0dable/nick_life.c @@ -7,6 +7,8 @@ #include "basic/config.h" +// #include "lcd/allfonts.h" + #include "usetable.h" #define BITSET_X (RESX+2) @@ -28,46 +30,76 @@ typedef uint8_t uchar; int pattern=0; #define PATTERNCOUNT 3 +#define LCDSHIFTX_EVERY_N 2 +#define LCDSHIFTY_EVERY_N 2 + uchar stepmode=0; uchar randdensity=0; -//uint8_t bl=0; - -struct bitset _buf1,*buf1=&_buf1; -struct bitset _buf2,*buf2=&_buf2; - -struct bitset *life =&_buf1; -struct bitset *new =&_buf2; +static unsigned long iter=0; +struct bitset _life; +#define life (&_life) static void draw_area(); static void calc_area(); static void random_area(struct bitset *area, uchar x0, uchar y0, uchar x1, uchar y1,uchar value); static void reset_area(); -static void nextledcycle(); void ram(void) { getInputWaitRelease(); reset_area(); random_area(life,1,1,RESX,RESY,40); + static int nickx=2,nicky=10; + signed char movy=1; + static int nickwidth,nickheight; + static int nickoff=10; lcdClear(); setExtFont(GLOBAL(nickfont)); - DoString(20,20,GLOBAL(nickname)); + // font = &Font_Ubuntu36pt; + + nickwidth=DoString(nickx,nicky,GLOBAL(nickname)); + if(nickwidth<50)nickoff=30; + // nickwidth=DoString(nickx,nicky,"RAY"); + nickheight=getFontHeight(); -#if 0 - gpioSetValue (RB_LED0, CFG_LED_ON); - gpioSetValue (RB_LED1, CFG_LED_ON); - gpioSetValue (RB_LED2, CFG_LED_ON); - gpioSetValue (RB_LED3, CFG_LED_ON); -#endif + char stepmode=0; while (1) { draw_area(); // xor life pattern over display content lcdDisplay(); - draw_area(); // xor life pattern again to restore original display content - lcdShift(1,-2,1); - if(getInputRaw()) - return; + lcdClear(); + // draw_area(); // xor life pattern again to restore original display content + // if(iter%LCDSHIFT_EVERY_N==0) lcdShift(1,-2,1); + // if(iter%LCDSHIFT_EVERY_N==0) { nickx=(nickx+1)%100-nickwidth; nicky=(nicky+1)%50;} + if(iter%LCDSHIFTX_EVERY_N==0) { nickx--; + if(nickx<(-1*nickwidth-nickoff))nickx=0; } + if(iter%LCDSHIFTY_EVERY_N==0) { nicky+=movy; + if(nicky<1 || nicky>RESY-nickheight) movy*=-1; } + // DoString(nickx,nicky,GLOBAL(nickname)); + DoString(nickx,nicky,GLOBAL(nickname)); + DoString(nickx+nickwidth+nickoff,nicky,GLOBAL(nickname)); + if(nickwidth