static void init_rockblox (bool resume) { char score_name[50]; struct tm* tm; tm = rb->get_time(); rb->snprintf(score_name, sizeof(score_name), "%04d%02d%02d %02d%02d%02d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); #ifdef HAVE_LCD_BITMAP rb->lcd_bitmap (rockblox_background, 0, 0, LCD_WIDTH, LCD_HEIGHT); #else /* HAVE_LCD_CHARCELLS */ pgfx_display (0, 0); pgfx_display_block (3, 0, 3, 1); pgfx_display_block (4, 0, 3, 0); rb->lcd_puts(4, 1, " "); pgfx_clear_display(); pgfx_fillrect (3, 0, 2, 14); pgfx_fillrect (15, 7, 2, 7); pgfx_update(); #endif if (!resume) { rockblox_status.level = 1; rockblox_status.lines = 0; rockblox_status.score = 0; rockblox_status.nf = t_rand(BLOCKS_NUM); init_board (); new_block (); } draw_next_block(); show_details (); #ifdef HIGH_SCORE_Y show_highscores (); #endif }
enum plugin_status plugin_start(const void* parameter) { int button; int timer = 10; int x = (DISPLAY_WIDTH / 2) - (LOGO_WIDTH / 2); int y = (DISPLAY_HEIGHT / 2) - (LOGO_HEIGHT / 2); int dx; int dy; #ifdef HAVE_LCD_CHARCELLS int cpos = -1; int old_cpos = -1; #endif (void)parameter; #ifdef HAVE_LCD_CHARCELLS if (!pgfx_init(4, 2)) { rb->splash(HZ*2, "Old LCD :("); return PLUGIN_OK; } #endif rb->srand(*rb->current_tick); dx = rb->rand()%(2*RAND_SCALE+1) - RAND_SCALE; dy = rb->rand()%(2*RAND_SCALE+1) - RAND_SCALE; while (1) { #ifdef HAVE_LCD_BITMAP rb->lcd_clear_display(); rb->lcd_bitmap(LOGO, x, y, LOGO_WIDTH, LOGO_HEIGHT); #ifdef REMOTE_LOGO rb->lcd_remote_clear_display(); rb->lcd_remote_bitmap(REMOTE_LOGO, (x * (REMOTE_WIDTH - REMOTE_LOGO_WIDTH)) / (DISPLAY_WIDTH - LOGO_WIDTH), (y * (REMOTE_HEIGHT - REMOTE_LOGO_HEIGHT)) / (DISPLAY_HEIGHT - LOGO_HEIGHT), REMOTE_LOGO_WIDTH, REMOTE_LOGO_HEIGHT); #endif #else pgfx_clear_display(); pgfx_mono_bitmap(LOGO, x % 5, y, LOGO_WIDTH, LOGO_HEIGHT); cpos = x / 5; #endif x += dx; if (x < 0) { dx = -dx; x = 0; } if (x > DISPLAY_WIDTH - LOGO_WIDTH) { dx = -dx; x = DISPLAY_WIDTH - LOGO_WIDTH; } y += dy; if (y < 0) { dy = -dy; y = 0; } if (y > DISPLAY_HEIGHT - LOGO_HEIGHT) { dy = -dy; y = DISPLAY_HEIGHT - LOGO_HEIGHT; } #ifdef HAVE_LCD_BITMAP rb->lcd_update(); #ifdef REMOTE_LOGO rb->lcd_remote_update(); #endif #else if (cpos != old_cpos) { rb->lcd_clear_display(); pgfx_display(cpos, 0); old_cpos = cpos; } pgfx_update(); #endif rb->sleep(HZ/timer); button = rb->button_get(false); switch (button) { case LP_QUIT: #ifdef CONFIG_REMOTE_KEYPAD case LP_R_QUIT: #endif #ifdef HAVE_LCD_CHARCELLS pgfx_release(); #endif return PLUGIN_OK; case LP_DEC_X: #ifdef CONFIG_REMOTE_KEYPAD case LP_R_DEC_X: #endif if (dx) dx += (dx < 0) ? 1 : -1; break; case LP_INC_X: #ifdef CONFIG_REMOTE_KEYPAD case LP_R_INC_X: #endif dx += (dx < 0) ? -1 : 1; break; case LP_DEC_Y: #ifdef CONFIG_REMOTE_KEYPAD case LP_R_DEC_Y: #endif if (dy) dy += (dy < 0) ? 1 : -1; break; case LP_INC_Y: #ifdef CONFIG_REMOTE_KEYPAD case LP_R_INC_Y: #endif dy += (dy < 0) ? -1 : 1; break; default: if (rb->default_event_handler(button) == SYS_USB_CONNECTED) { #ifdef HAVE_LCD_CHARCELLS pgfx_release(); #endif return PLUGIN_USB_CONNECTED; } break; } } }