示例#1
0
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()
示例#2
0
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;
        }
    }
}