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
Update
Antek Bizon edited this page Mar 5, 2022
·
1 revision
Ona odpowiada za to co i kiedy powinno zmienić swoją wartość. Robi to na podstawie aktualnego stanu (state) gry. Przykładowo, gdy stan gry ustawiony jest MAIN_MENU, funkcja sprawdzi czy wybraliśmy jakiś element w menu. Jeśli tak to zmieni stan gry na na przykład GAME_START, co w rezultacie doprowadzi do rozpoczęcia się gry.
void Game::Update() {
frameCounter++;
for (int i = 0; i < 4; i++) {
if (lifeTime[i] != 0)
CheckTime();
}
if (GetKeyPressed() == KEY_ESCAPE) {
if (state == State::PAUSED) {
ChangeState(State::ACTIVE);
PlaySound(audio[MENU_BACK]);
} else if (state == State::ACTIVE) {
ChangeState(State::PAUSED);
PlaySound(audio[MENU_BACK]);
} else if (state == State::SAVE_MENU) {
ChangeState(State::PAUSED);
PlaySound(audio[MENU_BACK]);
} else if (state == State::LOAD_MENU) {
ChangeState(State::MAIN_MENU);
PlaySound(audio[MENU_BACK]);
} else if (state == State::MAIN_MENU) {
ChangeState(State::MOD_MENU);
PlaySound(audio[MENU_BACK]);
} else if (state == State::DIFFLVL_MENU) {
ChangeState(State::MOD_MENU);
PlaySound(audio[MENU_BACK]);
} else if (state == State::RANKING) {
ChangeState(State::MAIN_MENU);
PlaySound(audio[MENU_BACK]);
}
}
switch (state) {
case Game::State::MAIN_MENU:
if (mainMenu.selected == "Start") {
ChangeState(State::GAME_START);
mainMenu.selected = "";
} else if (mainMenu.selected == "Load") {
ChangeState(State::LOAD_MENU);
loadMenu.Reload(FindLoadFiles());
mainMenu.selected = "";
} else if (mainMenu.selected == "Level") {
ChangeState(State::LEVEL_SELECTOR);
mainMenu.selected = "";
} else if (mainMenu.selected == "Ranking") {
ChangeState(State::RANKING);
mainMenu.selected = "";
}
mainMenu.Update();
break;
case Game::State::MOD_MENU:
if (modMenu.selected == "Mod 1") {
ChangeState(State::DIFFLVL_MENU);
modNum = 1;
modMenu.selected = "";
} else if (modMenu.selected == "Mod 2") {
ChangeState(State::MAIN_MENU);
modNum = 2;
level = 1;
modMenu.selected = "";
} else if (modMenu.selected == "Mod 3") {
ChangeState(State::MAIN_MENU);
modNum = 3;
level = 16;
modMenu.selected = "";
}
modMenu.Update();
break;
case Game::State::DIFFLVL_MENU:
if (diffLvlMenu.selected == "Easy") {
level = GetRandomValue(1, 5);
ChangeState(State::GAME_START);
diffLvlMenu.selected = "";
} else if (diffLvlMenu.selected == "Normal") {
level = GetRandomValue(6, 10);
ChangeState(State::GAME_START);
diffLvlMenu.selected = "";
} else if (diffLvlMenu.selected == "Hard") {
level = GetRandomValue(11, 15);
ChangeState(State::GAME_START);
diffLvlMenu.selected = "";
}
diffLvlMenu.Update();
break;
case Game::State::LEVEL_SELECTOR:
if (IsKeyPressed(KEY_ENTER)) {
PlaySound(audio[MENU_ENTER]);
ChangeState(State::GAME_START);
} else if (IsKeyPressed(KEY_ESCAPE)) {
ChangeState(State::MAIN_MENU);
} else if (IsKeyPressed(KEY_RIGHT)) {
if (modNum == 2) {
if (level < 15) {
level += 1;
PlaySoundMulti(audio[MENU_SELECT]);
}
} else {
if (level < NUM_LEVELS) {
level += 1;
PlaySoundMulti(audio[MENU_SELECT]);
}
}
} else if (IsKeyPressed(KEY_LEFT)) {
if (modNum == 2) {
if (level > 1) {
level -= 1;
PlaySoundMulti(audio[MENU_SELECT]);
}
} else {
if (level > 16) {
level -= 1;
PlaySoundMulti(audio[MENU_SELECT]);
}
}
}
break;
case Game::State::SAVE_MENU:
if (saveMenu.selected == "Save 1") {
saveNum = 1;
ChangeState(State::OVERWRITE_MENU);
saveMenu.selected = "";
} else if (saveMenu.selected == "Save 2") {
saveNum = 2;
ChangeState(State::OVERWRITE_MENU);
saveMenu.selected = "";
} else if (saveMenu.selected == "Save 3") {
saveNum = 3;
ChangeState(State::OVERWRITE_MENU);
saveMenu.selected = "";
} else if (saveMenu.selected == "Save 4") {
saveNum = 4;
ChangeState(State::OVERWRITE_MENU);
saveMenu.selected = "";
} else if (saveMenu.selected == "Empty slot") {
if (SaveGame(numFiles + 1))
ChangeState(State::GAME_SAVED);
else
ChangeState(State::ERROR);
saveMenu.selected = "";
}
saveMenu.Update();
break;
case Game::State::OVERWRITE_MENU:
if (overwriteMenu.selected == "Overwrite?") {
if (SaveGame(saveNum))
ChangeState(State::GAME_SAVED);
else
ChangeState(State::ERROR);
} else if (overwriteMenu.selected == "Cancel")
ChangeState(State::SAVE_MENU);
overwriteMenu.selected = "";
overwriteMenu.Update();
break;
case Game::State::LOAD_MENU:
if (loadMenu.selected == "Save 1") {
LoadGame(1);
ChangeState(State::ACTIVE);
loadMenu.selected = "";
} else if (loadMenu.selected == "Save 2") {
LoadGame(2);
ChangeState(State::ACTIVE);
loadMenu.selected = "";
} else if (loadMenu.selected == "Save 3") {
LoadGame(3);
ChangeState(State::ACTIVE);
loadMenu.selected = "";
} else if (loadMenu.selected == "Save 4") {
LoadGame(4);
ChangeState(State::ACTIVE);
loadMenu.selected = "";
} else if (loadMenu.remove == "Save 1") {
RemoveSave(1);
loadMenu.remove = "";
} else if (loadMenu.remove == "Save 2") {
RemoveSave(2);
loadMenu.remove = "";
} else if (loadMenu.remove == "Save 3") {
RemoveSave(3);
loadMenu.remove = "";
} else if (loadMenu.remove == "Save 4") {
RemoveSave(4);
loadMenu.remove = "";
}
loadMenu.Update();
break;
case Game::State::ACTIVE:
if (lives <= 0) {
ChangeState(State::GAME_OVER);
break;
}
if (endLevelTime > 0) {
std::time_t now = std::time(nullptr);
elapsedLevelTime = endLevelTime - now;
if (elapsedLevelTime <= 0) {
elapsedLevelTime = 0;
endLevelTime = 0;
ChangeState(State::GAME_OVER);
}
}
MoveSprites();
if (laserCooldown > 0)
laserCooldown--;
if (backMusic != NUM_MUSIC)
UpdateMusicStream(music[backMusic]);
break;
case Game::State::PAUSED:
if (ingameMenu.selected == "Save Game") {
ChangeState(State::SAVE_MENU);
saveMenu.Reload(FindSaveFiles());
ingameMenu.selected = "";
} else if (ingameMenu.selected == "Continue") {
ChangeState(State::ACTIVE);
ingameMenu.selected = "";
} else if (ingameMenu.selected == "Back to Menu") {
ChangeState(State::GAME_OVER);
ingameMenu.selected = "";
}
ingameMenu.Update();
endLevelTime = std::time(nullptr) + elapsedLevelTime;
break;
case Game::State::LEVEL_FINISHED:
if (sequenceFrameCounter > frameCounter) return;
level += 1;
if (modNum == 2) {
if (level > 15)
ChangeState(State::GAME_FINISHED);
else
RestartLevel();
} else {
if (level > NUM_LEVELS)
ChangeState(State::GAME_FINISHED);
else
RestartLevel();
}
break;
case Game::State::GAME_START:
if (sequenceFrameCounter > frameCounter) return;
StartGame();
break;
case Game::State::GAME_OVER:
if (sequenceFrameCounter > frameCounter) return;
if (backMusic != NUM_MUSIC && IsMusicStreamPlaying(music[backMusic])) {
StopMusicStream(music[backMusic]);
backMusic = NUM_MUSIC;
}
if (modNum == 2) {
for (int i = 0; i < 10; i++) {
if (rankScore[i] < score) {
if (i != 9) {
for (int j = 9; j > i; j--) {
rankScore[j] = rankScore[j - 1];
}
rankScore[i] = score;
} else
rankScore[i] = score;
break;
}
}
}
if (modNum == 1)
ChangeState(State::DIFFLVL_MENU);
else
ChangeState(State::MAIN_MENU);
backTexture = BACKGROUND_ANI2;
break;
case Game::State::GAME_FINISHED:
for (int i = 0; i < 10; i++) {
if (rankScore[i] < score) {
if (i != 9) {
for (int j = 9; j > i; j--) {
rankScore[j] = rankScore[j - 1];
}
rankScore[i] = score;
} else
rankScore[i] = score;
}
}
if (sequenceFrameCounter > frameCounter) return;
ChangeState(State::MAIN_MENU);
break;
case Game::State::GAME_SAVED:
if (sequenceFrameCounter > frameCounter) return;
saveMenu.Reload(FindSaveFiles());
ChangeState(State::SAVE_MENU);
break;
default:
break;
}
}
}