Fixed leaving the screen and coming back
This commit is contained in:
parent
4257b71562
commit
935ede9fda
@ -267,19 +267,19 @@ static void display_attempt(uint8_t attempt) {
|
|||||||
watch_display_string(buf, 3);
|
watch_display_string(buf, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_start_of_attempt(wordle_state_t *state, bool reset_all_letters) {
|
static void display_playing(wordle_state_t *state) {
|
||||||
if (reset_all_letters) {
|
|
||||||
for (size_t i = 0; i < WORDLE_LENGTH; i++) {
|
|
||||||
if (state->word_elements_result[i] != WORDLE_LETTER_CORRECT)
|
|
||||||
state->word_elements[i] = _num_valid_letters;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
display_attempt(state->attempt);
|
display_attempt(state->attempt);
|
||||||
display_all_letters(state);
|
display_all_letters(state);
|
||||||
state->position = get_first_pos(state->word_elements_result);
|
|
||||||
state->curr_screen = SCREEN_PLAYING;
|
state->curr_screen = SCREEN_PLAYING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void reset_incorrect_elements(wordle_state_t *state) {
|
||||||
|
for (size_t i = 0; i < WORDLE_LENGTH; i++) {
|
||||||
|
if (state->word_elements_result[i] != WORDLE_LETTER_CORRECT)
|
||||||
|
state->word_elements[i] = _num_valid_letters;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void reset_board(wordle_state_t *state) {
|
static void reset_board(wordle_state_t *state) {
|
||||||
for (size_t i = 0; i < WORDLE_LENGTH; i++) {
|
for (size_t i = 0; i < WORDLE_LENGTH; i++) {
|
||||||
state->word_elements[i] = _num_valid_letters;
|
state->word_elements[i] = _num_valid_letters;
|
||||||
@ -293,7 +293,9 @@ static void reset_board(wordle_state_t *state) {
|
|||||||
state->attempt = 0;
|
state->attempt = 0;
|
||||||
watch_clear_colon();
|
watch_clear_colon();
|
||||||
watch_display_string(" ", 4);
|
watch_display_string(" ", 4);
|
||||||
show_start_of_attempt(state, true);
|
reset_incorrect_elements(state);
|
||||||
|
state->position = get_first_pos(state->word_elements_result);
|
||||||
|
display_playing(state);
|
||||||
watch_display_string("-", 5);
|
watch_display_string("-", 5);
|
||||||
#if __EMSCRIPTEN__
|
#if __EMSCRIPTEN__
|
||||||
printf("ANSWER: %s\r\n", _legal_words[state->curr_answer]);
|
printf("ANSWER: %s\r\n", _legal_words[state->curr_answer]);
|
||||||
@ -391,7 +393,9 @@ static bool act_on_btn(wordle_state_t *state) {
|
|||||||
switch (state->curr_screen)
|
switch (state->curr_screen)
|
||||||
{
|
{
|
||||||
case SCREEN_RESULT:
|
case SCREEN_RESULT:
|
||||||
show_start_of_attempt(state, true);
|
reset_incorrect_elements(state);
|
||||||
|
state->position = get_first_pos(state->word_elements_result);
|
||||||
|
display_playing(state);
|
||||||
return true;
|
return true;
|
||||||
case SCREEN_TITLE:
|
case SCREEN_TITLE:
|
||||||
#if USE_DAILY_STREAK
|
#if USE_DAILY_STREAK
|
||||||
@ -401,7 +405,7 @@ static bool act_on_btn(wordle_state_t *state) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (state->playing)
|
if (state->playing)
|
||||||
show_start_of_attempt(state, true);
|
display_playing(state);
|
||||||
else
|
else
|
||||||
display_streak(state);
|
display_streak(state);
|
||||||
return true;
|
return true;
|
||||||
@ -417,7 +421,8 @@ static bool act_on_btn(wordle_state_t *state) {
|
|||||||
return true;
|
return true;
|
||||||
case SCREEN_NO_DICT:
|
case SCREEN_NO_DICT:
|
||||||
case SCREEN_ALREADY_GUESSED:
|
case SCREEN_ALREADY_GUESSED:
|
||||||
show_start_of_attempt(state, false);
|
state->position = get_first_pos(state->word_elements_result);
|
||||||
|
display_playing(state);
|
||||||
return true;
|
return true;
|
||||||
#if USE_DAILY_STREAK
|
#if USE_DAILY_STREAK
|
||||||
case SCREEN_WAIT:
|
case SCREEN_WAIT:
|
||||||
@ -509,6 +514,10 @@ void wordle_face_activate(movement_settings_t *settings, void *context) {
|
|||||||
if (state->curr_day != now) state->playing = false;
|
if (state->curr_day != now) state->playing = false;
|
||||||
#endif
|
#endif
|
||||||
state->using_random_guess = false;
|
state->using_random_guess = false;
|
||||||
|
if (state->playing && state->curr_screen >= SCREEN_WIN) {
|
||||||
|
reset_incorrect_elements(state);
|
||||||
|
state->position = get_first_pos(state->word_elements_result);
|
||||||
|
}
|
||||||
movement_request_tick_frequency(2);
|
movement_request_tick_frequency(2);
|
||||||
display_title(state);
|
display_title(state);
|
||||||
}
|
}
|
||||||
@ -581,7 +590,7 @@ bool wordle_face_loop(movement_event_t event, movement_settings_t *settings, voi
|
|||||||
display_title(state);
|
display_title(state);
|
||||||
break;
|
break;
|
||||||
case EVENT_LOW_ENERGY_UPDATE:
|
case EVENT_LOW_ENERGY_UPDATE:
|
||||||
if (state->curr_screen == SCREEN_TITLE)
|
if (state->curr_screen != SCREEN_TITLE)
|
||||||
display_title(state);
|
display_title(state);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -87,7 +87,6 @@ typedef enum {
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SCREEN_PLAYING = 0,
|
SCREEN_PLAYING = 0,
|
||||||
SCREEN_RESULT,
|
|
||||||
SCREEN_TITLE,
|
SCREEN_TITLE,
|
||||||
SCREEN_STREAK,
|
SCREEN_STREAK,
|
||||||
#if USE_DAILY_STREAK
|
#if USE_DAILY_STREAK
|
||||||
@ -95,6 +94,7 @@ typedef enum {
|
|||||||
#endif
|
#endif
|
||||||
SCREEN_WIN,
|
SCREEN_WIN,
|
||||||
SCREEN_LOSE,
|
SCREEN_LOSE,
|
||||||
|
SCREEN_RESULT,
|
||||||
SCREEN_NO_DICT,
|
SCREEN_NO_DICT,
|
||||||
SCREEN_ALREADY_GUESSED,
|
SCREEN_ALREADY_GUESSED,
|
||||||
SCREEN_COUNT
|
SCREEN_COUNT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user