MechanicsManager, frame update

This commit is contained in:
scrawl 2015-04-25 15:19:17 +02:00
parent 2db097f80e
commit 0ff7b2ff11
15 changed files with 95 additions and 117 deletions

View file

@ -69,23 +69,10 @@ void OMW::Engine::executeLocalScripts()
localScripts.setIgnore (MWWorld::Ptr()); localScripts.setIgnore (MWWorld::Ptr());
} }
bool OMW::Engine::frameStarted (const Ogre::FrameEvent& evt) void OMW::Engine::frame(float frametime)
{
if (MWBase::Environment::get().getStateManager()->getState()!=
MWBase::StateManager::State_NoGame)
{
bool paused = MWBase::Environment::get().getWindowManager()->isGuiMode();
MWBase::Environment::get().getWorld()->frameStarted(evt.timeSinceLastFrame, paused);
MWBase::Environment::get().getWindowManager ()->frameStarted(evt.timeSinceLastFrame);
}
return true;
}
bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt)
{ {
try try
{ {
float frametime = evt.timeSinceLastFrame;
mEnvironment.setFrameDuration (frametime); mEnvironment.setFrameDuration (frametime);
// update input // update input
@ -173,8 +160,6 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt)
{ {
std::cerr << "Error in framelistener: " << e.what() << std::endl; std::cerr << "Error in framelistener: " << e.what() << std::endl;
} }
return true;
} }
OMW::Engine::Engine(Files::ConfigurationManager& configurationManager) OMW::Engine::Engine(Files::ConfigurationManager& configurationManager)
@ -486,12 +471,7 @@ void OMW::Engine::go()
frameTimer.setStartTick(); frameTimer.setStartTick();
//dt = std::min(dt, 0.2f); //dt = std::min(dt, 0.2f);
// frameRenderingQueued(dt); frame(dt);
MWBase::Environment::get().getWorld()->update(dt, false);
MWBase::Environment::get().getWorld()->advanceTime(
dt*MWBase::Environment::get().getWorld()->getTimeScaleFactor()/3600);
mViewer->frame(/*simulationTime*/); mViewer->frame(/*simulationTime*/);
} }

View file

