static void state_update(){ old_audio_time = audio_time; audio_time = audio_progress; audio_dt += audio_time - old_audio_time; while(audio_dt >= 441*2){ audio_dt -= 441*2; ms_since_last_beat += 5; for(int i=0;i<n_notes;i++){ notes[i].y--; if(notes[i].done || notes[i].y < -30){ score_greatest_combo = MAX(score_greatest_combo, score_combo); score_combo = 0; remove_note(i); i--; } } } redraw_required = 1; if(key[KEY_ESC]){ State_change(MainMenuState); } if(key[KEY_A]){ hit_notes(0); } if(key[KEY_S]){ hit_notes(1); } if(key[KEY_D]){ hit_notes(2); } if(key[KEY_F]){ hit_notes(3); } if(feedback_counter > 0){ feedback_counter--; } int ms_per_beat = ms_per_measure / beats_per_measure; while(ms_since_last_beat > ms_per_beat){ ms_since_last_beat -= ms_per_beat; beat++; if(beat > beats_per_measure){ beat -= beats_per_measure; measure++; if(song->measures[measure] == NULL){ State_change(ScoreScreenState); return; } beats_per_measure = song->measures[measure]->n_rows; if(measure == song->BPMs[current_bpm_index + 1]){ current_bpm_index += 2; current_bpm = song->BPMs[current_bpm_index]; ms_per_measure = 4*60000000 / current_bpm; } } for(int i=0;i<4;i++){ if(song->measures[measure]->rows[beat][i] == '1'){ add_note(i, 244); total_notes++; } } } }
static void state_update(){ if(key[KEY_ESC]){ State_change(MainMenuState); } }