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:
parent
a1d3516e0a
commit
0892df0ad3
5 changed files with 52 additions and 10 deletions
|
@ -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");
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue