From e938c5a0eec1c10929c177415af086d8e4906e93 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 21 Nov 2013 10:20:50 +0100 Subject: [PATCH] changed character creation logic (create on save instead of on new game) --- apps/openmw/mwbase/statemanager.hpp | 1 - apps/openmw/mwstate/charactermanager.cpp | 7 ++++++- apps/openmw/mwstate/charactermanager.hpp | 4 +++- apps/openmw/mwstate/statemanagerimp.cpp | 3 +-- apps/openmw/mwstate/statemanagerimp.hpp | 1 - 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwbase/statemanager.hpp b/apps/openmw/mwbase/statemanager.hpp index b341fbb034..3aa464ebeb 100644 --- a/apps/openmw/mwbase/statemanager.hpp +++ b/apps/openmw/mwbase/statemanager.hpp @@ -54,7 +54,6 @@ namespace MWBase /// \note Slot must belong to the current character. virtual MWState::Character *getCurrentCharacter() = 0; - ///< Must not be called, if there is no current character. }; } diff --git a/apps/openmw/mwstate/charactermanager.cpp b/apps/openmw/mwstate/charactermanager.cpp index c73adb5bb9..6eccb63dca 100644 --- a/apps/openmw/mwstate/charactermanager.cpp +++ b/apps/openmw/mwstate/charactermanager.cpp @@ -39,7 +39,7 @@ MWState::CharacterManager::CharacterManager (const boost::filesystem::path& save MWState::Character *MWState::CharacterManager::getCurrentCharacter() { if (!mCurrent) - throw std::logic_error ("no character selected"); + createCharacter(); return mCurrent; } @@ -54,4 +54,9 @@ void MWState::CharacterManager::createCharacter() mCharacters.push_back (Character (path)); mCurrent = &mCharacters.back(); +} + +void MWState::CharacterManager::clearCurrentCharacter() +{ + mCurrent = 0; } \ No newline at end of file diff --git a/apps/openmw/mwstate/charactermanager.hpp b/apps/openmw/mwstate/charactermanager.hpp index a3fe171314..543e0c94af 100644 --- a/apps/openmw/mwstate/charactermanager.hpp +++ b/apps/openmw/mwstate/charactermanager.hpp @@ -27,10 +27,12 @@ namespace MWState CharacterManager (const boost::filesystem::path& saves); Character *getCurrentCharacter(); - ///< Must not be called, if there is no current character. + ///< A character is implicitly created, if there is none. void createCharacter(); ///< Create new character within saved game management + + void clearCurrentCharacter(); }; } diff --git a/apps/openmw/mwstate/statemanagerimp.cpp b/apps/openmw/mwstate/statemanagerimp.cpp index 4b1d9e0f6e..8f22408fe5 100644 --- a/apps/openmw/mwstate/statemanagerimp.cpp +++ b/apps/openmw/mwstate/statemanagerimp.cpp @@ -37,6 +37,7 @@ void MWState::StateManager::newGame (bool bypass) MWBase::Environment::get().getDialogueManager()->clear(); MWBase::Environment::get().getJournal()->clear(); mState = State_NoGame; + mCharacterManager.clearCurrentCharacter(); } if (!bypass) @@ -46,8 +47,6 @@ void MWState::StateManager::newGame (bool bypass) MWBase::Environment::get().getWindowManager()->setNewGame (true); } - mCharacterManager.createCharacter(); - mState = State_Running; } diff --git a/apps/openmw/mwstate/statemanagerimp.hpp b/apps/openmw/mwstate/statemanagerimp.hpp index 9dfcc4d8fd..8d1ff0641c 100644 --- a/apps/openmw/mwstate/statemanagerimp.hpp +++ b/apps/openmw/mwstate/statemanagerimp.hpp @@ -38,7 +38,6 @@ namespace MWState /// \note Slot must belong to the current character. virtual Character *getCurrentCharacter(); - ///< Must not be called, if there is no current character. }; }