1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-01 19:15:33 +00:00

framework for gamemechanics-realted actor updated

This commit is contained in:
Marc Zinnschlag 2012-03-30 17:01:55 +02:00
parent a1d3516e0a
commit 0892df0ad3
5 changed files with 52 additions and 10 deletions

View file

@ -148,7 +148,8 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt)
// update actors // update actors
std::vector<std::pair<std::string, Ogre::Vector3> > movement; std::vector<std::pair<std::string, Ogre::Vector3> > movement;
mEnvironment.mMechanicsManager->update (movement); mEnvironment.mMechanicsManager->update (movement, mEnvironment.mFrameDuration,
mEnvironment.mWindowManager->getMode()!=MWGui::GM_Game);
if (mEnvironment.mWindowManager->getMode()==MWGui::GM_Game) if (mEnvironment.mWindowManager->getMode()==MWGui::GM_Game)
mEnvironment.mWorld->doPhysics (movement, mEnvironment.mFrameDuration); mEnvironment.mWorld->doPhysics (movement, mEnvironment.mFrameDuration);
@ -317,7 +318,7 @@ void OMW::Engine::go()
// to find core.xml here. // to find core.xml here.
//addResourcesDirectory(mResDir); //addResourcesDirectory(mResDir);
addResourcesDirectory(mResDir / "mygui"); addResourcesDirectory(mResDir / "mygui");
addResourcesDirectory(mResDir / "water"); addResourcesDirectory(mResDir / "water");

View file

@ -1,11 +1,25 @@
#include "actors.hpp" #include "actors.hpp"
#include <typeinfo>
#include <components/esm/loadnpc.hpp>
#include "../mwworld/class.hpp" #include "../mwworld/class.hpp"
namespace MWMechanics namespace MWMechanics
{ {
Actors::Actors (MWWorld::Environment& environment) : mEnvironment (environment) {} void Actors::updateActor (const MWWorld::Ptr& ptr, float duration)
{
}
void Actors::updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused)
{
}
Actors::Actors (MWWorld::Environment& environment) : mEnvironment (environment), mDuration (0) {}
void Actors::addActor (const MWWorld::Ptr& ptr) void Actors::addActor (const MWWorld::Ptr& ptr)
{ {
@ -30,8 +44,24 @@ namespace MWMechanics
++iter; ++iter;
} }
void Actors::update (std::vector<std::pair<std::string, Ogre::Vector3> >& movement) void Actors::update (std::vector<std::pair<std::string, Ogre::Vector3> >& movement, float duration,
bool paused)
{ {
mDuration += duration;
if (mDuration>=0.25)
{
for (std::set<MWWorld::Ptr>::iterator iter (mActors.begin()); iter!=mActors.end(); ++iter)
{
updateActor (*iter, mDuration);
if (iter->getTypeName()==typeid (ESM::NPC).name())
updateNpc (*iter, mDuration, paused);
}
mDuration = 0;
}
for (std::set<MWWorld::Ptr>::iterator iter (mActors.begin()); iter!=mActors.end(); for (std::set<MWWorld::Ptr>::iterator iter (mActors.begin()); iter!=mActors.end();
++iter) ++iter)
{ {

View file

@ -21,8 +21,13 @@ namespace MWMechanics
{ {
class Actors class Actors
{ {
MWWorld::Environment& mEnvironment; MWWorld::Environment& mEnvironment;
std::set<MWWorld::Ptr> mActors; std::set<MWWorld::Ptr> mActors;
float mDuration;
void updateActor (const MWWorld::Ptr& ptr, float duration);
void updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused);
public: public:
@ -37,7 +42,8 @@ namespace MWMechanics
void dropActors (const MWWorld::Ptr::CellStore *cellStore); void dropActors (const MWWorld::Ptr::CellStore *cellStore);
///< Deregister all actors in the given cell. ///< Deregister all actors in the given cell.
void update (std::vector<std::pair<std::string, Ogre::Vector3> >& movement); void update (std::vector<std::pair<std::string, Ogre::Vector3> >& movement,
float duration, bool paused);
///< Update actor stats and store desired velocity vectors in \a movement ///< Update actor stats and store desired velocity vectors in \a movement
}; };
} }

View file

@ -253,7 +253,8 @@ namespace MWMechanics
mWatched = ptr; mWatched = ptr;
} }
void MechanicsManager::update (std::vector<std::pair<std::string, Ogre::Vector3> >& movement) void MechanicsManager::update (std::vector<std::pair<std::string, Ogre::Vector3> >& movement,
float duration, bool paused)
{ {
if (!mWatched.isEmpty()) if (!mWatched.isEmpty())
{ {
@ -336,7 +337,7 @@ namespace MWMechanics
mEnvironment.mWindowManager->configureSkills (majorSkills, minorSkills); mEnvironment.mWindowManager->configureSkills (majorSkills, minorSkills);
} }
mActors.update (movement); mActors.update (movement, duration, paused);
} }
void MechanicsManager::setPlayerName (const std::string& name) void MechanicsManager::setPlayerName (const std::string& name)

View file

@ -60,8 +60,12 @@ namespace MWMechanics
///< On each update look for changes in a previously registered actor and update the ///< On each update look for changes in a previously registered actor and update the
/// GUI accordingly. /// GUI accordingly.
void update (std::vector<std::pair<std::string, Ogre::Vector3> >& movement); void update (std::vector<std::pair<std::string, Ogre::Vector3> >& movement, float duration,
bool paused);
///< Update actor stats and store desired velocity vectors in \a movement ///< Update actor stats and store desired velocity vectors in \a movement
///
/// \param paused In game type does not currently advance (this usually means some GUI
/// component is up).
void setPlayerName (const std::string& name); void setPlayerName (const std::string& name);
///< Set player name. ///< Set player name.