various bits of clean up

This commit is contained in:
Marc Zinnschlag 2011-09-04 09:48:50 +02:00
parent afa84b72e0
commit 40853e292f
10 changed files with 34 additions and 84 deletions

View File

@ -50,8 +50,6 @@ MWScene::MWScene(OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicE
mPlayer = new MWRender::Player (getCamera(), playerNode->getName()); mPlayer = new MWRender::Player (getCamera(), playerNode->getName());
mFreeFly = true;
} }
MWScene::~MWScene() MWScene::~MWScene()
@ -75,34 +73,6 @@ std::pair<std::string, float> MWScene::getFacedHandle (MWWorld::World& world)
return eng->rayTest(from,to); return eng->rayTest(from,to);
} }
bool MWScene::toggleCollisionMode()
{
for(std::map<std::string,OEngine::Physic::PhysicActor*>::iterator it = eng->PhysicActorMap.begin(); it != eng->PhysicActorMap.end();it++)
{
OEngine::Physic::PhysicActor* act = it->second;
bool cmode = act->getCollisionMode();
if(cmode)
{
act->enableCollisions(false);
act->setGravity(0.);
act->setVerticalVelocity(0);
mFreeFly = true;
return false;
}
else
{
mFreeFly = false;
act->enableCollisions(true);
act->setGravity(4.);
act->setVerticalVelocity(0);
return true;
}
}
return false; // This should never happen, but it shall not bother us now, since
// this part of the code needs a rewrite anyway.
}
bool MWScene::toggleRenderMode (int mode) bool MWScene::toggleRenderMode (int mode)
{ {
switch (mode) switch (mode)

View File

@ -44,8 +44,6 @@ namespace MWRender
MWRender::Player *mPlayer; MWRender::Player *mPlayer;
bool mFreeFly;
public: public:
MWScene (OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicEngine* physEng); MWScene (OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicEngine* physEng);
@ -65,11 +63,6 @@ namespace MWRender
/// can be faced /// can be faced
std::pair<std::string, float> getFacedHandle (MWWorld::World& world); std::pair<std::string, float> getFacedHandle (MWWorld::World& world);
/// Toggle collision mode for player. If disabled player object should ignore
/// collisions and gravity.
/// \return Resulting mode
bool toggleCollisionMode();
/// Toggle render mode /// Toggle render mode
/// \todo Using an int instead of a enum here to avoid cyclic includes. Will be fixed /// \todo Using an int instead of a enum here to avoid cyclic includes. Will be fixed
/// when the mw*-refactoring is done. /// when the mw*-refactoring is done.

View File

@ -106,24 +106,21 @@ namespace MWWorld
mEngine->deleteRigidBody(handle); mEngine->deleteRigidBody(handle);
} }
void PhysicsSystem::moveObject (const std::string& handle, const Ogre::Vector3& position, bool updatePhysics) void PhysicsSystem::moveObject (const std::string& handle, const Ogre::Vector3& position)
{ {
if(updatePhysics)//TODO: is it an actor? Done? if (OEngine::Physic::RigidBody* body = mEngine->getRigidBody(handle))
{ {
if (OEngine::Physic::RigidBody* body = mEngine->getRigidBody(handle)) // TODO very dirty hack to avoid crash during setup -> needs cleaning up to allow
{ // start positions others than 0, 0, 0
// TODO very dirty hack to avoid crash during setup -> needs cleaning up to allow btTransform tr = body->getWorldTransform();
// start positions others than 0, 0, 0 tr.setOrigin(btVector3(position.x,position.y,position.z));
btTransform tr = body->getWorldTransform(); body->setWorldTransform(tr);
tr.setOrigin(btVector3(position.x,position.y,position.z)); }
body->setWorldTransform(tr); if (OEngine::Physic::PhysicActor* act = mEngine->getCharacter(handle))
} {
if (OEngine::Physic::PhysicActor* act = mEngine->getCharacter(handle)) // TODO very dirty hack to avoid crash during setup -> needs cleaning up to allow
{ // start positions others than 0, 0, 0
// TODO very dirty hack to avoid crash during setup -> needs cleaning up to allow act->setPosition(btVector3(position.x,position.y,position.z));
// start positions others than 0, 0, 0
act->setPosition(btVector3(position.x,position.y,position.z));
}
} }
} }

View File

@ -25,7 +25,7 @@ namespace MWWorld
void removeObject (const std::string& handle); void removeObject (const std::string& handle);
void moveObject (const std::string& handle, const Ogre::Vector3& position, bool updatePhysics); void moveObject (const std::string& handle, const Ogre::Vector3& position);
void rotateObject (const std::string& handle, const Ogre::Quaternion& rotation); void rotateObject (const std::string& handle, const Ogre::Quaternion& rotation);

