void SaveMode::Update() { if (InputManager->QuitPress() == true) { ModeManager->Pop(); return; } _file_list.Update(); // Screen is in the process of fading out, in order to load a game if (_current_state == SAVE_MODE_FADING_OUT) { return; } // Otherwise, it's time to start handling events. else if (InputManager->ConfirmPress()) { switch (_current_state) { case SAVE_MODE_SAVING: if (_file_list.GetSelection() > -1) { _current_state = SAVE_MODE_CONFIRMING_SAVE; } break; case SAVE_MODE_CONFIRMING_SAVE: if (_confirm_save_optionbox.GetSelection() == 0) { // note: using int here, because uint8 will NOT work // do not change unless you understand this and can test it properly! int id = _file_list.GetSelection(); std::ostringstream f; f << GetUserDataPath(true) + "saved_game_" << id << ".lua"; std::string filename = f.str(); // now, attempt to save the game. If failure, we need to tell the user that! if (GlobalManager->SaveGame(filename, (uint32)id, _x_position, _y_position)) { _current_state = SAVE_MODE_SAVE_COMPLETE; AudioManager->PlaySound("snd/save_successful_nick_bowler_oga.wav"); } else { _current_state = SAVE_MODE_SAVE_FAILED; AudioManager->PlaySound("snd/cancel.wav"); } } else { _current_state = SAVE_MODE_SAVING; } break; case SAVE_MODE_SAVE_COMPLETE: case SAVE_MODE_SAVE_FAILED: _current_state = SAVE_MODE_SAVING; _PreviewGame(_file_list.GetSelection()); break; case SAVE_MODE_LOADING: if (_file_list.GetSelection() > -1) { _LoadGame(_file_list.GetSelection()); } else { // Leave right away where there is nothing else // to do than loading. ModeManager->Pop(); } break; } // end switch (_current_state) } // end if (InputManager->ConfirmPress()) else if (InputManager->CancelPress()) { switch (_current_state) { case SAVE_MODE_SAVING: case SAVE_MODE_LOADING: // Leave right away where there is nothing else to do than // loading. ModeManager->Pop(); break; case SAVE_MODE_CONFIRMING_SAVE: _current_state = SAVE_MODE_SAVING; _PreviewGame(_file_list.GetSelection()); break; } // end switch (_current_state) } // end if (InputManager->CancelPress()) else if (InputManager->UpPress()) { switch (_current_state) { case SAVE_MODE_SAVING: case SAVE_MODE_LOADING: _file_list.InputUp(); if (_file_list.GetSelection() > -1) { _PreviewGame(_file_list.GetSelection()); } else { _map_name_textbox.SetDisplayText(" "); _time_textbox.SetDisplayText(" "); _drunes_textbox.SetDisplayText(" "); } break; case SAVE_MODE_CONFIRMING_SAVE: _confirm_save_optionbox.InputUp(); break; } // end switch (_current_state) } // end if (InputManager->UpPress()) else if (InputManager->DownPress()) { switch (_current_state) { case SAVE_MODE_SAVING: case SAVE_MODE_LOADING: _file_list.InputDown(); if (_file_list.GetSelection() > -1) { _PreviewGame(_file_list.GetSelection()); } break; case SAVE_MODE_CONFIRMING_SAVE: _confirm_save_optionbox.InputDown(); break; } // end switch (_current_state) } // end if (InputManager->DownPress()) } // void SaveMode::Update()
void SaveMode::Update() { if(InputManager->QuitPress()) { ModeManager->Pop(); return; } // Screen is in the process of fading out, in order to load a game if(_current_state == SAVE_MODE_FADING_OUT) { return; } _file_list.Update(); _confirm_save_optionbox.Update(); _load_auto_save_optionbox.Update(); GlobalMedia& media = GlobalManager->Media(); // Otherwise, it's time to start handling events. if(InputManager->ConfirmPress()) { media.PlaySound("confirm"); switch(_current_state) { case SAVE_MODE_SAVING: if(_file_list.GetSelection() > -1) { _current_state = SAVE_MODE_CONFIRMING_SAVE; } break; case SAVE_MODE_CONFIRMING_SAVE: if(_confirm_save_optionbox.GetSelection() == 0) { uint32_t id = static_cast<uint32_t>(_file_list.GetSelection()); uint32_t stamina = MapMode::CurrentInstance() ? MapMode::CurrentInstance()->GetStamina() : 0; GlobalManager->GetMapData().SetSaveStamina(stamina); // Attempt to save the game if(GlobalManager->SaveGame(_BuildSaveFilename(id), id, _x_position, _y_position)) { _current_state = SAVE_MODE_SAVE_COMPLETE; AudioManager->PlaySound("data/sounds/save_successful_nick_bowler_oga.wav"); // Remove the autosave in that case. _DeleteAutoSave(id); } else { _current_state = SAVE_MODE_SAVE_FAILED; AudioManager->PlaySound("data/sounds/cancel.wav"); } } else { _current_state = SAVE_MODE_SAVING; } break; case SAVE_MODE_SAVE_COMPLETE: case SAVE_MODE_SAVE_FAILED: _current_state = SAVE_MODE_SAVING; _PreviewGame(_BuildSaveFilename(_file_list.GetSelection())); break; case SAVE_MODE_CONFIRM_AUTOSAVE: switch (_load_auto_save_optionbox.GetSelection()) { case 0: // Load autosave _LoadGame(_BuildSaveFilename(_file_list.GetSelection(), true)); break; case 1: // Load save _LoadGame(_BuildSaveFilename(_file_list.GetSelection())); break; case 2: // Cancel default: _current_state = SAVE_MODE_LOADING; } break; case SAVE_MODE_LOADING: if(_file_list.GetSelection() > -1) { // Check whether a more recent autosave file exists uint32_t id = static_cast<uint32_t>(_file_list.GetSelection()); if (_IsAutoSaveValid(id)) { _current_state = SAVE_MODE_CONFIRM_AUTOSAVE; } else { _LoadGame(_BuildSaveFilename(id)); } } else { // Leave right away where there is nothing else // to do than loading. ModeManager->Pop(); } break; default: case SAVE_MODE_NO_VALID_SAVES: // Leave right away as there is nothing else to do ModeManager->Pop(); break; } } else if(InputManager->CancelPress()) { media.PlaySound("cancel"); switch(_current_state) { default: case SAVE_MODE_NO_VALID_SAVES: case SAVE_MODE_SAVING: case SAVE_MODE_LOADING: // Leave right away where there is nothing else to do ModeManager->Pop(); break; case SAVE_MODE_CONFIRM_AUTOSAVE: _current_state = SAVE_MODE_LOADING; _PreviewGame(_BuildSaveFilename(_file_list.GetSelection())); break; case SAVE_MODE_CONFIRMING_SAVE: _current_state = SAVE_MODE_SAVING; _PreviewGame(_BuildSaveFilename(_file_list.GetSelection())); break; } } else if(InputManager->UpPress()) { media.PlaySound("bump"); switch(_current_state) { case SAVE_MODE_SAVING: case SAVE_MODE_LOADING: _file_list.InputUp(); if(_file_list.GetSelection() > -1) { _PreviewGame(_BuildSaveFilename(_file_list.GetSelection())); } else { _ClearSaveData(false); } break; case SAVE_MODE_CONFIRMING_SAVE: _confirm_save_optionbox.InputUp(); break; case SAVE_MODE_CONFIRM_AUTOSAVE: _load_auto_save_optionbox.InputUp(); break; } } else if(InputManager->DownPress()) { media.PlaySound("bump"); switch(_current_state) { case SAVE_MODE_SAVING: case SAVE_MODE_LOADING: _file_list.InputDown(); if(_file_list.GetSelection() > -1) { _PreviewGame(_BuildSaveFilename(_file_list.GetSelection())); } else { _ClearSaveData(false); } break; case SAVE_MODE_CONFIRMING_SAVE: _confirm_save_optionbox.InputDown(); break; case SAVE_MODE_CONFIRM_AUTOSAVE: _load_auto_save_optionbox.InputDown(); break; } } }