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());
}
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*/);
}

View file

@ -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);

View file

@ -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

View file

@ -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()

View file

@ -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);

View file

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

View file

@ -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);
}
}

View file

@ -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 >

View file

@ -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)

View file

@ -248,4 +248,9 @@ namespace MWRender
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);
MWRender::Animation* getAnimation(const MWWorld::Ptr& ptr);
private:
osgViewer::Viewer& mViewer;
osg::ref_ptr<osg::Group> mRootNode;

View file

@ -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)

View file

@ -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());
}

View file

@ -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;

View file

@ -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;