View File

@ -29,16 +29,10 @@ namespace MWWorld
delete mClass; delete mClass;
} }
void Player::setPos(float x, float y, float z, bool updateCamera) void Player::setPos(float x, float y, float z)
{ {
/// \todo This fcuntion should be removed during the mwrender-refactoring. /// \todo This fcuntion should be removed during the mwrender-refactoring.
mWorld.moveObject (getPlayer(), x, y, z); mWorld.moveObject (getPlayer(), x, y, z);
if (updateCamera)
mRenderer->getCamera()->setPosition (Ogre::Vector3 (
mPlayer.ref.pos.pos[0],
mPlayer.ref.pos.pos[2],
-mPlayer.ref.pos.pos[1]));
} }
void Player::setClass (const ESM::Class& class_) void Player::setClass (const ESM::Class& class_)

View File

@ -39,7 +39,7 @@ namespace MWWorld
~Player(); ~Player();
/// Set the player position. Uses Morrowind coordinates. /// Set the player position. Uses Morrowind coordinates.
void setPos(float _x, float _y, float _z, bool updateCamera = false); void setPos(float x, float y, float z);
void setCell (MWWorld::Ptr::CellStore *cellStore) void setCell (MWWorld::Ptr::CellStore *cellStore)
{ {

View File

@ -85,7 +85,7 @@ namespace MWWorld
bool adjustPlayerPos) bool adjustPlayerPos)
{ {
if (adjustPlayerPos) if (adjustPlayerPos)
mWorld->getPlayer().setPos (position.pos[0], position.pos[1], position.pos[2], false); mWorld->getPlayer().setPos (position.pos[0], position.pos[1], position.pos[2]);
mWorld->getPlayer().setCell (cell); mWorld->getPlayer().setCell (cell);
// TODO orientation // TODO orientation
@ -187,7 +187,7 @@ namespace MWWorld
return mCellChanged; return mCellChanged;
} }
const std::map<Ptr::CellStore *, MWRender::CellRender *>& Scene::getActiveCells () const Scene::CellRenderCollection& Scene::getActiveCells() const
{ {
return mActiveCells; return mActiveCells;
} }

View File

@ -53,10 +53,10 @@ namespace MWWorld
public: public:
private:
typedef std::map<Ptr::CellStore *, MWRender::CellRender *> CellRenderCollection; typedef std::map<Ptr::CellStore *, MWRender::CellRender *> CellRenderCollection;
private:
MWRender::MWScene& mScene; MWRender::MWScene& mScene;
Ptr::CellStore *mCurrentCell; // the cell, the player is in Ptr::CellStore *mCurrentCell; // the cell, the player is in
CellRenderCollection mActiveCells; CellRenderCollection mActiveCells;
@ -65,12 +65,11 @@ namespace MWWorld
World *mWorld; World *mWorld;
PhysicsSystem *mPhysics; PhysicsSystem *mPhysics;
void playerCellChange (Ptr::CellStore *cell, const ESM::Position& position, void playerCellChange (Ptr::CellStore *cell, const ESM::Position& position,
bool adjustPlayerPos = true); bool adjustPlayerPos = true);
public: public:
Scene (Environment& environment, World *world, MWRender::MWScene& scene, PhysicsSystem *physics); Scene (Environment& environment, World *world, MWRender::MWScene& scene, PhysicsSystem *physics);
~Scene(); ~Scene();
@ -84,7 +83,7 @@ namespace MWWorld
Ptr::CellStore* getCurrentCell (); Ptr::CellStore* getCurrentCell ();
const CellRenderCollection& getActiveCells (); const CellRenderCollection& getActiveCells () const;
bool hasCellChanged() const; bool hasCellChanged() const;
///< Has the player moved to a different cell, since the last frame? ///< Has the player moved to a different cell, since the last frame?
@ -97,7 +96,7 @@ namespace MWWorld
void markCellAsUnchanged(); void markCellAsUnchanged();
std::string getFacedHandle(); // std::string getFacedHandle();
void insertCell(ESMS::CellStore<MWWorld::RefData> &cell); void insertCell(ESMS::CellStore<MWWorld::RefData> &cell);
}; };

View File

