Fixed leaving the screen and coming back

This commit is contained in:
David Volovskiy 2024-08-18 10:35:36 -04:00
parent 4257b71562
commit 935ede9fda
2 changed files with 23 additions and 14 deletions

View File

@ -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:

View File

@ -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