diff --git a/src/dialogs.c b/src/dialogs.c index bb2a3e1..a2b77ae 100644 --- a/src/dialogs.c +++ b/src/dialogs.c @@ -151,8 +151,57 @@ void showtext_dialog_end(Game *game, bopti_image_t *face, char *text) { showtext_opt(game, face, text, NULL, false, true); } -char **choices; +#define CHOICE_BOX_HEIGHT 10 +#define CHOICE_BOX_PADDING_TOP 3 -void _choice_call_before_end(void) { - // +char **choices; +int choices_amount, default_choice; + +int _choice_call_before_end(void) { + int i, key; + /* Make a little animation because we looove little animations ;) */ + for(i=0;iframe_duration < 20) sleep(); + game->frame_duration = 0; + } + const int choice_size = DWIDTH/choices_amount; + int arrow_width, selected = default_choice; + dsize(">", FONT_USED, &arrow_width, NULL); + do{ + /* Clear the box. */ + drect(0, (BOX_HEIGHT+CHOICE_BOX_HEIGHT)*PXSIZE, (DWIDTH/8)*(DWIDTH/8), + (BOX_HEIGHT+CHOICE_BOX_HEIGHT)*PXSIZE, C_WHITE); + for(i=0;i"); + dtext(i*choice_size+arrow_width, + BOX_HEIGHT+PXSIZE*CHOICE_BOX_PADDING_TOP, C_BLACK, + choices[i]); + } + blit(); + key = getkey().key; + if(key == KEY_LEFT && selected > 0) selected--; + else if(key == KEY_RIGHT && selected < choices_amount) selected++; + }while(key != KEY_EXE); + /* Make a little animation because we looove little animations ;) */ + for(i=DWIDTH/8+1;i>0;i++){ + drect(0, (BOX_HEIGHT+CHOICE_BOX_HEIGHT)*PXSIZE, i*(DWIDTH/8), + (BOX_HEIGHT+CHOICE_BOX_HEIGHT)*PXSIZE, C_WHITE); + drect(i*(DWIDTH/8), 0, i*(DWIDTH/8)+PXSIZE, + (BOX_HEIGHT+CHOICE_BOX_HEIGHT)*PXSIZE, C_BLACK); + drect(0, (BOX_HEIGHT+CHOICE_BOX_HEIGHT)*PXSIZE, i*(DWIDTH/8), + (BOX_HEIGHT+CHOICE_BOX_HEIGHT+1)*PXSIZE, C_BLACK); + blit(); + while(game->frame_duration < 20) sleep(); + game->frame_duration = 0; + } + return selected; }