@ -1,8 +1,6 @@
#ifndef ENGINE_H #ifndef ENGINE_H
#define ENGINE_H #define ENGINE_H
#include <OgreFrameListener.h>
#include <components/compiler/extensions.hpp> #include <components/compiler/extensions.hpp>
#include <components/files/collections.hpp> #include <components/files/collections.hpp>
#include <components/translation/translation.hpp> #include <components/translation/translation.hpp>
@ -58,7 +56,7 @@ namespace Files
namespace OMW namespace OMW
{ {
/// \brief Main engine class, that brings together all the components of OpenMW /// \brief Main engine class, that brings together all the components of OpenMW
class Engine : private Ogre::FrameListener class Engine
{ {
std::auto_ptr<VFS::Manager> mVFS; std::auto_ptr<VFS::Manager> mVFS;
std::auto_ptr<Resource::ResourceSystem> mResourceSystem; std::auto_ptr<Resource::ResourceSystem> mResourceSystem;
@ -104,8 +102,7 @@ namespace OMW
void executeLocalScripts(); void executeLocalScripts();
virtual bool frameRenderingQueued (const Ogre::FrameEvent& evt); void frame (float dt);
virtual bool frameStarted (const Ogre::FrameEvent& evt);
/// Load settings from various files, returns the path to the user settings file /// Load settings from various files, returns the path to the user settings file
std::string loadSettings (Settings::Manager & settings); std::string loadSettings (Settings::Manager & settings);

View file

@ -12,6 +12,8 @@
#include <boost/iostreams/stream_buffer.hpp> #include <boost/iostreams/stream_buffer.hpp>
#include <boost/filesystem/fstream.hpp> #include <boost/filesystem/fstream.hpp>
#include <OgrePlatform.h>
#if defined(_WIN32) #if defined(_WIN32)
// For OutputDebugString // For OutputDebugString
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN

View file

@ -1,23 +1,23 @@
#include "actor.hpp" #include "actor.hpp"
//#include "character.hpp" #include "character.hpp"
namespace MWMechanics namespace MWMechanics
{ {
Actor::Actor(const MWWorld::Ptr &ptr, MWRender::Animation *animation) Actor::Actor(const MWWorld::Ptr &ptr, MWRender::Animation *animation)
{ {
//mCharacterController.reset(new CharacterController(ptr, animation)); mCharacterController.reset(new CharacterController(ptr, animation));
} }
void Actor::updatePtr(const MWWorld::Ptr &newPtr) void Actor::updatePtr(const MWWorld::Ptr &newPtr)
{ {
//mCharacterController->updatePtr(newPtr); mCharacterController->updatePtr(newPtr);
} }
CharacterController* Actor::getCharacterController() CharacterController* Actor::getCharacterController()
{ {
return 0;//mCharacterController.get(); return mCharacterController.get();
} }
AiState& Actor::getAiState() AiState& Actor::getAiState()

View file

@ -1014,6 +1014,8 @@ namespace MWMechanics
removeActor(ptr); removeActor(ptr);
MWRender::Animation *anim = MWBase::Environment::get().getWorld()->getAnimation(ptr); MWRender::Animation *anim = MWBase::Environment::get().getWorld()->getAnimation(ptr);
if (!anim)
return;
mActors.insert(std::make_pair(ptr, new Actor(ptr, anim))); mActors.insert(std::make_pair(ptr, new Actor(ptr, anim)));
if (updateImmediately) if (updateImmediately)
mActors[ptr]->getCharacterController()->update(0); mActors[ptr]->getCharacterController()->update(0);

View file

@ -20,7 +20,6 @@
#include "character.hpp" #include "character.hpp"
#include <OgreStringConverter.h> #include <OgreStringConverter.h>
#include <OgreSceneNode.h>
#include "movement.hpp" #include "movement.hpp"
#include "npcstats.hpp" #include "npcstats.hpp"

View file

@ -294,27 +294,22 @@ namespace MWMechanics
void MechanicsManager::add(const MWWorld::Ptr& ptr) void MechanicsManager::add(const MWWorld::Ptr& ptr)
{ {
/*
if(ptr.getClass().isActor()) if(ptr.getClass().isActor())
mActors.addActor(ptr); mActors.addActor(ptr);
else else
mObjects.addObject(ptr); mObjects.addObject(ptr);
*/
} }
void MechanicsManager::remove(const MWWorld::Ptr& ptr) void MechanicsManager::remove(const MWWorld::Ptr& ptr)
{ {
/*
if(ptr == mWatched) if(ptr == mWatched)
mWatched = MWWorld::Ptr(); mWatched = MWWorld::Ptr();
mActors.removeActor(ptr); mActors.removeActor(ptr);
mObjects.removeObject(ptr); mObjects.removeObject(ptr);
*/
} }
void MechanicsManager::updateCell(const MWWorld::Ptr &old, const MWWorld::Ptr &ptr) void MechanicsManager::updateCell(const MWWorld::Ptr &old, const MWWorld::Ptr &ptr)
{ {
/*
if(old == mWatched) if(old == mWatched)
mWatched = ptr; mWatched = ptr;
@ -322,16 +317,13 @@ namespace MWMechanics
mActors.updateActor(old, ptr); mActors.updateActor(old, ptr);
else else
mObjects.updateObject(old, ptr); mObjects.updateObject(old, ptr);
*/
} }
void MechanicsManager::drop(const MWWorld::CellStore *cellStore) void MechanicsManager::drop(const MWWorld::CellStore *cellStore)
{ {
/*
mActors.dropActors(cellStore, mWatched); mActors.dropActors(cellStore, mWatched);
mObjects.dropObjects(cellStore); mObjects.dropObjects(cellStore);
*/
} }
@ -472,24 +464,24 @@ namespace MWMechanics
// HACK? The player has been changed, so a new Animation object may // HACK? The player has been changed, so a new Animation object may
// have been made for them. Make sure they're properly updated. // have been made for them. Make sure they're properly updated.
//MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPlayerPtr(); MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPlayerPtr();
//mActors.removeActor(ptr); mActors.removeActor(ptr);
//mActors.addActor(ptr, true); mActors.addActor(ptr, true);
} }
//mActors.update(duration, paused); mActors.update(duration, paused);
//mObjects.update(duration, paused); mObjects.update(duration, paused);
} }
void MechanicsManager::rest(bool sleep) void MechanicsManager::rest(bool sleep)
{ {
//mActors.restoreDynamicStats (sleep); mActors.restoreDynamicStats (sleep);
//mActors.fastForwardAi(); mActors.fastForwardAi();
} }
int MechanicsManager::getHoursToRest() const int MechanicsManager::getHoursToRest() const
{ {
return 0;//mActors.getHoursToRest(mWatched); return mActors.getHoursToRest(mWatched);
} }
void MechanicsManager::setPlayerName (const std::string& name) void MechanicsManager::setPlayerName (const std::string& name)
@ -679,7 +671,7 @@ namespace MWMechanics
int MechanicsManager::countDeaths (const std::string& id) const int MechanicsManager::countDeaths (const std::string& id) const
{ {
return 0;//mActors.countDeaths (id); return mActors.countDeaths (id);
} }
void MechanicsManager::getPersuasionDispositionChange (const MWWorld::Ptr& npc, PersuasionType type, void MechanicsManager::getPersuasionDispositionChange (const MWWorld::Ptr& npc, PersuasionType type,
@ -835,39 +827,35 @@ namespace MWMechanics
void MechanicsManager::forceStateUpdate(const MWWorld::Ptr &ptr) void MechanicsManager::forceStateUpdate(const MWWorld::Ptr &ptr)
{ {
//if(ptr.getClass().isActor()) if(ptr.getClass().isActor())
//mActors.forceStateUpdate(ptr); mActors.forceStateUpdate(ptr);
} }
void MechanicsManager::playAnimationGroup(const MWWorld::Ptr& ptr, const std::string& groupName, int mode, int number) void MechanicsManager::playAnimationGroup(const MWWorld::Ptr& ptr, const std::string& groupName, int mode, int number)
{ {
/*
if(ptr.getClass().isActor()) if(ptr.getClass().isActor())
mActors.playAnimationGroup(ptr, groupName, mode, number); mActors.playAnimationGroup(ptr, groupName, mode, number);
else else
mObjects.playAnimationGroup(ptr, groupName, mode, number); mObjects.playAnimationGroup(ptr, groupName, mode, number);
*/
} }
void MechanicsManager::skipAnimation(const MWWorld::Ptr& ptr) void MechanicsManager::skipAnimation(const MWWorld::Ptr& ptr)
{ {
/*
if(ptr.getClass().isActor()) if(ptr.getClass().isActor())
mActors.skipAnimation(ptr); mActors.skipAnimation(ptr);
else else
mObjects.skipAnimation(ptr); mObjects.skipAnimation(ptr);
*/
} }
bool MechanicsManager::checkAnimationPlaying(const MWWorld::Ptr& ptr, const std::string &groupName) bool MechanicsManager::checkAnimationPlaying(const MWWorld::Ptr& ptr, const std::string &groupName)
{ {
//if(ptr.getClass().isActor()) if(ptr.getClass().isActor())
// return mActors.checkAnimationPlaying(ptr, groupName); return mActors.checkAnimationPlaying(ptr, groupName);
//else else
return false; return false;
} }
void MechanicsManager::updateMagicEffects(const MWWorld::Ptr &ptr) void MechanicsManager::updateMagicEffects(const MWWorld::Ptr &ptr)
{ {
//mActors.updateMagicEffects(ptr); mActors.updateMagicEffects(ptr);
} }
bool MechanicsManager::toggleAI() bool MechanicsManager::toggleAI()
@ -1062,7 +1050,7 @@ namespace MWMechanics
const MWWorld::ESMStore& esmStore = MWBase::Environment::get().getWorld()->getStore(); const MWWorld::ESMStore& esmStore = MWBase::Environment::get().getWorld()->getStore();
float radius = esmStore.get<ESM::GameSetting>().find("fAlarmRadius")->getFloat(); float radius = esmStore.get<ESM::GameSetting>().find("fAlarmRadius")->getFloat();
//mActors.getObjectsInRange(from, radius, neighbors); mActors.getObjectsInRange(from, radius, neighbors);
// victim should be considered even beyond alarm radius // victim should be considered even beyond alarm radius
if (!victim.isEmpty() && from.squaredDistance(Ogre::Vector3(victim.getRefData().getPosition().pos)) > radius*radius) if (!victim.isEmpty() && from.squaredDistance(Ogre::Vector3(victim.getRefData().getPosition().pos)) > radius*radius)
@ -1151,7 +1139,7 @@ namespace MWMechanics
Ogre::Vector3 from = Ogre::Vector3(player.getRefData().getPosition().pos); Ogre::Vector3 from = Ogre::Vector3(player.getRefData().getPosition().pos);
float radius = esmStore.get<ESM::GameSetting>().find("fAlarmRadius")->getFloat(); float radius = esmStore.get<ESM::GameSetting>().find("fAlarmRadius")->getFloat();
//mActors.getObjectsInRange(from, radius, neighbors); mActors.getObjectsInRange(from, radius, neighbors);
// victim should be considered even beyond alarm radius // victim should be considered even beyond alarm radius
if (!victim.isEmpty() && from.squaredDistance(Ogre::Vector3(victim.getRefData().getPosition().pos)) > radius*radius) if (!victim.isEmpty() && from.squaredDistance(Ogre::Vector3(victim.getRefData().getPosition().pos)) > radius*radius)
@ -1406,7 +1394,6 @@ namespace MWMechanics
// if guard starts combat with player, guards pursuing player should do the same // if guard starts combat with player, guards pursuing player should do the same
if (ptr.getClass().isClass(ptr, "Guard")) if (ptr.getClass().isClass(ptr, "Guard"))
{ {
/*
for (Actors::PtrActorMap::const_iterator iter = mActors.begin(); iter != mActors.end(); ++iter) for (Actors::PtrActorMap::const_iterator iter = mActors.begin(); iter != mActors.end(); ++iter)
{ {
if (iter->first.getClass().isClass(iter->first, "Guard")) if (iter->first.getClass().isClass(iter->first, "Guard"))
@ -1419,7 +1406,6 @@ namespace MWMechanics
} }
} }
} }
*/
} }
} }
@ -1430,27 +1416,27 @@ namespace MWMechanics
void MechanicsManager::getObjectsInRange(const Ogre::Vector3 &position, float radius, std::vector<MWWorld::Ptr> &objects) void MechanicsManager::getObjectsInRange(const Ogre::Vector3 &position, float radius, std::vector<MWWorld::Ptr> &objects)
{ {
//mActors.getObjectsInRange(position, radius, objects); mActors.getObjectsInRange(position, radius, objects);
//mObjects.getObjectsInRange(position, radius, objects); mObjects.getObjectsInRange(position, radius, objects);
} }
void MechanicsManager::getActorsInRange(const Ogre::Vector3 &position, float radius, std::vector<MWWorld::Ptr> &objects) void MechanicsManager::getActorsInRange(const Ogre::Vector3 &position, float radius, std::vector<MWWorld::Ptr> &objects)
{ {
//mActors.getObjectsInRange(position, radius, objects); mActors.getObjectsInRange(position, radius, objects);
} }
std::list<MWWorld::Ptr> MechanicsManager::getActorsFollowing(const MWWorld::Ptr& actor) std::list<MWWorld::Ptr> MechanicsManager::getActorsFollowing(const MWWorld::Ptr& actor)
{ {
return std::list<MWWorld::Ptr>();//mActors.getActorsFollowing(actor); return mActors.getActorsFollowing(actor);
} }
std::list<int> MechanicsManager::getActorsFollowingIndices(const MWWorld::Ptr& actor) std::list<int> MechanicsManager::getActorsFollowingIndices(const MWWorld::Ptr& actor)
{ {
return std::list<int>(); //mActors.getActorsFollowingIndices(actor); return mActors.getActorsFollowingIndices(actor);
} }
std::list<MWWorld::Ptr> MechanicsManager::getActorsFighting(const MWWorld::Ptr& actor) { std::list<MWWorld::Ptr> MechanicsManager::getActorsFighting(const MWWorld::Ptr& actor) {
return std::list<MWWorld::Ptr>();// mActors.getActorsFighting(actor); return mActors.getActorsFighting(actor);
} }
int MechanicsManager::countSavedGameRecords() const int MechanicsManager::countSavedGameRecords() const
@ -1461,7 +1447,7 @@ namespace MWMechanics
void MechanicsManager::write(ESM::ESMWriter &writer, Loading::Listener &listener) const void MechanicsManager::write(ESM::ESMWriter &writer, Loading::Listener &listener) const
{ {
//mActors.write(writer, listener); mActors.write(writer, listener);
ESM::StolenItems items; ESM::StolenItems items;
items.mStolenItems = mStolenItems; items.mStolenItems = mStolenItems;
@ -1478,13 +1464,13 @@ namespace MWMechanics
items.load(reader); items.load(reader);
mStolenItems = items.mStolenItems; mStolenItems = items.mStolenItems;
} }
//else else
//mActors.readRecord(reader, type); mActors.readRecord(reader, type);
} }
void MechanicsManager::clear() void MechanicsManager::clear()
{ {
//mActors.clear(); mActors.clear();
mStolenItems.clear(); mStolenItems.clear();
} }
@ -1530,6 +1516,6 @@ namespace MWMechanics
bool MechanicsManager::isReadyToBlock(const MWWorld::Ptr &ptr) const bool MechanicsManager::isReadyToBlock(const MWWorld::Ptr &ptr) const
{ {
return 0;//mActors.isReadyToBlock(ptr); return mActors.isReadyToBlock(ptr);
} }
} }

