#include "watch_utility.h"
#endif
+#define FREQ_FAST 4
+#define FREQ 2
+
/*
TODO:
* Add quick iteration (8x freq to get to the letter we want)
#endif
}
+static bool _quick_ticks_running;
+static void start_quick_cyc(void){
+ _quick_ticks_running = true;
+ movement_request_tick_frequency(FREQ_FAST);
+}
+
+static void stop_quick_cyc(void){
+ _quick_ticks_running = false;
+ movement_request_tick_frequency(FREQ);
+}
+
static void display_letter(wordle_state_t *state, bool display_dash) {
char buf[1 + 1];
if (state->word_elements[state->position] >= _num_valid_letters) {
for (size_t j = 0; j < WORDLE_LENGTH; j++) {
if (checked_letter_in_answer[j] != WORDLE_LETTER_WRONG) continue;
if (_valid_letters[state->word_elements[i]] == _legal_words[state->curr_answer][j]) {
- printf("me: %c them: %c\r\n", _valid_letters[state->word_elements[i]], _legal_words[state->curr_answer][j]);
state->word_elements_result[i] = checked_letter_in_answer[j] = WORDLE_LETTER_WRONG_LOC;
break;
}
}
}
-
- for (size_t i = 0; i < WORDLE_LENGTH; i++) {
- printf("%d : %d\r\n", i, state->word_elements_result[i]);
- }
-
-
-
return is_exact_match;
}
display_attempt(state->attempt);
display_all_letters(state);
watch_display_string("-", 5);
- printf("rand: %s\r\n", _legal_words[state->curr_answer]);
+#if __EMSCRIPTEN__
+ printf("ANSWER: %s\r\n", _legal_words[state->curr_answer]);
+#endif
}
static void display_title(wordle_state_t *state) {
return curr_pos;
}
+static void get_next_letter(uint8_t curr_pos, uint8_t *word_elements) {
+ if (word_elements[curr_pos] >= _num_valid_letters) word_elements[curr_pos] = 0;
+ else word_elements[curr_pos] = (word_elements[curr_pos] + 1) % _num_valid_letters;
+}
+
+static void get_prev_letter(uint8_t curr_pos, uint8_t *word_elements) {
+ if (word_elements[curr_pos] >= _num_valid_letters) word_elements[curr_pos] = _num_valid_letters - 1;
+ else word_elements[curr_pos] = (word_elements[curr_pos] + _num_valid_letters - 1) % _num_valid_letters;
+}
+
#if USE_DAILY_STREAK
static uint32_t get_day_unix_time(void) {
watch_date_time now = watch_rtc_get_date_time();
void wordle_face_activate(movement_settings_t *settings, void *context) {
(void) settings;
wordle_state_t *state = (wordle_state_t *)context;
- movement_request_tick_frequency(2);
+ movement_request_tick_frequency(FREQ);
#if USE_DAILY_STREAK
if (state->prev_day <= (get_day_unix_time() + (60 *60 * 24))) state->streak = 0;
#endif
switch (state->curr_screen)
{
case SCREEN_PLAYING:
- if (event.subsecond % 2) {
- display_letter(state, true);
- } else {
- watch_display_string(" ", state->position + 5);
+ if (_quick_ticks_running) {
+ if (watch_get_pin_level(BTN_ALARM)){
+ get_next_letter(state->position, state->word_elements);
+ display_letter(state, true);
+ }
+ else stop_quick_cyc();
+ }
+ else {
+ if (event.subsecond % 2) {
+ display_letter(state, true);
+ } else {
+ watch_display_string(" ", state->position + 5);
+ }
}
break;
case SCREEN_RESULT:
break;
}
break;
- case EVENT_LIGHT_BUTTON_UP:
+ case EVENT_ALARM_BUTTON_UP:
if (act_on_btn(state)) break;
- if (state->word_elements[state->position] >= _num_valid_letters) state->word_elements[state->position] = 0;
- else state->word_elements[state->position] = (state->word_elements[state->position] + 1) % _num_valid_letters;
+ get_next_letter(state->position, state->word_elements);
display_letter(state, true);
break;
- case EVENT_LIGHT_LONG_PRESS:
- if (state->word_elements[state->position] >= _num_valid_letters) state->word_elements[state->position] = _num_valid_letters - 1;
- else state->word_elements[state->position] = (state->word_elements[state->position] + _num_valid_letters - 1) % _num_valid_letters;
+ case EVENT_ALARM_LONG_PRESS:
+ if (state->curr_screen != SCREEN_PLAYING) break;
+ get_prev_letter(state->position, state->word_elements);
display_letter(state, true);
+ break;
+ case EVENT_ALARM_LONGER_PRESS:
+ if (state->curr_screen != SCREEN_PLAYING) break;
+ get_next_letter(state->position, state->word_elements);
+ display_letter(state, true);
+ start_quick_cyc();
break;
- case EVENT_ALARM_BUTTON_UP:
+ case EVENT_LIGHT_BUTTON_UP:
if (act_on_btn(state)) break;
display_letter(state, true);
if (state->word_elements[state->position] == _num_valid_letters) break;
break;
}
break;
- case EVENT_ALARM_LONG_PRESS:
+ case EVENT_LIGHT_LONG_PRESS:
+ if (state->curr_screen != SCREEN_PLAYING) break;
display_letter(state, true);
state->position = get_prev_pos(state->position, state->word_elements_result);
break;