Multiple Speed Options
This commit is contained in:
parent
ae07f36fde
commit
381628aea0
|
@ -2,13 +2,12 @@
|
||||||
|
|
||||||
#include "basic/basic.h"
|
#include "basic/basic.h"
|
||||||
|
|
||||||
|
#include "lcd/print.h"
|
||||||
#include "lcd/render.h"
|
#include "lcd/render.h"
|
||||||
#include "lcd/display.h"
|
#include "lcd/display.h"
|
||||||
|
|
||||||
#include "basic/config.h"
|
#include "basic/config.h"
|
||||||
|
|
||||||
// #include "lcd/allfonts.h"
|
|
||||||
|
|
||||||
#include "usetable.h"
|
#include "usetable.h"
|
||||||
|
|
||||||
#define BITSET_X (RESX+2)
|
#define BITSET_X (RESX+2)
|
||||||
|
@ -30,8 +29,6 @@ typedef uint8_t uchar;
|
||||||
int pattern=0;
|
int pattern=0;
|
||||||
#define PATTERNCOUNT 3
|
#define PATTERNCOUNT 3
|
||||||
|
|
||||||
#define LCDSHIFTX_EVERY_N 2
|
|
||||||
#define LCDSHIFTY_EVERY_N 2
|
|
||||||
|
|
||||||
uchar stepmode=0;
|
uchar stepmode=0;
|
||||||
uchar randdensity=0;
|
uchar randdensity=0;
|
||||||
|
@ -54,13 +51,17 @@ void ram(void) {
|
||||||
signed char movy=1;
|
signed char movy=1;
|
||||||
static int nickwidth,nickheight;
|
static int nickwidth,nickheight;
|
||||||
static int nickoff=10;
|
static int nickoff=10;
|
||||||
|
static char delay=10;
|
||||||
|
static char speedmode=0;
|
||||||
|
static char LCDSHIFTX_EVERY_N=2;
|
||||||
|
static char LCDSHIFTY_EVERY_N=2;
|
||||||
|
static char ITER_EVERY_N=1;
|
||||||
|
|
||||||
lcdClear();
|
lcdClear();
|
||||||
setExtFont(GLOBAL(nickfont));
|
setExtFont(GLOBAL(nickfont));
|
||||||
// font = &Font_Ubuntu36pt;
|
|
||||||
|
|
||||||
nickwidth=DoString(nickx,nicky,GLOBAL(nickname));
|
nickwidth=DoString(nickx,nicky,GLOBAL(nickname));
|
||||||
if(nickwidth<50)nickoff=30;
|
if(nickwidth<50)nickoff=30;
|
||||||
// nickwidth=DoString(nickx,nicky,"RAY");
|
|
||||||
nickheight=getFontHeight();
|
nickheight=getFontHeight();
|
||||||
|
|
||||||
char stepmode=0;
|
char stepmode=0;
|
||||||
|
@ -69,13 +70,13 @@ void ram(void) {
|
||||||
lcdDisplay();
|
lcdDisplay();
|
||||||
lcdClear();
|
lcdClear();
|
||||||
// draw_area(); // xor life pattern again to restore original display content
|
// draw_area(); // xor life pattern again to restore original display content
|
||||||
|
// Old shift code. Can't handle longer Nicks...
|
||||||
// if(iter%LCDSHIFT_EVERY_N==0) lcdShift(1,-2,1);
|
// 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%LCDSHIFT_EVERY_N==0) { nickx=(nickx+1)%100-nickwidth; nicky=(nicky+1)%50;}
|
||||||
if(iter%LCDSHIFTX_EVERY_N==0) { nickx--;
|
if(iter%LCDSHIFTX_EVERY_N==0) { nickx--;
|
||||||
if(nickx<(-1*nickwidth-nickoff))nickx=0; }
|
if(nickx<(-1*nickwidth-nickoff))nickx=0; }
|
||||||
if(iter%LCDSHIFTY_EVERY_N==0) { nicky+=movy;
|
if(iter%LCDSHIFTY_EVERY_N==0) { nicky+=movy;
|
||||||
if(nicky<1 || nicky>RESY-nickheight) movy*=-1; }
|
if(nicky<1 || nicky>RESY-nickheight) movy*=-1; }
|
||||||
// DoString(nickx,nicky,GLOBAL(nickname));
|
|
||||||
DoString(nickx,nicky,GLOBAL(nickname));
|
DoString(nickx,nicky,GLOBAL(nickname));
|
||||||
DoString(nickx+nickwidth+nickoff,nicky,GLOBAL(nickname));
|
DoString(nickx+nickwidth+nickoff,nicky,GLOBAL(nickname));
|
||||||
if(nickwidth<RESX) DoString(nickx+2*(nickwidth+nickoff),nicky,GLOBAL(nickname));
|
if(nickwidth<RESX) DoString(nickx+2*(nickwidth+nickoff),nicky,GLOBAL(nickname));
|
||||||
|
@ -84,6 +85,22 @@ void ram(void) {
|
||||||
switch(key) {
|
switch(key) {
|
||||||
case BTN_LEFT:
|
case BTN_LEFT:
|
||||||
return;
|
return;
|
||||||
|
case BTN_RIGHT:
|
||||||
|
getInputWaitRelease();
|
||||||
|
speedmode=(speedmode+1)%5;
|
||||||
|
switch(speedmode) {
|
||||||
|
case 0:
|
||||||
|
delay=10; ITER_EVERY_N=1; LCDSHIFTX_EVERY_N=2; LCDSHIFTY_EVERY_N=2; break;
|
||||||
|
case 1:
|
||||||
|
delay=20; ITER_EVERY_N=1; LCDSHIFTX_EVERY_N=2; LCDSHIFTY_EVERY_N=2; break;
|
||||||
|
case 2:
|
||||||
|
delay=40; ITER_EVERY_N=1; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break;
|
||||||
|
case 3:
|
||||||
|
delay=40; ITER_EVERY_N=2; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break;
|
||||||
|
case 4:
|
||||||
|
delay=40; ITER_EVERY_N=4; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case BTN_DOWN:
|
case BTN_DOWN:
|
||||||
stepmode=1;
|
stepmode=1;
|
||||||
getInputWaitRelease();
|
getInputWaitRelease();
|
||||||
|
@ -96,11 +113,11 @@ void ram(void) {
|
||||||
getInputWaitRelease();
|
getInputWaitRelease();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
delayms_queue_plus(10,0);
|
delayms_queue_plus(delay,0);
|
||||||
#ifdef SIMULATOR
|
#ifdef SIMULATOR
|
||||||
fprintf(stderr,"Iteration %d - x %d, y %d \n",iter,nickx,nicky);
|
fprintf(stderr,"Iteration %d - x %d, y %d \n",iter,nickx,nicky);
|
||||||
#endif
|
#endif
|
||||||
calc_area();
|
if(iter%ITER_EVERY_N==0) calc_area(); else ++iter;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -145,25 +162,6 @@ static inline uint8_t bitset_get2(struct bitset *bs,uint8_t x,uint8_t y) {
|
||||||
return bitset_get(bs,bitset_offset2(x,y));
|
return bitset_get(bs,bitset_offset2(x,y));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void draw_rect(char x0, char y0, char x1, char y1) {
|
|
||||||
for(char x=x0; x<=x1; ++x) {
|
|
||||||
lcdSetPixel(x,y0,true);
|
|
||||||
lcdSetPixel(x,y1,true);
|
|
||||||
}
|
|
||||||
for(char y=y0+1; y<y1; ++y) {
|
|
||||||
lcdSetPixel(x0,y,true);
|
|
||||||
lcdSetPixel(x1,y,true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fill_rect(char x0, char y0, char x1, char y1) {
|
|
||||||
for(char x=x0; x<=x1; ++x) {
|
|
||||||
for(char y=y0; y<=y1; ++y) {
|
|
||||||
lcdSetPixel(x,y,true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fill_area(struct bitset *area, uchar x0, uchar y0, uchar x1, uchar y1,uchar value) {
|
static void fill_area(struct bitset *area, uchar x0, uchar y0, uchar x1, uchar y1,uchar value) {
|
||||||
for(uchar x=x0; x<=x1; ++x) {
|
for(uchar x=x0; x<=x1; ++x) {
|
||||||
for(uchar y=y0; y<=y1; ++y) {
|
for(uchar y=y0; y<=y1; ++y) {
|
||||||
|
@ -172,25 +170,6 @@ static void fill_area(struct bitset *area, uchar x0, uchar y0, uchar x1, uchar y
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool find_area(struct bitset *area, uchar x0, uchar y0, uchar x1, uchar y1,uchar value) {
|
|
||||||
for(uchar x=x0; x<=x1; ++x) {
|
|
||||||
for(uchar y=y0; y<=y1; ++y) {
|
|
||||||
if(bitset_get2(area,x,y)==value) return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t sum_area(struct bitset *area, uchar x0, uchar y0, uchar x1, uchar y1) {
|
|
||||||
uint32_t sum=0;
|
|
||||||
for(uchar x=x0; x<=x1; ++x) {
|
|
||||||
for(uchar y=y0; y<=y1; ++y) {
|
|
||||||
sum+=bitset_get2(area,x,y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void draw_area() {
|
static void draw_area() {
|
||||||
for(uchar x=0; x<RESX; ++x) {
|
for(uchar x=0; x<RESX; ++x) {
|
||||||
for(uchar y=0; y<RESY; ++y) {
|
for(uchar y=0; y<RESY; ++y) {
|
||||||
|
|
Loading…
Reference in New Issue