View file

@ -7,8 +7,8 @@
#include "creaturestats.hpp" #include "creaturestats.hpp"
#include "npcstats.hpp" #include "npcstats.hpp"
//#include "objects.hpp" #include "objects.hpp"
//#include "actors.hpp" #include "actors.hpp"
namespace Ogre namespace Ogre
{ {
@ -32,8 +32,8 @@ namespace MWMechanics
bool mRaceSelected; bool mRaceSelected;
bool mAI;///< is AI active? bool mAI;///< is AI active?
//Objects mObjects; Objects mObjects;
//Actors mActors; Actors mActors;
typedef std::pair<std::string, bool> Owner; // < Owner id, bool isFaction > typedef std::pair<std::string, bool> Owner; // < Owner id, bool isFaction >
typedef std::map<Owner, int> OwnerMap; // < Owner, number of stolen items with this id from this owner > typedef std::map<Owner, int> OwnerMap; // < Owner, number of stolen items with this id from this owner >

View file

@ -197,9 +197,7 @@ void Objects::removeCell(const MWWorld::CellStore* store)
void Objects::update(float dt) void Objects::update(float dt)
{ {
PtrAnimationMap::const_iterator it = mObjects.begin();
for(;it != mObjects.end();++it)
it->second->runAnimation(dt);
} }
void Objects::updateObjectCell(const MWWorld::Ptr &old, const MWWorld::Ptr &cur) void Objects::updateObjectCell(const MWWorld::Ptr &old, const MWWorld::Ptr &cur)

View file

@ -248,4 +248,9 @@ namespace MWRender
notifyWorldSpaceChanged(); notifyWorldSpaceChanged();
} }
MWRender::Animation* RenderingManager::getAnimation(const MWWorld::Ptr &ptr)
{
return mObjects->getAnimation(ptr);
}
} }

