Fixed the long delays when beginning a game

This commit is contained in:
David Volovskiy 2024-07-16 09:29:19 -04:00
parent e2870eb7af
commit ed3c4d3c30

View File

@ -55,9 +55,9 @@ typedef enum {
typedef struct { typedef struct {
uint32_t obst_pattern; uint32_t obst_pattern;
int16_t obst_indx : 8; uint16_t obst_indx : 8;
int16_t jump_state : 3; uint16_t jump_state : 3;
int16_t sec_before_moves : 3; uint16_t sec_before_moves : 3;
bool loc_2_on; bool loc_2_on;
bool loc_3_on; bool loc_3_on;
} game_state_t; } game_state_t;
@ -287,10 +287,8 @@ bool endless_runner_face_loop(movement_event_t event, movement_settings_t *setti
switch (event.event_type) { switch (event.event_type) {
case EVENT_ACTIVATE: case EVENT_ACTIVATE:
state -> curr_screen = SCREEN_TITLE;
if (state -> soundOn) watch_set_indicator(WATCH_INDICATOR_BELL); if (state -> soundOn) watch_set_indicator(WATCH_INDICATOR_BELL);
display_title(state); display_title(state);
state -> curr_score = 0;
break; break;
case EVENT_TICK: case EVENT_TICK:
switch (state -> curr_screen) switch (state -> curr_screen)
@ -299,10 +297,11 @@ bool endless_runner_face_loop(movement_event_t event, movement_settings_t *setti
case SCREEN_LOSE: case SCREEN_LOSE:
break; break;
default: default:
if (game_state.sec_before_moves == 0) if (game_state.sec_before_moves != 0) {
success_jump = display_obstacles(state); if (event.subsecond == 0) --game_state.sec_before_moves;
else if (event.subsecond == 0) break;
if(--game_state.sec_before_moves == 0) game_state.obst_pattern = get_random_legal(0, state -> difficulty); }
success_jump = display_obstacles(state);
switch (game_state.jump_state) switch (game_state.jump_state)
{ {
case JUMP: case JUMP:
@ -336,6 +335,10 @@ bool endless_runner_face_loop(movement_event_t event, movement_settings_t *setti
movement_request_tick_frequency(state -> difficulty == DIFF_EASY ? FREQ_EASY : FREQ); movement_request_tick_frequency(state -> difficulty == DIFF_EASY ? FREQ_EASY : FREQ);
watch_display_string(" ", 4); watch_display_string(" ", 4);
display_ball(false); display_ball(false);
do // Avoid the first array of obstacles being a boring line of 0s
{
game_state.obst_pattern = get_random_legal(0, state -> difficulty);
} while (game_state.obst_pattern == 0);
display_score(state -> curr_score); display_score(state -> curr_score);
if (state -> soundOn){ if (state -> soundOn){
watch_buzzer_play_note(BUZZER_NOTE_C5, 200); watch_buzzer_play_note(BUZZER_NOTE_C5, 200);