From 35e8e2303745dc38ff4180ca5bfdcbfb62ce7456 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 28 Nov 2013 09:33:50 +0100 Subject: [PATCH] keep track of total play time per character --- apps/openmw/engine.cpp | 3 +++ apps/openmw/mwbase/statemanager.hpp | 2 ++ apps/openmw/mwstate/statemanagerimp.cpp | 12 ++++++++++-- apps/openmw/mwstate/statemanagerimp.hpp | 3 +++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index bee7fa8fdc..7dd3214ebf 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -117,6 +117,9 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) // update world MWBase::Environment::get().getWorld()->update(frametime, MWBase::Environment::get().getWindowManager()->isGuiMode()); + + // update game state + MWBase::Environment::get().getStateManager()->update (frametime); } // update GUI diff --git a/apps/openmw/mwbase/statemanager.hpp b/apps/openmw/mwbase/statemanager.hpp index f376d72c19..8548a74f7b 100644 --- a/apps/openmw/mwbase/statemanager.hpp +++ b/apps/openmw/mwbase/statemanager.hpp @@ -71,6 +71,8 @@ namespace MWBase /// iterator. virtual CharacterIterator characterEnd() = 0; + + virtual void update (float duration) = 0; }; } diff --git a/apps/openmw/mwstate/statemanagerimp.cpp b/apps/openmw/mwstate/statemanagerimp.cpp index 60b19fd46e..a273aced7f 100644 --- a/apps/openmw/mwstate/statemanagerimp.cpp +++ b/apps/openmw/mwstate/statemanagerimp.cpp @@ -18,7 +18,7 @@ #include "../mwmechanics/npcstats.hpp" MWState::StateManager::StateManager (const boost::filesystem::path& saves, const std::string& game) -: mQuitRequest (false), mState (State_NoGame), mCharacterManager (saves, game) +: mQuitRequest (false), mState (State_NoGame), mCharacterManager (saves, game), mTimePlayed (0) { } @@ -46,6 +46,7 @@ void MWState::StateManager::newGame (bool bypass) MWBase::Environment::get().getJournal()->clear(); mState = State_NoGame; mCharacterManager.clearCurrentCharacter(); + mTimePlayed = 0; } if (!bypass) @@ -83,7 +84,7 @@ void MWState::StateManager::saveGame (const std::string& description, const Slot profile.mInGameTime.mDay = world.getDay(); profile.mInGameTime.mMonth = world.getMonth(); profile.mInGameTime.mYear = world.getYear(); - /// \todo time played + profile.mTimePlayed = mTimePlayed; profile.mDescription = description; if (!slot) @@ -114,6 +115,8 @@ void MWState::StateManager::loadGame (const Character *character, const Slot *sl mCharacterManager.clearCurrentCharacter(); } + mTimePlayed = slot->mProfile.mTimePlayed; + ESM::ESMReader reader; reader.open (slot->mPath.string()); @@ -144,3 +147,8 @@ MWState::StateManager::CharacterIterator MWState::StateManager::characterEnd() { return mCharacterManager.end(); } + +void MWState::StateManager::update (float duration) +{ + mTimePlayed += duration; +} diff --git a/apps/openmw/mwstate/statemanagerimp.hpp b/apps/openmw/mwstate/statemanagerimp.hpp index 3965632cc3..720b1b6b0e 100644 --- a/apps/openmw/mwstate/statemanagerimp.hpp +++ b/apps/openmw/mwstate/statemanagerimp.hpp @@ -14,6 +14,7 @@ namespace MWState bool mQuitRequest; State mState; CharacterManager mCharacterManager; + double mTimePlayed; public: @@ -50,6 +51,8 @@ namespace MWState /// iterator. virtual CharacterIterator characterEnd(); + + virtual void update (float duration); }; }