Skip to content
This repository has been archived by the owner on Nov 15, 2022. It is now read-only.

ChangeState

Antek Bizon edited this page Mar 5, 2022 · 1 revision

ChangeState

Do zmiany stanu używana jest funkcja ChangeState. W kilku przypadkach oprócz samej zmiany, wywołuje odpowiednie funkcje, np do odegrania melodii lub ustawienia zmienne animacji (animVec, endAnim, newAnim, frameCounter, sequenceFrameCounter) na odpowiednie wartości.

void Game::ChangeState(State newState) {
    if (state == newState) return;

    switch (newState) {
    case State::ACTIVE:
        if (state == State::PAUSED && !endAnim) {
            endAnim = true;
            newAnim = newState;
            return;
        }
        break;
    case State::PAUSED:
        if (state == State::SAVE_MENU && !endAnim) {
            endAnim = true;
            newAnim = newState;
            return;
        } else if (state == State::ACTIVE) {
            for (int i = 0; i < NUM_AUDIO; i++) {
                if (IsSoundPlaying(audio[i]))
                    StopSound(audio[i]);
            }
        }
        ingameMenu.animVec = { screenWidth, screenHeight - 50 };
        break;
    case State::MOD_MENU:
        modMenu.animVec = { 200, 0 };
        break;
    case State::DIFFLVL_MENU:
        ingameMenu.Reload({ "Continue", "Back to Menu", "Quit" });
        diffLvlMenu.animVec = { 200, 0 };
        break;
    case State::MAIN_MENU:
        mainMenu.animVec = { 200, 0 };
        ingameMenu.Reload({ "Continue", "Save Game", "Back to Menu", "Quit" });
        if ((state == State::LOAD_MENU || state == State::RANKING || state == State::LEVEL_SELECTOR) && !endAnim) {
            endAnim = true;
            newAnim = newState;
            return;
        }
        break;
    case State::SAVE_MENU:
        if (state == State::PAUSED && !endAnim) {
            endAnim = true;
            newAnim = newState;
            return;
        }
        saveMenu.animVec = { screenWidth, screenHeight - 50 };
        break;
    case State::LOAD_MENU:
        loadMenu.animVec = { screenWidth, 0 };
        animVec = { 600, 0 };
        break;
    case State::LEVEL_SELECTOR:
        if (modNum == 2)
            level = 1;
        else
            level = 16;
        animVec = { screenWidth - 300, 0 };
        break;
    case State::RANKING:
        animVec = { screenWidth - 300, 0 };
        break;
    case State::GAME_OVER:
        Unspawn();
        for (int i = 0; i < NUM_AUDIO; i++) {
            if (IsSoundPlaying(audio[i]))
                StopSound(audio[i]);
        }
        frameCounter = 0;
        sequenceFrameCounter = 4 * 60;
        animVec = { 0, 0 };
        PlaySound(audio[GAME_OVER]);
        break;
    case State::LEVEL_FINISHED:
        Unspawn();
        for (int i = 0; i < NUM_AUDIO; i++) {
            if (IsSoundPlaying(audio[i]))
                StopSound(audio[i]);
        }
        timeBonus = elapsedLevelTime * 25;
        score += timeBonus;
        frameCounter = 0;
        sequenceFrameCounter = 4 * 60;
        animVec = { 0, 0 };
        PlaySound(audio[LEVEL_COMPLETED]);
        break;
    case State::GAME_START:
        frameCounter = 0;
        sequenceFrameCounter = 60;
        animVec = { screenWidth * 2, 0 };
        PlaySound(audio[LEVEL_START]);
        break;
    case State::GAME_FINISHED:
        for (int i = 0; i < NUM_AUDIO; i++) {
            if (IsSoundPlaying(audio[i]))
                StopSound(audio[i]);
        }
        Unspawn();
        frameCounter = 0;
        sequenceFrameCounter = 4 * 60;
        animVec = { 0, 0 };
        //PlaySound(audio[GAME_COMPLETED]);
        break;
    case State::GAME_SAVED:
        frameCounter = 0;
        sequenceFrameCounter = 2 * 60;
        animVec = { 0, 0 };
        break;
    case State::ERROR:
        frameCounter = 0;
        sequenceFrameCounter = 2 * 60;
        PlaySound(audio[ERROR]);
        break;
    }
    state = newState;
}
Clone this wiki locally