This repository has been archived by the owner on Nov 15, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
ChangeState
Antek Bizon edited this page Mar 5, 2022
·
1 revision
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;
}