static void batteryLevel(void) { int dy = 0; int dx = 0; int32_t voltage = 0; float purcentage = 0; uint8_t color = 0x00; setExtFont("normal"); dy = RESY - getFontHeight(); dx = DoString(dx, dy, "Bat"); if (batteryCharging()) { dx = DoString(dx, dy, "(+)"); } dx = DoString(dx, dy, ":"); voltage = batteryGetVoltage(); purcentage = (voltage - (float)BAT_MIN) / ((float)BAT_MAX - BAT_MIN) * 100.0; if (purcentage >= 50) { color = RGB(0, 7, 0); } else if (purcentage >= 10) { color = RGB(7, 7, 0); } else { color = RGB(7, 0, 0); } setTextColor(GLOBAL(nickbg), color); dx = DoString(dx, dy, IntToStr(purcentage, 3, F_LONG)); DoString(dx, dy, "%"); resetColor(); }
void board_menu_draw(board_t* b) { setTextColor(0, 0xff); setIntFont(&Font_7x8); const int lineh = getFontHeight(); lcdSetCrsr(0, 0); lcdPrintln("0xb number game"); lcdPrintln("Push < > ^ v"); lcdPrintln("Add same blocks"); lcdPrint("Try to reach '"); setTextColor(colors[N_COLORS-1].bg, colors[N_COLORS-1].fg); lcdPrint("b"); setTextColor(0, 0xff); lcdPrintln("'!"); lcdNl(); for (uint i = 0; i < menu_N; i ++) { if (i == b->menu_item) lcdPrint(">> "); else lcdPrint(" "); lcdPrint(menu_str[i]); switch (i) { case 3: // width lcdPrint(" = "); lcdPrint(IntToStr(b->w, 2, 0)); break; case 4: // height lcdPrint(" = "); lcdPrint(IntToStr(b->h, 2, 0)); default: break; } lcdNl(); } if (b->menu_item == 2) { lcdPrintln(font_list[b->font]); if (b->font == FONT_NONE) { uint w = RESX / N_COLORS; for (uint8_t i = 0; i < N_COLORS; i++) { const color_t* col = colors + i; setTextColor(col->bg, col->fg); DoRect(i*w, 120, w, 10); } } else { setExtFont(font_list[b->font]); lcdPrint("789ab"); } } }
//# MENU nick changeFont void doFont(void){ getInputWaitRelease(); if( selectFile(GLOBAL(nickfont),"F0N") != 0){ lcdPrintln("No file selected."); return; }; writeFile("font.cfg",GLOBAL(nickfont),strlen(GLOBAL(nickfont))); lcdClear(); setIntFont(&Font_7x8); lcdPrintln("Test:"); setExtFont(GLOBAL(nickfont)); lcdPrintln(GLOBAL(nickname)); lcdDisplay(); setIntFont(&Font_7x8); while(!getInputRaw())delayms(10); }
void simpleNickname(void) { int dx=0; int dy=0; static uint32_t ctr=0; ctr++; setExtFont(GLOBAL(nickfont)); dx=DoString(0,0,GLOBAL(nickname)); dx=(RESX-dx)/2; if(dx<0) dx=0; dy=(RESY-getFontHeight())/2; lcdClear(); DoString(dx,dy,GLOBAL(nickname)); lcdDisplay(); getInputWait(); return; }
static void dataLove(void) { int dx = 50; int dy = 0; static int blue = 0; static int inc = 1; setTextColor(GLOBAL(nickbg), RGB(7, blue, 3)); if (blue >= 7) { inc = -1; } else if (blue <= 0) { inc = 1; } blue += inc; setExtFont(GLOBAL(nickfont)); dy= (RESY - getFontHeight()) / 3 * 2; DoString(dx, dy, "<3"); resetColor(); }
void ram(void) { int dx=0; int dy=0; static uint32_t ctr=0; ctr++; setExtFont(GLOBAL(nickfont)); dx=DoString(0,0,GLOBAL(nickname)); dx=(RESX-dx)/2; if(dx<0) dx=0; dy=(RESY-getFontHeight())/2; lcdClear(); DoString(dx,dy,GLOBAL(nickname)); lcdRefresh(); while(getInputRaw()==BTN_NONE){ delayms_queue_plus(10,0); }; return; }
void simpleNickname(void) { int dx=0; int dy=0; static uint32_t ctr=0; ctr++; setExtFont(GLOBAL(nickfont)); dx=DoString(0,0,GLOBAL(nickname)); dx=(RESX-dx)/2; if(dx<0) dx=0; dy=(RESY-getFontHeight())/3; lcdFill(GLOBAL(nickbg)); setTextColor(GLOBAL(nickbg),GLOBAL(nickfg)); DoString(dx,dy,GLOBAL(nickname)); dataLove(); batteryLevel(); lcdDisplay(); getInputWaitTimeout(300); return; }
static void mainloop(void) { int dx=0; int dy=0; setExtFont(GLOBAL(nickfont)); dx=DoString(0,0,GLOBAL(nickname)); dx=(RESX-dx)/2; if(dx<0) dx=0; dy=(RESY-getFontHeight())/2; lcdClear(); lcdSetPixel(1,1,1); DoString(dx,dy,GLOBAL(nickname)); lcdRefresh(); lk_ticks = 0; lk_button_mode = 0x00; lk_ls0 = 0x00; lk_ls1 = 0x00; lk_ls2 = 0x00; lk_ls3 = 0x00; lk_in0 = 0x00; lk_in1 = 0x00; lk_ticks = 0x0000; lk_piezo_toggle = 0x00; while(getInputRaw()==BTN_NONE){ tick_lilakit(); melody_play(); //delayms_queue(10); //XXX: this hangs the badge. delayms(10); } return; }
void ram(void) { short centerx = RESX >> 1; short centery = RESY >> 1; short i; uint8_t key = 0; for (i = 0; i < NUM_STARS; i++) { init_star(stars + i, i + 1); } static uint8_t count = 0; while(1) { count++; count%=256; key = getInputRaw(); if (key == BTN_ENTER) { break; } else if ( count%4 == 0 ) { if (key == BTN_UP && ship.speed < SPEED_MAX) { ship.speed++; } else if (key == BTN_DOWN && ship.speed > SPEED_STOP) { ship.speed--; } else if (key == BTN_NONE && count % 12 == 0) { /* converge towards default speed */ if (ship.speed < SPEED_DEFAULT) ship.speed++; else if (ship.speed > SPEED_DEFAULT) ship.speed--; } } if (ship.speed > SPEED_WARP) { set_warp_lights(1); } else { set_warp_lights(0); } if (count % 3 == 0) OFF(LED4); if (ship.speed == 0 && count%6==0) drift_ship(); int dx=0; int dy=0; setExtFont(GLOBAL(nickfont)); setTextColor(0x00,0xFF); dx=DoString(0,0,GLOBAL(nickname)); dx=(RESX-dx)/2; if(dx<0) dx=0; dy=(RESY-getFontHeight())/2; lcdFill(0x00); DoString(dx,dy,GLOBAL(nickname)); for (i = 0; i < NUM_STARS; i++) { stars[i].z -= ship.speed; if (ship.speed > 0 && stars[i].z <= 0) init_star(stars + i, i + 1); short tempx = ((stars[i].x * 30) / stars[i].z) + centerx; short tempy = ((stars[i].y * 30) / stars[i].z) + centery; if (tempx < 0 || tempx > RESX - 1 || tempy < 0 || tempy > RESY - 1) { if (ship.speed > 0) { /* if we are flying, generate new stars in front */ init_star(stars + i, i + 1); } else { /* if we are drifting, simply move those stars to the other end */ stars[i].x = (((tempx%RESX)-centerx)*stars[i].z)/30; stars[i].y = (((tempy%RESY)-centery)*stars[i].z)/30; } continue; } lcdSetPixel(tempx, tempy, 0xFF); if (stars[i].z < 50) { lcdSetPixel(tempx + 1, tempy, 0xFF); } if (stars[i].z < 20) { lcdSetPixel(tempx, tempy + 1, 0xFF); lcdSetPixel(tempx + 1, tempy + 1, 0xFF); } } lcdDisplay(); delayms_queue_plus(50,0); } set_warp_lights(0); }
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; static char delaytime=10; static char speedmode=0; static char LCDSHIFTX_EVERY_N=2; static char LCDSHIFTY_EVERY_N=2; static char ITER_EVERY_N=1; lcdClear(); setExtFont(GLOBAL(nickfont)); nickwidth=DoString(nickx,nicky,GLOBAL(nickname)); if(nickwidth<50)nickoff=30; nickheight=getFontHeight(); char stepmode=0; while (1) { draw_area(); // xor life pattern over display content lcdDisplay(); lcdClear(); // 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) { 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+nickwidth+nickoff,nicky,GLOBAL(nickname)); if(nickwidth<RESX) DoString(nickx+2*(nickwidth+nickoff),nicky,GLOBAL(nickname)); char key=stepmode?getInputWait():getInputRaw(); stepmode=0; switch(key) { case BTN_ENTER: return; case BTN_RIGHT: getInputWaitRelease(); speedmode=(speedmode+1)%7; delaytime=15; switch(speedmode) { case 0: ITER_EVERY_N=1; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break; case 1: ITER_EVERY_N=1; LCDSHIFTX_EVERY_N=2; LCDSHIFTY_EVERY_N=2; break; case 2: ITER_EVERY_N=1; LCDSHIFTX_EVERY_N=4; LCDSHIFTY_EVERY_N=4; break; case 3: ITER_EVERY_N=2; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break; case 4: ITER_EVERY_N=4; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break; case 5: ITER_EVERY_N=8; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break; case 6: delaytime=5; ITER_EVERY_N=8; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break; } break; case BTN_DOWN: stepmode=1; getInputWaitRelease(); break; case BTN_LEFT: pattern=(pattern+1)%PATTERNCOUNT; case BTN_UP: stepmode=1; reset_area(); getInputWaitRelease(); break; } delayms_queue_plus(delaytime,0); #ifdef SIMULATOR fprintf(stderr,"Iteration %d - x %d, y %d \n",iter,nickx,nicky); #endif if(iter%ITER_EVERY_N==0) calc_area(); else ++iter; } return; }
void board_draw(board_t* b, int anim_i, int anim_N) { setTextColor(0, 0xff); setIntFont(&Font_7x8); if (b->n_moves < 3) DoString(0, 0, "try to get to 'b'!"); else DoString(0, 0, IntToStr(b->n_moves, 6, 0)); bool blocks = (b->font == FONT_NONE); if (blocks) { b->cell_w = RESX / b->w; b->cell_h = (RESY - 8) / b->h; } else { setExtFont(font_list[b->font]); b->cell_w = b->cell_h = getFontHeight(); } uint centeringx = (RESX - (b->cell_w * b->w)) / 2; if (centeringx >= RESX) centeringx = 0; uint centeringy = (RESY - (b->cell_h * b->h)) / 2; if (centeringy >= RESY) centeringy = 0; if (centeringy < 8) centeringy = 8; int x, y; int xx, yy; for (x = 0; x < b->w; x ++) { for (y = 0; y < b->h; y ++) { cell_t* c = board_cell(b, x, y); xx = x * b->cell_w; yy = y * b->cell_h; if (anim_i >= anim_N) { // animation ended. c->val = c->anim_newval; c->anim_to = -1; } else if (c->anim_to >= 0) { int from_x = xx; int from_y = yy; int to_x = (c->anim_to % b->w) * b->cell_w; int to_y = (c->anim_to / b->w) * b->cell_h; xx = from_x + anim_i * (to_x - from_x) / anim_N; yy = from_y + anim_i * (to_y - from_y) / anim_N; } { const color_t* col = cell_col(c); setTextColor(col->bg, col->fg); } xx += centeringx; yy += centeringy; if ((xx >= 0) && (xx < RESX) && (yy >= 0) && (yy < RESY)) { if (blocks) { if (c->val) // don't draw empty blocks DoRect(xx, yy, b->cell_w, b->cell_h); } else DoChar(xx, yy, cell_chr(c)); } } } }
void ram(void) { int inpt,dirc,c,grows = 0,dx,dy,points,point_s=1; size_t n = 0, snake_size = 5, speed=MIN_SPEED; struct elem snake[MAX_SNAKE_LEN], food; char test[512]; /* scratch space */ o_init (test, sizeof(test)); reset(snake,&snake_size,&dirc,&speed,&points,&point_s); food = rnd(); while (1) { head: if(!(++c % speed)) { inpt = getInputRaw(); dx=DoString(0,0,IntToStrX(points,2)); dx=(SIZE_X-dx)/2; if(dx<0) dx=0; dy=(SIZE_Y-getFontHeight())/2; lcdFill(255); o_rectangle(1,0,SIZE_X-2,SIZE_Y-2); o_set_gray (0); o_fill (); //o_identity (); /* reset tranforms */ o_set_gray (50); setExtFont("UBUNTU29"); lcdSetPixel(1,1,1); DoString(dx,dy,IntToStrX(points,2)); o_set_gray (255); for(n=0;n<snake_size;++n) { o_rectangle (snake[n].x*SNAKE_DEM,snake[n].y*SNAKE_DEM,SNAKE_DEM,SNAKE_DEM); /* fill background with black */ o_fill (); /* fill with 50% { reset(snake,&snake_size); goto head; }gray */ } o_rectangle (food.x*SNAKE_DEM,food.y*SNAKE_DEM,SNAKE_DEM,SNAKE_DEM); /* fill background with black */ o_fill (); lcdDisplay(); if (inpt == BTN_UP && dirc != 1) { dirc = 3; } else if (inpt == BTN_DOWN && dirc != 3) { dirc = 1; } else if (inpt == BTN_LEFT && dirc != 0) { dirc = 2; } else if (inpt == BTN_RIGHT && dirc !=2) { dirc = 0; } // struct elem t = snake[snake_size-1]; if(dirc == 0) ++t.x; else if(dirc == 1) ++t.y; else if(dirc == 2) --t.x; else if(dirc == 3) --t.y; if(t.x < 0 || t.y < 0 || t.y > SIZE_Y/SNAKE_DEM-1 || t.x > SIZE_X/SNAKE_DEM) { reset(snake,&snake_size,&dirc,&speed,&points,&point_s); goto head; } for(n=0;n<snake_size-1;++n) { if(snake[n].x == t.x && snake[n].y == t.y) { reset(snake,&snake_size,&dirc,&speed,&points,&point_s); goto head; } else if(snake[n].x == food.x && snake[n].y == food.y) { grows = 1; ++snake_size; ++points; if(speed > MAX_SPEED) --speed; food = rnd(); } } if(!grows) { for(n=0;n<snake_size-1;++n) { snake[n] = snake[n+1]; } } else grows = 0; snake[snake_size-1] = t; } else delayms(3); } }