View file

@ -78,6 +78,8 @@ namespace MWRender
void update(float dt, bool paused); void update(float dt, bool paused);
MWRender::Animation* getAnimation(const MWWorld::Ptr& ptr);
private: private:
osgViewer::Viewer& mViewer; osgViewer::Viewer& mViewer;
osg::ref_ptr<osg::Group> mRootNode; osg::ref_ptr<osg::Group> mRootNode;

View file

@ -503,15 +503,15 @@ namespace MWWorld
{ {
// Create physics. shapeLoader is deleted by the physic engine // Create physics. shapeLoader is deleted by the physic engine
//NifBullet::ManualBulletShapeLoader* shapeLoader = new NifBullet::ManualBulletShapeLoader(); //NifBullet::ManualBulletShapeLoader* shapeLoader = new NifBullet::ManualBulletShapeLoader();
mEngine = new OEngine::Physic::PhysicEngine(0);//shapeLoader); //mEngine = new OEngine::Physic::PhysicEngine(0);//shapeLoader);
} }
PhysicsSystem::~PhysicsSystem() PhysicsSystem::~PhysicsSystem()
{ {
if (mWaterCollisionObject.get()) //if (mWaterCollisionObject.get())
mEngine->mDynamicsWorld->removeCollisionObject(mWaterCollisionObject.get()); // mEngine->mDynamicsWorld->removeCollisionObject(mWaterCollisionObject.get());
delete mEngine; //delete mEngine;
delete OEngine::Physic::BulletShapeManager::getSingletonPtr(); //delete OEngine::Physic::BulletShapeManager::getSingletonPtr();
} }
OEngine::Physic::PhysicEngine* PhysicsSystem::getEngine() OEngine::Physic::PhysicEngine* PhysicsSystem::getEngine()
@ -674,19 +674,23 @@ namespace MWWorld
void PhysicsSystem::addObject (const Ptr& ptr, const std::string& mesh, bool placeable) void PhysicsSystem::addObject (const Ptr& ptr, const std::string& mesh, bool placeable)
{ {
/*
Ogre::SceneNode* node = ptr.getRefData().getBaseNodeOld(); Ogre::SceneNode* node = ptr.getRefData().getBaseNodeOld();
handleToMesh[node->getName()] = mesh; handleToMesh[node->getName()] = mesh;
mEngine->createAndAdjustRigidBody( mEngine->createAndAdjustRigidBody(
mesh, node->getName(), ptr.getCellRef().getScale(), node->getPosition(), node->getOrientation(), 0, 0, false, placeable); mesh, node->getName(), ptr.getCellRef().getScale(), node->getPosition(), node->getOrientation(), 0, 0, false, placeable);
mEngine->createAndAdjustRigidBody( mEngine->createAndAdjustRigidBody(
mesh, node->getName(), ptr.getCellRef().getScale(), node->getPosition(), node->getOrientation(), 0, 0, true, placeable); mesh, node->getName(), ptr.getCellRef().getScale(), node->getPosition(), node->getOrientation(), 0, 0, true, placeable);
*/
} }
void PhysicsSystem::addActor (const Ptr& ptr, const std::string& mesh) void PhysicsSystem::addActor (const Ptr& ptr, const std::string& mesh)
{ {
/*
Ogre::SceneNode* node = ptr.getRefData().getBaseNodeOld(); Ogre::SceneNode* node = ptr.getRefData().getBaseNodeOld();
//TODO:optimize this. Searching the std::map isn't very efficient i think. //TODO:optimize this. Searching the std::map isn't very efficient i think.
mEngine->addCharacter(node->getName(), mesh, node->getPosition(), node->getScale().x, node->getOrientation()); mEngine->addCharacter(node->getName(), mesh, node->getPosition(), node->getScale().x, node->getOrientation());
*/
} }
void PhysicsSystem::removeObject (const std::string& handle) void PhysicsSystem::removeObject (const std::string& handle)

