diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index cda068347..bee7fa8fd 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -323,7 +323,8 @@ std::string OMW::Engine::loadSettings (Settings::Manager & settings) void OMW::Engine::prepareEngine (Settings::Manager & settings) { - mEnvironment.setStateManager (new MWState::StateManager (mCfgMgr.getUserPath() / "saves")); + mEnvironment.setStateManager ( + new MWState::StateManager (mCfgMgr.getUserPath() / "saves", mContentFiles.at (0))); Nif::NIFFile::CacheLock cachelock; diff --git a/apps/openmw/mwbase/world.hpp b/apps/openmw/mwbase/world.hpp index e1adfbec4..fe7d8f7ac 100644 --- a/apps/openmw/mwbase/world.hpp +++ b/apps/openmw/mwbase/world.hpp @@ -416,6 +416,8 @@ namespace MWBase virtual void launchProjectile (const std::string& id, const ESM::EffectList& effects, const MWWorld::Ptr& actor, const std::string& sourceName) = 0; + + virtual const std::vector& getContentFiles() const = 0; }; } diff --git a/apps/openmw/mwstate/character.cpp b/apps/openmw/mwstate/character.cpp index 2bd2af139..0766753ca 100644 --- a/apps/openmw/mwstate/character.cpp +++ b/apps/openmw/mwstate/character.cpp @@ -12,13 +12,18 @@ #include #include +#include + +#include "../mwbase/environment.hpp" +#include "../mwbase/world.hpp" + bool MWState::operator< (const Slot& left, const Slot& right) { return left.mTimeStamp ignore + mSlots.push_back (slot); } @@ -54,7 +62,7 @@ void MWState::Character::addSlot (const ESM::SavedGame& profile) mSlots.push_back (slot); } -MWState::Character::Character (const boost::filesystem::path& saves) +MWState::Character::Character (const boost::filesystem::path& saves, const std::string& game) : mPath (saves), mNext (0) { if (!boost::filesystem::is_directory (mPath)) @@ -70,7 +78,7 @@ MWState::Character::Character (const boost::filesystem::path& saves) try { - addSlot (slotPath); + addSlot (slotPath, game); } catch (...) {} // ignoring bad saved game files for now diff --git a/apps/openmw/mwstate/character.hpp b/apps/openmw/mwstate/character.hpp index d678c165b..61e4e5b25 100644 --- a/apps/openmw/mwstate/character.hpp +++ b/apps/openmw/mwstate/character.hpp @@ -28,13 +28,13 @@ namespace MWState std::vector mSlots; int mNext; - void addSlot (const boost::filesystem::path& path); + void addSlot (const boost::filesystem::path& path, const std::string& game); void addSlot (const ESM::SavedGame& profile); public: - Character (const boost::filesystem::path& saves); + Character (const boost::filesystem::path& saves, const std::string& game); const Slot *createSlot (const ESM::SavedGame& profile); ///< Create new slot. diff --git a/apps/openmw/mwstate/charactermanager.cpp b/apps/openmw/mwstate/charactermanager.cpp index cb64da2c2..2a40fb1cc 100644 --- a/apps/openmw/mwstate/charactermanager.cpp +++ b/apps/openmw/mwstate/charactermanager.cpp @@ -6,8 +6,9 @@ #include -MWState::CharacterManager::CharacterManager (const boost::filesystem::path& saves) -: mPath (saves), mNext (0), mCurrent (0) +MWState::CharacterManager::CharacterManager (const boost::filesystem::path& saves, + const std::string& game) +: mPath (saves), mNext (0), mCurrent (0), mGame (game) { if (!boost::filesystem::is_directory (mPath)) { @@ -22,7 +23,7 @@ MWState::CharacterManager::CharacterManager (const boost::filesystem::path& save if (boost::filesystem::is_directory (characterDir)) { - Character character (characterDir); + Character character (characterDir, mGame); if (character.begin()!=character.end()) mCharacters.push_back (character); @@ -53,7 +54,7 @@ void MWState::CharacterManager::createCharacter() boost::filesystem::path path = mPath / stream.str(); - mCharacters.push_back (Character (path)); + mCharacters.push_back (Character (path, mGame)); mCurrent = &mCharacters.back(); } diff --git a/apps/openmw/mwstate/charactermanager.hpp b/apps/openmw/mwstate/charactermanager.hpp index a02927d58..bc2e23f89 100644 --- a/apps/openmw/mwstate/charactermanager.hpp +++ b/apps/openmw/mwstate/charactermanager.hpp @@ -13,6 +13,7 @@ namespace MWState int mNext; std::vector mCharacters; Character *mCurrent; + std::string mGame; private: @@ -24,7 +25,7 @@ namespace MWState public: - CharacterManager (const boost::filesystem::path& saves); + CharacterManager (const boost::filesystem::path& saves, const std::string& game); Character *getCurrentCharacter (bool create = true); ///< \param create Create a new character, if there is no current character. diff --git a/apps/openmw/mwstate/statemanagerimp.cpp b/apps/openmw/mwstate/statemanagerimp.cpp index 46239f5a2..4cb97ed50 100644 --- a/apps/openmw/mwstate/statemanagerimp.cpp +++ b/apps/openmw/mwstate/statemanagerimp.cpp @@ -15,8 +15,8 @@ #include "../mwmechanics/npcstats.hpp" -MWState::StateManager::StateManager (const boost::filesystem::path& saves) -: mQuitRequest (false), mState (State_NoGame), mCharacterManager (saves) +MWState::StateManager::StateManager (const boost::filesystem::path& saves, const std::string& game) +: mQuitRequest (false), mState (State_NoGame), mCharacterManager (saves, game) { } @@ -69,7 +69,8 @@ void MWState::StateManager::saveGame (const std::string& description, const Slot MWWorld::Ptr player = world.getPlayer().getPlayer(); - /// \todo store content file list + profile.mContentFiles = world.getContentFiles(); + profile.mPlayerName = player.getClass().getName (player); profile.mPlayerLevel = player.getClass().getNpcStats (player).getLevel(); profile.mPlayerClass = player.get()->mBase->mClass; diff --git a/apps/openmw/mwstate/statemanagerimp.hpp b/apps/openmw/mwstate/statemanagerimp.hpp index 8bf1fab20..3965632cc 100644 --- a/apps/openmw/mwstate/statemanagerimp.hpp +++ b/apps/openmw/mwstate/statemanagerimp.hpp @@ -17,7 +17,7 @@ namespace MWState public: - StateManager (const boost::filesystem::path& saves); + StateManager (const boost::filesystem::path& saves, const std::string& game); virtual void requestQuit(); diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index eca2ebb79..5a4192529 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -215,7 +215,7 @@ namespace MWWorld mSky (true), mCells (mStore, mEsm), mActivationDistanceOverride (mActivationDistanceOverride), mFallback(fallbackMap), mPlayIntro(0), mTeleportEnabled(true), - mFacedDistance(FLT_MAX), mGodMode(false) + mFacedDistance(FLT_MAX), mGodMode(false), mContentFiles (contentFiles) { mPhysics = new PhysicsSystem(renderer); mPhysEngine = mPhysics->getEngine(); @@ -2246,4 +2246,9 @@ namespace MWWorld ++it; } } + + const std::vector& World::getContentFiles() const + { + return mContentFiles; + } } diff --git a/apps/openmw/mwworld/worldimp.hpp b/apps/openmw/mwworld/worldimp.hpp index 19890b831..32ad84865 100644 --- a/apps/openmw/mwworld/worldimp.hpp +++ b/apps/openmw/mwworld/worldimp.hpp @@ -73,6 +73,7 @@ namespace MWWorld OEngine::Physic::PhysicEngine* mPhysEngine; bool mGodMode; + std::vector mContentFiles; // not implemented World (const World&); @@ -492,6 +493,8 @@ namespace MWWorld virtual void launchProjectile (const std::string& id, const ESM::EffectList& effects, const MWWorld::Ptr& actor, const std::string& sourceName); + + virtual const std::vector& getContentFiles() const; }; }