forked from mirror/openmw-tes3mp
MechanicsManager, frame update
This commit is contained in:
parent
2db097f80e
commit
0ff7b2ff11
15 changed files with 95 additions and 117 deletions
|
@ -69,23 +69,10 @@ void OMW::Engine::executeLocalScripts()
|
|||
localScripts.setIgnore (MWWorld::Ptr());
|
||||
}
|
||||
|
||||
bool OMW::Engine::frameStarted (const Ogre::FrameEvent& evt)
|
||||
{
|
||||
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)
|
||||
void OMW::Engine::frame(float frametime)
|
||||
{
|
||||
try
|
||||
{
|
||||
float frametime = evt.timeSinceLastFrame;
|
||||
mEnvironment.setFrameDuration (frametime);
|
||||
|
||||
// update input
|
||||
|
@ -173,8 +160,6 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt)
|
|||
{
|
||||
std::cerr << "Error in framelistener: " << e.what() << std::endl;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
OMW::Engine::Engine(Files::ConfigurationManager& configurationManager)
|
||||
|
@ -486,12 +471,7 @@ void OMW::Engine::go()
|
|||
frameTimer.setStartTick();
|
||||
//dt = std::min(dt, 0.2f);
|
||||
|
||||
// frameRenderingQueued(dt);
|
||||
MWBase::Environment::get().getWorld()->update(dt, false);
|
||||
|
||||
MWBase::Environment::get().getWorld()->advanceTime(
|
||||
dt*MWBase::Environment::get().getWorld()->getTimeScaleFactor()/3600);
|
||||
|
||||
frame(dt);
|
||||
mViewer->frame(/*simulationTime*/);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
#ifndef ENGINE_H
|
||||
#define ENGINE_H
|
||||
|
||||
#include <OgreFrameListener.h>
|
||||
|
||||
#include <components/compiler/extensions.hpp>
|
||||
#include <components/files/collections.hpp>
|
||||
#include <components/translation/translation.hpp>
|
||||
|
@ -58,7 +56,7 @@ namespace Files
|
|||
namespace OMW
|
||||
{
|
||||
/// \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<Resource::ResourceSystem> mResourceSystem;
|
||||
|
@ -104,8 +102,7 @@ namespace OMW
|
|||
|
||||
void executeLocalScripts();
|
||||
|
||||
virtual bool frameRenderingQueued (const Ogre::FrameEvent& evt);
|
||||
virtual bool frameStarted (const Ogre::FrameEvent& evt);
|
||||
void frame (float dt);
|
||||
|
||||
/// Load settings from various files, returns the path to the user settings file
|
||||
std::string loadSettings (Settings::Manager & settings);
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
#include <boost/iostreams/stream_buffer.hpp>
|
||||
#include <boost/filesystem/fstream.hpp>
|
||||
|
||||
#include <OgrePlatform.h>
|
||||
|
||||
#if defined(_WIN32)
|
||||
// For OutputDebugString
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
#include "actor.hpp"
|
||||
|
||||
//#include "character.hpp"
|
||||
#include "character.hpp"
|
||||
|
||||
namespace MWMechanics
|
||||
{
|
||||
|
||||
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)
|
||||
{
|
||||
//mCharacterController->updatePtr(newPtr);
|
||||
mCharacterController->updatePtr(newPtr);
|
||||
}
|
||||
|
||||
CharacterController* Actor::getCharacterController()
|
||||
{
|
||||
return 0;//mCharacterController.get();
|
||||
return mCharacterController.get();
|
||||
}
|
||||
|
||||
AiState& Actor::getAiState()
|
||||
|
|
|
@ -1014,6 +1014,8 @@ namespace MWMechanics
|
|||
removeActor(ptr);
|
||||
|
||||
MWRender::Animation *anim = MWBase::Environment::get().getWorld()->getAnimation(ptr);
|
||||
if (!anim)
|
||||
return;
|
||||
mActors.insert(std::make_pair(ptr, new Actor(ptr, anim)));
|
||||
if (updateImmediately)
|
||||
mActors[ptr]->getCharacterController()->update(0);
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#include "character.hpp"
|
||||
|
||||
#include <OgreStringConverter.h>
|
||||
#include <OgreSceneNode.h>
|
||||
|
||||
#include "movement.hpp"
|
||||
#include "npcstats.hpp"
|
||||
|
|
|
@ -294,27 +294,22 @@ namespace MWMechanics
|
|||
|
||||
void MechanicsManager::add(const MWWorld::Ptr& ptr)
|
||||
{
|
||||
/*
|
||||
if(ptr.getClass().isActor())
|
||||
mActors.addActor(ptr);
|
||||
else
|
||||
mObjects.addObject(ptr);
|
||||
*/
|
||||
}
|
||||
|
||||
void MechanicsManager::remove(const MWWorld::Ptr& ptr)
|
||||
{
|
||||
/*
|
||||
if(ptr == mWatched)
|
||||
mWatched = MWWorld::Ptr();
|
||||
mActors.removeActor(ptr);
|
||||
mObjects.removeObject(ptr);
|
||||
*/
|
||||
}
|
||||
|
||||
void MechanicsManager::updateCell(const MWWorld::Ptr &old, const MWWorld::Ptr &ptr)
|
||||
{
|
||||
/*
|
||||
if(old == mWatched)
|
||||
mWatched = ptr;
|
||||
|
||||
|
@ -322,16 +317,13 @@ namespace MWMechanics
|
|||
mActors.updateActor(old, ptr);
|
||||
else
|
||||
mObjects.updateObject(old, ptr);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
void MechanicsManager::drop(const MWWorld::CellStore *cellStore)
|
||||
{
|
||||
/*
|
||||
mActors.dropActors(cellStore, mWatched);
|
||||
mObjects.dropObjects(cellStore);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
@ -472,24 +464,24 @@ namespace MWMechanics
|
|||
|
||||
// HACK? The player has been changed, so a new Animation object may
|
||||
// have been made for them. Make sure they're properly updated.
|
||||
//MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPlayerPtr();
|
||||
//mActors.removeActor(ptr);
|
||||
//mActors.addActor(ptr, true);
|
||||
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPlayerPtr();
|
||||
mActors.removeActor(ptr);
|
||||
mActors.addActor(ptr, true);
|
||||
}
|
||||
|
||||
//mActors.update(duration, paused);
|
||||
//mObjects.update(duration, paused);
|
||||
mActors.update(duration, paused);
|
||||
mObjects.update(duration, paused);
|
||||
}
|
||||
|
||||
void MechanicsManager::rest(bool sleep)
|
||||
{
|
||||
//mActors.restoreDynamicStats (sleep);
|
||||
//mActors.fastForwardAi();
|
||||
mActors.restoreDynamicStats (sleep);
|
||||
mActors.fastForwardAi();
|
||||
}
|
||||
|
||||
int MechanicsManager::getHoursToRest() const
|
||||
{
|
||||
return 0;//mActors.getHoursToRest(mWatched);
|
||||
return mActors.getHoursToRest(mWatched);
|
||||
}
|
||||
|
||||
void MechanicsManager::setPlayerName (const std::string& name)
|
||||
|
@ -679,7 +671,7 @@ namespace MWMechanics
|
|||
|
||||
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,
|
||||
|
@ -835,39 +827,35 @@ namespace MWMechanics
|
|||
|
||||
void MechanicsManager::forceStateUpdate(const MWWorld::Ptr &ptr)
|
||||
{
|
||||
//if(ptr.getClass().isActor())
|
||||
//mActors.forceStateUpdate(ptr);
|
||||
if(ptr.getClass().isActor())
|
||||
mActors.forceStateUpdate(ptr);
|
||||
}
|
||||
|
||||
void MechanicsManager::playAnimationGroup(const MWWorld::Ptr& ptr, const std::string& groupName, int mode, int number)
|
||||
{
|
||||
/*
|
||||
if(ptr.getClass().isActor())
|
||||
mActors.playAnimationGroup(ptr, groupName, mode, number);
|
||||
else
|
||||
mObjects.playAnimationGroup(ptr, groupName, mode, number);
|
||||
*/
|
||||
}
|
||||
void MechanicsManager::skipAnimation(const MWWorld::Ptr& ptr)
|
||||
{
|
||||
/*
|
||||
if(ptr.getClass().isActor())
|
||||
mActors.skipAnimation(ptr);
|
||||
else
|
||||
mObjects.skipAnimation(ptr);
|
||||
*/
|
||||
}
|
||||
bool MechanicsManager::checkAnimationPlaying(const MWWorld::Ptr& ptr, const std::string &groupName)
|
||||
{
|
||||
//if(ptr.getClass().isActor())
|
||||
// return mActors.checkAnimationPlaying(ptr, groupName);
|
||||
//else
|
||||
if(ptr.getClass().isActor())
|
||||
return mActors.checkAnimationPlaying(ptr, groupName);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void MechanicsManager::updateMagicEffects(const MWWorld::Ptr &ptr)
|
||||
{
|
||||
//mActors.updateMagicEffects(ptr);
|
||||
mActors.updateMagicEffects(ptr);
|
||||
}
|
||||
|
||||
bool MechanicsManager::toggleAI()
|
||||
|
@ -1062,7 +1050,7 @@ namespace MWMechanics
|
|||
const MWWorld::ESMStore& esmStore = MWBase::Environment::get().getWorld()->getStore();
|
||||
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
|
||||
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);
|
||||
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
|
||||
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 (ptr.getClass().isClass(ptr, "Guard"))
|
||||
{
|
||||
/*
|
||||
for (Actors::PtrActorMap::const_iterator iter = mActors.begin(); iter != mActors.end(); ++iter)
|
||||
{
|
||||
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)
|
||||
{
|
||||
//mActors.getObjectsInRange(position, radius, objects);
|
||||
//mObjects.getObjectsInRange(position, radius, objects);
|
||||
mActors.getObjectsInRange(position, radius, objects);
|
||||
mObjects.getObjectsInRange(position, radius, 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)
|
||||
{
|
||||
return std::list<MWWorld::Ptr>();//mActors.getActorsFollowing(actor);
|
||||
return mActors.getActorsFollowing(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) {
|
||||
return std::list<MWWorld::Ptr>();// mActors.getActorsFighting(actor);
|
||||
return mActors.getActorsFighting(actor);
|
||||
}
|
||||
|
||||
int MechanicsManager::countSavedGameRecords() const
|
||||
|
@ -1461,7 +1447,7 @@ namespace MWMechanics
|
|||
|
||||
void MechanicsManager::write(ESM::ESMWriter &writer, Loading::Listener &listener) const
|
||||
{
|
||||
//mActors.write(writer, listener);
|
||||
mActors.write(writer, listener);
|
||||
|
||||
ESM::StolenItems items;
|
||||
items.mStolenItems = mStolenItems;
|
||||
|
@ -1478,13 +1464,13 @@ namespace MWMechanics
|
|||
items.load(reader);
|
||||
mStolenItems = items.mStolenItems;
|
||||
}
|
||||
//else
|
||||
//mActors.readRecord(reader, type);
|
||||
else
|
||||
mActors.readRecord(reader, type);
|
||||
}
|
||||
|
||||
void MechanicsManager::clear()
|
||||
{
|
||||
//mActors.clear();
|
||||
mActors.clear();
|
||||
mStolenItems.clear();
|
||||
}
|
||||
|
||||
|
@ -1530,6 +1516,6 @@ namespace MWMechanics
|
|||
|
||||
bool MechanicsManager::isReadyToBlock(const MWWorld::Ptr &ptr) const
|
||||
{
|
||||
return 0;//mActors.isReadyToBlock(ptr);
|
||||
return mActors.isReadyToBlock(ptr);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
|
||||
#include "creaturestats.hpp"
|
||||
#include "npcstats.hpp"
|
||||
//#include "objects.hpp"
|
||||
//#include "actors.hpp"
|
||||
#include "objects.hpp"
|
||||
#include "actors.hpp"
|
||||
|
||||
namespace Ogre
|
||||
{
|
||||
|
@ -32,8 +32,8 @@ namespace MWMechanics
|
|||
bool mRaceSelected;
|
||||
bool mAI;///< is AI active?
|
||||
|
||||
//Objects mObjects;
|
||||
//Actors mActors;
|
||||
Objects mObjects;
|
||||
Actors mActors;
|
||||
|
||||
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 >
|
||||
|
|
|
@ -197,9 +197,7 @@ void Objects::removeCell(const MWWorld::CellStore* store)
|
|||
|
||||
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)
|
||||
|
|
|
@ -248,4 +248,9 @@ namespace MWRender
|
|||
notifyWorldSpaceChanged();
|
||||
}
|
||||
|
||||
MWRender::Animation* RenderingManager::getAnimation(const MWWorld::Ptr &ptr)
|
||||
{
|
||||
return mObjects->getAnimation(ptr);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -78,6 +78,8 @@ namespace MWRender
|
|||
|
||||
void update(float dt, bool paused);
|
||||
|
||||
MWRender::Animation* getAnimation(const MWWorld::Ptr& ptr);
|
||||
|
||||
private:
|
||||
osgViewer::Viewer& mViewer;
|
||||
osg::ref_ptr<osg::Group> mRootNode;
|
||||
|
|
|
@ -503,15 +503,15 @@ namespace MWWorld
|
|||
{
|
||||
// Create physics. shapeLoader is deleted by the physic engine
|
||||
//NifBullet::ManualBulletShapeLoader* shapeLoader = new NifBullet::ManualBulletShapeLoader();
|
||||
mEngine = new OEngine::Physic::PhysicEngine(0);//shapeLoader);
|
||||
//mEngine = new OEngine::Physic::PhysicEngine(0);//shapeLoader);
|
||||
}
|
||||
|
||||
PhysicsSystem::~PhysicsSystem()
|
||||
{
|
||||
if (mWaterCollisionObject.get())
|
||||
mEngine->mDynamicsWorld->removeCollisionObject(mWaterCollisionObject.get());
|
||||
delete mEngine;
|
||||
delete OEngine::Physic::BulletShapeManager::getSingletonPtr();
|
||||
//if (mWaterCollisionObject.get())
|
||||
// mEngine->mDynamicsWorld->removeCollisionObject(mWaterCollisionObject.get());
|
||||
//delete mEngine;
|
||||
//delete OEngine::Physic::BulletShapeManager::getSingletonPtr();
|
||||
}
|
||||
|
||||
OEngine::Physic::PhysicEngine* PhysicsSystem::getEngine()
|
||||
|
@ -674,19 +674,23 @@ namespace MWWorld
|
|||
|
||||
void PhysicsSystem::addObject (const Ptr& ptr, const std::string& mesh, bool placeable)
|
||||
{
|
||||
/*
|
||||
Ogre::SceneNode* node = ptr.getRefData().getBaseNodeOld();
|
||||
handleToMesh[node->getName()] = mesh;
|
||||
mEngine->createAndAdjustRigidBody(
|
||||
mesh, node->getName(), ptr.getCellRef().getScale(), node->getPosition(), node->getOrientation(), 0, 0, false, placeable);
|
||||
mEngine->createAndAdjustRigidBody(
|
||||
mesh, node->getName(), ptr.getCellRef().getScale(), node->getPosition(), node->getOrientation(), 0, 0, true, placeable);
|
||||
*/
|
||||
}
|
||||
|
||||
void PhysicsSystem::addActor (const Ptr& ptr, const std::string& mesh)
|
||||
{
|
||||
/*
|
||||
Ogre::SceneNode* node = ptr.getRefData().getBaseNodeOld();
|
||||
//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());
|
||||
*/
|
||||
}
|
||||
|
||||
void PhysicsSystem::removeObject (const std::string& handle)
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
namespace
|
||||
{
|
||||
|
||||
void addObject(const MWWorld::Ptr& ptr, //MWWorld::PhysicsSystem& physics,
|
||||
void addObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics,
|
||||
MWRender::RenderingManager& rendering)
|
||||
{
|
||||
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")
|
||||
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().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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (ptr.getRefData().getBaseNode() != NULL)
|
||||
|
@ -82,20 +82,20 @@ namespace
|
|||
MWWorld::CellStore& mCell;
|
||||
bool mRescale;
|
||||
Loading::Listener& mLoadingListener;
|
||||
//MWWorld::PhysicsSystem& mPhysics;
|
||||
MWWorld::PhysicsSystem& mPhysics;
|
||||
MWRender::RenderingManager& mRendering;
|
||||
|
||||
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);
|
||||
};
|
||||
|
||||
InsertFunctor::InsertFunctor (MWWorld::CellStore& cell, bool rescale,
|
||||
Loading::Listener& loadingListener, /*MWWorld::PhysicsSystem& physics,*/
|
||||
Loading::Listener& loadingListener, MWWorld::PhysicsSystem& physics,
|
||||
MWRender::RenderingManager& rendering)
|
||||
: mCell (cell), mRescale (rescale), mLoadingListener (loadingListener),
|
||||
//mPhysics (physics),
|
||||
mPhysics (physics),
|
||||
mRendering (rendering)
|
||||
{}
|
||||
|
||||
|
@ -113,9 +113,9 @@ namespace
|
|||
{
|
||||
try
|
||||
{
|
||||
addObject(ptr, /*mPhysics, */mRendering);
|
||||
updateObjectLocalRotation(ptr, /*mPhysics,*/ mRendering);
|
||||
updateObjectScale(ptr, /*mPhysics,*/ mRendering);
|
||||
addObject(ptr, mPhysics, mRendering);
|
||||
updateObjectLocalRotation(ptr, mPhysics, mRendering);
|
||||
updateObjectScale(ptr, mPhysics, mRendering);
|
||||
ptr.getClass().adjustPosition (ptr, false);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
|
@ -137,12 +137,12 @@ namespace MWWorld
|
|||
|
||||
void Scene::updateObjectLocalRotation (const Ptr& ptr)
|
||||
{
|
||||
::updateObjectLocalRotation(ptr, /* *mPhysics,*/ mRendering);
|
||||
::updateObjectLocalRotation(ptr, *mPhysics, mRendering);
|
||||
}
|
||||
|
||||
void Scene::updateObjectScale(const Ptr &ptr)
|
||||
{
|
||||
::updateObjectScale(ptr, /* *mPhysics,*/ mRendering);
|
||||
::updateObjectScale(ptr, *mPhysics, mRendering);
|
||||
}
|
||||
|
||||
void Scene::getGridCenter(int &cellX, int &cellY)
|
||||
|
@ -447,7 +447,7 @@ namespace MWWorld
|
|||
|
||||
//We need the ogre renderer and a scene node.
|
||||
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)
|
||||
{
|
||||
InsertFunctor functor (cell, rescale, *loadingListener, /* *mPhysics, */mRendering);
|
||||
InsertFunctor functor (cell, rescale, *loadingListener, *mPhysics, mRendering);
|
||||
cell.forEach (functor);
|
||||
}
|
||||
|
||||
|
@ -565,7 +565,7 @@ namespace MWWorld
|
|||
{
|
||||
try
|
||||
{
|
||||
addObject(ptr, /* *mPhysics, */mRendering);
|
||||
addObject(ptr, *mPhysics, mRendering);
|
||||
MWBase::Environment::get().getWorld()->rotateObject(ptr, 0, 0, 0, true);
|
||||
MWBase::Environment::get().getWorld()->scaleObject(ptr, ptr.getCellRef().getScale());
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ namespace MWWorld
|
|||
CellStore* mCurrentCell; // the cell the player is in
|
||||
CellStoreCollection mActiveCells;
|
||||
bool mCellChanged;
|
||||
//PhysicsSystem *mPhysics;
|
||||
PhysicsSystem *mPhysics;
|
||||
MWRender::RenderingManager& mRendering;
|
||||
|
||||
bool mNeedMapUpdate;
|
||||
|
|
|
@ -54,6 +54,7 @@
|
|||
#include "actionteleport.hpp"
|
||||
//#include "projectilemanager.hpp"
|
||||
#include "weather.hpp"
|
||||
#include "physicssystem.hpp"
|
||||
|
||||
#include "contentloader.hpp"
|
||||
#include "esmloader.hpp"
|
||||
|
@ -160,7 +161,7 @@ namespace MWWorld
|
|||
mStartCell (startCell), mStartupScript(startupScript),
|
||||
mScriptsEnabled(true)
|
||||
{
|
||||
//mPhysics = new PhysicsSystem(renderer);
|
||||
mPhysics = new PhysicsSystem();
|
||||
//mPhysEngine = mPhysics->getEngine();
|
||||
#if 0
|
||||
mProjectileManager.reset(new ProjectileManager(renderer.getScene(), *mPhysEngine));
|
||||
|
@ -199,7 +200,7 @@ namespace MWWorld
|
|||
|
||||
mGlobalVariables.fill (mStore);
|
||||
|
||||
mWorldScene = new Scene(*mRendering, NULL/*mPhysics*/);
|
||||
mWorldScene = new Scene(*mRendering, mPhysics);
|
||||
}
|
||||
|
||||
void World::startNewGame (bool bypass)
|
||||
|
@ -480,7 +481,7 @@ namespace MWWorld
|
|||
delete mWeatherManager;
|
||||
delete mWorldScene;
|
||||
delete mRendering;
|
||||
//delete mPhysics;
|
||||
delete mPhysics;
|
||||
|
||||
delete mPlayer;
|
||||
}
|
||||
|
@ -2000,7 +2001,7 @@ namespace MWWorld
|
|||
&& isLevitationEnabled())
|
||||
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())
|
||||
return true;
|
||||
|
||||
|
@ -2040,7 +2041,7 @@ namespace MWWorld
|
|||
const float *fpos = object.getRefData().getPosition().pos;
|
||||
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)
|
||||
{
|
||||
pos.z += heightRatio*2*actor->getHalfExtents().z;
|
||||
|
@ -2069,8 +2070,8 @@ namespace MWWorld
|
|||
// TODO: There might be better places to update PhysicActor::mOnGround.
|
||||
bool World::isOnGround(const MWWorld::Ptr &ptr) const
|
||||
{
|
||||
RefData &refdata = ptr.getRefData();
|
||||
OEngine::Physic::PhysicActor *physactor = mPhysEngine->getCharacter(refdata.getHandle());
|
||||
//RefData &refdata = ptr.getRefData();
|
||||
OEngine::Physic::PhysicActor *physactor = 0;//mPhysEngine->getCharacter(refdata.getHandle());
|
||||
|
||||
if(!physactor)
|
||||
return false;
|
||||
|
@ -2142,15 +2143,17 @@ namespace MWWorld
|
|||
CellStore *currentCell = mWorldScene->getCurrentCell();
|
||||
|
||||
Ptr player = mPlayer->getPlayer();
|
||||
RefData &refdata = player.getRefData();
|
||||
Ogre::Vector3 playerPos(refdata.getPosition().pos);
|
||||
//RefData &refdata = player.getRefData();
|
||||
//Ogre::Vector3 playerPos(refdata.getPosition().pos);
|
||||
|
||||
/*
|
||||
const OEngine::Physic::PhysicActor *physactor = mPhysEngine->getCharacter(refdata.getHandle());
|
||||
if (!physactor)
|
||||
throw std::runtime_error("can't find player");
|
||||
|
||||
if((!physactor->getOnGround()&&physactor->getCollisionMode()) || isUnderwater(currentCell, playerPos) || isWalkingOnWater(player))
|
||||
return 2;
|
||||
*/
|
||||
if((currentCell->getCell()->mData.mFlags&ESM::Cell::NoSleep) ||
|
||||
player.getClass().getNpcStats(player).isWerewolf())
|
||||
return 1;
|
||||
|
@ -2160,7 +2163,7 @@ namespace MWWorld
|
|||
|
||||
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)
|
||||
|
@ -2295,7 +2298,7 @@ namespace MWWorld
|
|||
float World::getWindSpeed()
|
||||
{
|
||||
if (isCellExterior() || isCellQuasiExterior())
|
||||
return 0;//mWeatherManager->getWindSpeed();
|
||||
return mWeatherManager->getWindSpeed();
|
||||
else
|
||||
return 0.f;
|
||||
}
|
||||
|
@ -2303,7 +2306,7 @@ namespace MWWorld
|
|||
bool World::isInStorm() const
|
||||
{
|
||||
if (isCellExterior() || isCellQuasiExterior())
|
||||
return 0;//mWeatherManager->isInStorm();
|
||||
return mWeatherManager->isInStorm();
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
@ -2311,7 +2314,7 @@ namespace MWWorld
|
|||
Ogre::Vector3 World::getStormDirection() const
|
||||
{
|
||||
if (isCellExterior() || isCellQuasiExterior())
|
||||
return Ogre::Vector3();//mWeatherManager->getStormDirection();
|
||||
return mWeatherManager->getStormDirection();
|
||||
else
|
||||
return Ogre::Vector3(0,1,0);
|
||||
}
|
||||
|
@ -2800,7 +2803,7 @@ namespace MWWorld
|
|||
{
|
||||
MWWorld::CellStore* cell = mPlayer->getPlayer().getCell();
|
||||
if (cell->isExterior())
|
||||
return 0;//mWeatherManager->isDark();
|
||||
return mWeatherManager->isDark();
|
||||
else
|
||||
{
|
||||
uint32_t ambient = cell->getCell()->mAmbi.mAmbient;
|
||||
|
|
Loading…
Reference in a new issue