void TitleScreenGatherInput(bool* Continue) { SDL_Event ev; while (SDL_PollEvent(&ev)) { if (IsEnterGamePressingEvent(&ev)) WaitingForRelease = true; else if (IsEnterGameReleasingEvent(&ev)) { WaitingForRelease = false; ToGame(); if (WelcomeMessage != NULL) { free(WelcomeMessage); WelcomeMessage = NULL; } return; } else if (IsExitGameEvent(&ev)) { *Continue = false; if (WelcomeMessage != NULL) { free(WelcomeMessage); WelcomeMessage = NULL; } return; } } }
void TitleScreenDoLogic(bool* Continue, bool* Error, Uint32 Milliseconds) { (void)Continue; (void)Error; cpSpaceStep(space.Space, Milliseconds * 0.001); for (int i = 0; i < MAX_PLAYERS; i++) { PlayerUpdate(&players[i], Milliseconds); // Check which players have fallen below their start pads cpVect pos = cpBodyGetPosition(players[i].Body); if (pos.y < BLOCK_Y) { if (!playersEnabled[i]) { // New player entered countdownMs = COUNTDOWN_START_MS; SoundPlay(SoundStart, 1.0); } playersEnabled[i] = true; } } if (countdownMs >= 0) { const int countdownMsNext = countdownMs - Milliseconds; // Play a beep every second if ((countdownMs / 1000) > (countdownMsNext / 1000)) { SoundPlay(SoundBeep, 1.0); } // Start game if counted down to zero if (countdownMsNext <= 0) { TitleScreenEnd(); ToGame(); return; } countdownMs = countdownMsNext; } Animation *a = Start ? &TitleAnim : &GameOverAnim; AnimationUpdate(a, Milliseconds); HighScoreDisplayUpdate(&HSD, Milliseconds); }