@ -219,7 +219,7 @@ namespace MWWorld
MWRender::CellRender *World::searchRender (Ptr::CellStore *store) MWRender::CellRender *World::searchRender (Ptr::CellStore *store)
{ {
CellRenderCollection::const_iterator iter = mWorldScene->getActiveCells().find (store); Scene::CellRenderCollection::const_iterator iter = mWorldScene->getActiveCells().find (store);
if (iter!=mWorldScene->getActiveCells().end()) if (iter!=mWorldScene->getActiveCells().end())
{ {
@ -405,7 +405,7 @@ namespace MWWorld
} }
// active cells // active cells
for (CellRenderCollection::const_iterator iter (mWorldScene->getActiveCells().begin()); for (Scene::CellRenderCollection::const_iterator iter (mWorldScene->getActiveCells().begin());
iter!=mWorldScene->getActiveCells().end(); ++iter) iter!=mWorldScene->getActiveCells().end(); ++iter)
{ {
Ptr ptr = getPtr (name, *iter->first); Ptr ptr = getPtr (name, *iter->first);
@ -427,7 +427,7 @@ namespace MWWorld
if (mPlayer->getPlayer().getRefData().getHandle()==handle) if (mPlayer->getPlayer().getRefData().getHandle()==handle)
return mPlayer->getPlayer(); return mPlayer->getPlayer();
for (CellRenderCollection::const_iterator iter (mWorldScene->getActiveCells().begin()); for (Scene::CellRenderCollection::const_iterator iter (mWorldScene->getActiveCells().begin());
iter!=mWorldScene->getActiveCells().end(); ++iter) iter!=mWorldScene->getActiveCells().end(); ++iter)
{ {
Ptr ptr = getPtrViaHandle (handle, *iter->first); Ptr ptr = getPtrViaHandle (handle, *iter->first);
@ -683,8 +683,7 @@ namespace MWWorld
{ {
moveObjectImp(ptr, x, y, z); moveObjectImp(ptr, x, y, z);
mPhysics->moveObject (ptr.getRefData().getHandle(), Ogre::Vector3 (x, y, z), mPhysics->moveObject (ptr.getRefData().getHandle(), Ogre::Vector3 (x, y, z));
true);
} }
void World::indexToPosition (int cellX, int cellY, float &x, float &y, bool centre) const void World::indexToPosition (int cellX, int cellY, float &x, float &y, bool centre) const
@ -746,7 +745,7 @@ namespace MWWorld
bool World::toggleCollisionMode() bool World::toggleCollisionMode()
{ {
return mScene.toggleCollisionMode(); return mPhysics->toggleCollisionMode();
} }
bool World::toggleRenderMode (RenderMode mode) bool World::toggleRenderMode (RenderMode mode)

View File

@ -65,8 +65,6 @@ namespace MWWorld
private: private:
typedef std::map<Ptr::CellStore *, MWRender::CellRender *> CellRenderCollection;
MWRender::MWScene mScene; MWRender::MWScene mScene;
MWWorld::Scene *mWorldScene; MWWorld::Scene *mWorldScene;
MWWorld::Player *mPlayer; MWWorld::Player *mPlayer;
@ -79,7 +77,7 @@ namespace MWWorld
Environment& mEnvironment; Environment& mEnvironment;
MWRender::RenderingManager *mRenderingManager; MWRender::RenderingManager *mRenderingManager;
int mNextDynamicRecord; int mNextDynamicRecord;
std::map<std::string, Ptr::CellStore> mInteriors; std::map<std::string, Ptr::CellStore> mInteriors;
std::map<std::pair<int, int>, Ptr::CellStore> mExteriors; std::map<std::pair<int, int>, Ptr::CellStore> mExteriors;
@ -96,9 +94,9 @@ namespace MWWorld
MWRender::CellRender *searchRender (Ptr::CellStore *store); MWRender::CellRender *searchRender (Ptr::CellStore *store);
int getDaysPerMonth (int month) const; int getDaysPerMonth (int month) const;
void moveObjectImp (Ptr ptr, float x, float y, float z); void moveObjectImp (Ptr ptr, float x, float y, float z);
public: public:
World (OEngine::Render::OgreRenderer& renderer, OEngine::Physic::PhysicEngine* physEng, World (OEngine::Render::OgreRenderer& renderer, OEngine::Physic::PhysicEngine* physEng,
@ -107,9 +105,9 @@ namespace MWWorld
Environment& environment, const std::string& encoding); Environment& environment, const std::string& encoding);
~World(); ~World();
Ptr::CellStore *getExterior (int x, int y); Ptr::CellStore *getExterior (int x, int y);
Ptr::CellStore *getInterior (std::string name); Ptr::CellStore *getInterior (std::string name);
void removeScripts (Ptr::CellStore *cell); void removeScripts (Ptr::CellStore *cell);
@ -121,7 +119,7 @@ namespace MWWorld
MWWorld::Player& getPlayer(); MWWorld::Player& getPlayer();
const ESMS::ESMStore& getStore() const; const ESMS::ESMStore& getStore() const;
ESM::ESMReader& getEsmReader(); ESM::ESMReader& getEsmReader();
const ScriptList& getLocalScripts() const; const ScriptList& getLocalScripts() const;