View file

@ -31,7 +31,7 @@
namespace namespace
{ {
void addObject(const MWWorld::Ptr& ptr, //MWWorld::PhysicsSystem& physics, void addObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics,
MWRender::RenderingManager& rendering) MWRender::RenderingManager& rendering)
{ {
std::string model = Misc::ResourceHelpers::correctActorModelPath(ptr.getClass().getModel(ptr), rendering.getResourceSystem()->getVFS()); std::string model = Misc::ResourceHelpers::correctActorModelPath(ptr.getClass().getModel(ptr), rendering.getResourceSystem()->getVFS());
@ -39,10 +39,10 @@ namespace
if (id == "prisonmarker" || id == "divinemarker" || id == "templemarker" || id == "northmarker") if (id == "prisonmarker" || id == "divinemarker" || id == "templemarker" || id == "northmarker")
model = ""; // marker objects that have a hardcoded function in the game logic, should be hidden from the player model = ""; // marker objects that have a hardcoded function in the game logic, should be hidden from the player
ptr.getClass().insertObjectRendering(ptr, model, rendering); ptr.getClass().insertObjectRendering(ptr, model, rendering);
//ptr.getClass().insertObject (ptr, model, physics); ptr.getClass().insertObject (ptr, model, physics);
} }
void updateObjectLocalRotation (const MWWorld::Ptr& ptr, /*MWWorld::PhysicsSystem& physics,*/ void updateObjectLocalRotation (const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics,
MWRender::RenderingManager& rendering) MWRender::RenderingManager& rendering)
{ {
if (ptr.getRefData().getBaseNode() != NULL) if (ptr.getRefData().getBaseNode() != NULL)
@ -65,7 +65,7 @@ namespace
} }
} }
void updateObjectScale(const MWWorld::Ptr& ptr, /*MWWorld::PhysicsSystem& physics,*/ void updateObjectScale(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics,
MWRender::RenderingManager& rendering) MWRender::RenderingManager& rendering)
{ {
if (ptr.getRefData().getBaseNode() != NULL) if (ptr.getRefData().getBaseNode() != NULL)
@ -82,20 +82,20 @@ namespace
MWWorld::CellStore& mCell; MWWorld::CellStore& mCell;
bool mRescale; bool mRescale;
Loading::Listener& mLoadingListener; Loading::Listener& mLoadingListener;
//MWWorld::PhysicsSystem& mPhysics; MWWorld::PhysicsSystem& mPhysics;
MWRender::RenderingManager& mRendering; MWRender::RenderingManager& mRendering;
InsertFunctor (MWWorld::CellStore& cell, bool rescale, Loading::Listener& loadingListener, InsertFunctor (MWWorld::CellStore& cell, bool rescale, Loading::Listener& loadingListener,
/*MWWorld::PhysicsSystem& physics, */MWRender::RenderingManager& rendering); MWWorld::PhysicsSystem& physics, MWRender::RenderingManager& rendering);
bool operator() (const MWWorld::Ptr& ptr); bool operator() (const MWWorld::Ptr& ptr);
}; };
InsertFunctor::InsertFunctor (MWWorld::CellStore& cell, bool rescale, InsertFunctor::InsertFunctor (MWWorld::CellStore& cell, bool rescale,
Loading::Listener& loadingListener, /*MWWorld::PhysicsSystem& physics,*/ Loading::Listener& loadingListener, MWWorld::PhysicsSystem& physics,
MWRender::RenderingManager& rendering) MWRender::RenderingManager& rendering)
: mCell (cell), mRescale (rescale), mLoadingListener (loadingListener), : mCell (cell), mRescale (rescale), mLoadingListener (loadingListener),
//mPhysics (physics), mPhysics (physics),
mRendering (rendering) mRendering (rendering)
{} {}
@ -113,9 +113,9 @@ namespace
{ {
try try
{ {
addObject(ptr, /*mPhysics, */mRendering); addObject(ptr, mPhysics, mRendering);
updateObjectLocalRotation(ptr, /*mPhysics,*/ mRendering); updateObjectLocalRotation(ptr, mPhysics, mRendering);
updateObjectScale(ptr, /*mPhysics,*/ mRendering); updateObjectScale(ptr, mPhysics, mRendering);
ptr.getClass().adjustPosition (ptr, false); ptr.getClass().adjustPosition (ptr, false);
} }
catch (const std::exception& e) catch (const std::exception& e)
@ -137,12 +137,12 @@ namespace MWWorld
void Scene::updateObjectLocalRotation (const Ptr& ptr) void Scene::updateObjectLocalRotation (const Ptr& ptr)
{ {
::updateObjectLocalRotation(ptr, /* *mPhysics,*/ mRendering); ::updateObjectLocalRotation(ptr, *mPhysics, mRendering);
} }
void Scene::updateObjectScale(const Ptr &ptr) void Scene::updateObjectScale(const Ptr &ptr)
{ {
::updateObjectScale(ptr, /* *mPhysics,*/ mRendering); ::updateObjectScale(ptr, *mPhysics, mRendering);
} }
void Scene::getGridCenter(int &cellX, int &cellY) void Scene::getGridCenter(int &cellX, int &cellY)
@ -447,7 +447,7 @@ namespace MWWorld
//We need the ogre renderer and a scene node. //We need the ogre renderer and a scene node.
Scene::Scene (MWRender::RenderingManager& rendering, PhysicsSystem *physics) Scene::Scene (MWRender::RenderingManager& rendering, PhysicsSystem *physics)
: mCurrentCell (0), mCellChanged (false), /*mPhysics(physics),*/ mRendering(rendering), mNeedMapUpdate(false) : mCurrentCell (0), mCellChanged (false), mPhysics(physics), mRendering(rendering), mNeedMapUpdate(false)
{ {
} }
@ -557,7 +557,7 @@ namespace MWWorld
void Scene::insertCell (CellStore &cell, bool rescale, Loading::Listener* loadingListener) void Scene::insertCell (CellStore &cell, bool rescale, Loading::Listener* loadingListener)
{ {
InsertFunctor functor (cell, rescale, *loadingListener, /* *mPhysics, */mRendering); InsertFunctor functor (cell, rescale, *loadingListener, *mPhysics, mRendering);
cell.forEach (functor); cell.forEach (functor);
} }
@ -565,7 +565,7 @@ namespace MWWorld
{ {
try try
{ {
addObject(ptr, /* *mPhysics, */mRendering); addObject(ptr, *mPhysics, mRendering);
MWBase::Environment::get().getWorld()->rotateObject(ptr, 0, 0, 0, true); MWBase::Environment::get().getWorld()->rotateObject(ptr, 0, 0, 0, true);
MWBase::Environment::get().getWorld()->scaleObject(ptr, ptr.getCellRef().getScale()); MWBase::Environment::get().getWorld()->scaleObject(ptr, ptr.getCellRef().getScale());
} }

View file

@ -63,7 +63,7 @@ namespace MWWorld
CellStore* mCurrentCell; // the cell the player is in CellStore* mCurrentCell; // the cell the player is in
CellStoreCollection mActiveCells; CellStoreCollection mActiveCells;
bool mCellChanged; bool mCellChanged;
//PhysicsSystem *mPhysics; PhysicsSystem *mPhysics;
MWRender::RenderingManager& mRendering; MWRender::RenderingManager& mRendering;
bool mNeedMapUpdate; bool mNeedMapUpdate;

View file

@ -54,6 +54,7 @@
#include "actionteleport.hpp" #include "actionteleport.hpp"
//#include "projectilemanager.hpp" //#include "projectilemanager.hpp"
#include "weather.hpp" #include "weather.hpp"
#include "physicssystem.hpp"
#include "contentloader.hpp" #include "contentloader.hpp"
#include "esmloader.hpp" #include "esmloader.hpp"
@ -160,7 +161,7 @@ namespace MWWorld
mStartCell (startCell), mStartupScript(startupScript), mStartCell (startCell), mStartupScript(startupScript),
mScriptsEnabled(true) mScriptsEnabled(true)
{ {
//mPhysics = new PhysicsSystem(renderer); mPhysics = new PhysicsSystem();
//mPhysEngine = mPhysics->getEngine(); //mPhysEngine = mPhysics->getEngine();
#if 0 #if 0
mProjectileManager.reset(new ProjectileManager(renderer.getScene(), *mPhysEngine)); mProjectileManager.reset(new ProjectileManager(renderer.getScene(), *mPhysEngine));
@ -199,7 +200,7 @@ namespace MWWorld
mGlobalVariables.fill (mStore); mGlobalVariables.fill (mStore);
mWorldScene = new Scene(*mRendering, NULL/*mPhysics*/); mWorldScene = new Scene(*mRendering, mPhysics);
} }
void World::startNewGame (bool bypass) void World::startNewGame (bool bypass)
@ -480,7 +481,7 @@ namespace MWWorld
delete mWeatherManager; delete mWeatherManager;
delete mWorldScene; delete mWorldScene;
delete mRendering; delete mRendering;
//delete mPhysics; delete mPhysics;
delete mPlayer; delete mPlayer;
} }
@ -2000,7 +2001,7 @@ namespace MWWorld
&& isLevitationEnabled()) && isLevitationEnabled())
return true; return true;
const OEngine::Physic::PhysicActor *actor = mPhysEngine->getCharacter(ptr.getRefData().getHandle()); const OEngine::Physic::PhysicActor *actor = 0;//mPhysEngine->getCharacter(ptr.getRefData().getHandle());
if(!actor || !actor->getCollisionMode()) if(!actor || !actor->getCollisionMode())
return true; return true;
@ -2040,7 +2041,7 @@ namespace MWWorld
const float *fpos = object.getRefData().getPosition().pos; const float *fpos = object.getRefData().getPosition().pos;
Ogre::Vector3 pos(fpos[0], fpos[1], fpos[2]); Ogre::Vector3 pos(fpos[0], fpos[1], fpos[2]);
const OEngine::Physic::PhysicActor *actor = mPhysEngine->getCharacter(object.getRefData().getHandle()); const OEngine::Physic::PhysicActor *actor = 0;//mPhysEngine->getCharacter(object.getRefData().getHandle());
if (actor) if (actor)
{ {
pos.z += heightRatio*2*actor->getHalfExtents().z; pos.z += heightRatio*2*actor->getHalfExtents().z;
@ -2069,8 +2070,8 @@ namespace MWWorld
// TODO: There might be better places to update PhysicActor::mOnGround. // TODO: There might be better places to update PhysicActor::mOnGround.
bool World::isOnGround(const MWWorld::Ptr &ptr) const bool World::isOnGround(const MWWorld::Ptr &ptr) const
{ {
RefData &refdata = ptr.getRefData(); //RefData &refdata = ptr.getRefData();
OEngine::Physic::PhysicActor *physactor = mPhysEngine->getCharacter(refdata.getHandle()); OEngine::Physic::PhysicActor *physactor = 0;//mPhysEngine->getCharacter(refdata.getHandle());
if(!physactor) if(!physactor)
return false; return false;
@ -2142,15 +2143,17 @@ namespace MWWorld
CellStore *currentCell = mWorldScene->getCurrentCell(); CellStore *currentCell = mWorldScene->getCurrentCell();
Ptr player = mPlayer->getPlayer(); Ptr player = mPlayer->getPlayer();
RefData &refdata = player.getRefData(); //RefData &refdata = player.getRefData();
Ogre::Vector3 playerPos(refdata.getPosition().pos); //Ogre::Vector3 playerPos(refdata.getPosition().pos);
/*
const OEngine::Physic::PhysicActor *physactor = mPhysEngine->getCharacter(refdata.getHandle()); const OEngine::Physic::PhysicActor *physactor = mPhysEngine->getCharacter(refdata.getHandle());
if (!physactor) if (!physactor)
throw std::runtime_error("can't find player"); throw std::runtime_error("can't find player");
if((!physactor->getOnGround()&&physactor->getCollisionMode()) || isUnderwater(currentCell, playerPos) || isWalkingOnWater(player)) if((!physactor->getOnGround()&&physactor->getCollisionMode()) || isUnderwater(currentCell, playerPos) || isWalkingOnWater(player))
return 2; return 2;
*/
if((currentCell->getCell()->mData.mFlags&ESM::Cell::NoSleep) || if((currentCell->getCell()->mData.mFlags&ESM::Cell::NoSleep) ||
player.getClass().getNpcStats(player).isWerewolf()) player.getClass().getNpcStats(player).isWerewolf())
return 1; return 1;
@ -2160,7 +2163,7 @@ namespace MWWorld
MWRender::Animation* World::getAnimation(const MWWorld::Ptr &ptr) MWRender::Animation* World::getAnimation(const MWWorld::Ptr &ptr)
{ {
return 0;//return mRendering->getAnimation(ptr); return mRendering->getAnimation(ptr);
} }
void World::frameStarted (float dt, bool paused) void World::frameStarted (float dt, bool paused)
@ -2295,7 +2298,7 @@ namespace MWWorld
float World::getWindSpeed() float World::getWindSpeed()
{ {
if (isCellExterior() || isCellQuasiExterior()) if (isCellExterior() || isCellQuasiExterior())
return 0;//mWeatherManager->getWindSpeed(); return mWeatherManager->getWindSpeed();
else else
return 0.f; return 0.f;
} }
@ -2303,7 +2306,7 @@ namespace MWWorld
bool World::isInStorm() const bool World::isInStorm() const
{ {
if (isCellExterior() || isCellQuasiExterior()) if (isCellExterior() || isCellQuasiExterior())
return 0;//mWeatherManager->isInStorm(); return mWeatherManager->isInStorm();
else else
return false; return false;
} }
@ -2311,7 +2314,7 @@ namespace MWWorld
Ogre::Vector3 World::getStormDirection() const Ogre::Vector3 World::getStormDirection() const
{ {
if (isCellExterior() || isCellQuasiExterior()) if (isCellExterior() || isCellQuasiExterior())
return Ogre::Vector3();//mWeatherManager->getStormDirection(); return mWeatherManager->getStormDirection();
else else
return Ogre::Vector3(0,1,0); return Ogre::Vector3(0,1,0);
} }
@ -2800,7 +2803,7 @@ namespace MWWorld
{ {
MWWorld::CellStore* cell = mPlayer->getPlayer().getCell(); MWWorld::CellStore* cell = mPlayer->getPlayer().getCell();
if (cell->isExterior()) if (cell->isExterior())
return 0;//mWeatherManager->isDark(); return mWeatherManager->isDark();
else else
{ {
uint32_t ambient = cell->getCell()->mAmbi.mAmbient; uint32_t ambient = cell->getCell()->mAmbi.mAmbient;