From 40853e292f50aff0811584bd853c55a9f34a424a Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 4 Sep 2011 09:48:50 +0200 Subject: [PATCH] various bits of clean up --- apps/openmw/mwrender/mwscene.cpp | 30 --------------------------- apps/openmw/mwrender/mwscene.hpp | 7 ------- apps/openmw/mwworld/physicssystem.cpp | 29 ++++++++++++-------------- apps/openmw/mwworld/physicssystem.hpp | 2 +- apps/openmw/mwworld/player.cpp | 8 +------ apps/openmw/mwworld/player.hpp | 2 +- apps/openmw/mwworld/scene.cpp | 4 ++-- apps/openmw/mwworld/scene.hpp | 11 +++++----- apps/openmw/mwworld/world.cpp | 11 +++++----- apps/openmw/mwworld/world.hpp | 14 ++++++------- 10 files changed, 34 insertions(+), 84 deletions(-) diff --git a/apps/openmw/mwrender/mwscene.cpp b/apps/openmw/mwrender/mwscene.cpp index a4ebff94d..900b4d249 100644 --- a/apps/openmw/mwrender/mwscene.cpp +++ b/apps/openmw/mwrender/mwscene.cpp @@ -50,8 +50,6 @@ MWScene::MWScene(OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicE mPlayer = new MWRender::Player (getCamera(), playerNode->getName()); - - mFreeFly = true; } MWScene::~MWScene() @@ -75,34 +73,6 @@ std::pair MWScene::getFacedHandle (MWWorld::World& world) return eng->rayTest(from,to); } -bool MWScene::toggleCollisionMode() -{ - for(std::map::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) { switch (mode) diff --git a/apps/openmw/mwrender/mwscene.hpp b/apps/openmw/mwrender/mwscene.hpp index a9dfad7b5..918679035 100644 --- a/apps/openmw/mwrender/mwscene.hpp +++ b/apps/openmw/mwrender/mwscene.hpp @@ -44,8 +44,6 @@ namespace MWRender MWRender::Player *mPlayer; - bool mFreeFly; - public: MWScene (OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicEngine* physEng); @@ -65,11 +63,6 @@ namespace MWRender /// can be faced std::pair 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 /// \todo Using an int instead of a enum here to avoid cyclic includes. Will be fixed /// when the mw*-refactoring is done. diff --git a/apps/openmw/mwworld/physicssystem.cpp b/apps/openmw/mwworld/physicssystem.cpp index dae79ccb1..fa617a9c7 100644 --- a/apps/openmw/mwworld/physicssystem.cpp +++ b/apps/openmw/mwworld/physicssystem.cpp @@ -106,24 +106,21 @@ namespace MWWorld 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 - btTransform tr = body->getWorldTransform(); - tr.setOrigin(btVector3(position.x,position.y,position.z)); - body->setWorldTransform(tr); - } - 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 - act->setPosition(btVector3(position.x,position.y,position.z)); - } + // TODO very dirty hack to avoid crash during setup -> needs cleaning up to allow + // start positions others than 0, 0, 0 + btTransform tr = body->getWorldTransform(); + tr.setOrigin(btVector3(position.x,position.y,position.z)); + body->setWorldTransform(tr); + } + 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 + act->setPosition(btVector3(position.x,position.y,position.z)); } } diff --git a/apps/openmw/mwworld/physicssystem.hpp b/apps/openmw/mwworld/physicssystem.hpp index 4fbbb2ee6..7f7bfdcbb 100644 --- a/apps/openmw/mwworld/physicssystem.hpp +++ b/apps/openmw/mwworld/physicssystem.hpp @@ -25,7 +25,7 @@ namespace MWWorld 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); diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index 0888b4231..cad97c9ea 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -29,16 +29,10 @@ namespace MWWorld 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. 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_) diff --git a/apps/openmw/mwworld/player.hpp b/apps/openmw/mwworld/player.hpp index fc29286a9..01c71da43 100644 --- a/apps/openmw/mwworld/player.hpp +++ b/apps/openmw/mwworld/player.hpp @@ -39,7 +39,7 @@ namespace MWWorld ~Player(); /// 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) { diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index 339cf3194..53a0ed923 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -85,7 +85,7 @@ namespace MWWorld bool 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); // TODO orientation @@ -187,7 +187,7 @@ namespace MWWorld return mCellChanged; } - const std::map& Scene::getActiveCells () + const Scene::CellRenderCollection& Scene::getActiveCells() const { return mActiveCells; } diff --git a/apps/openmw/mwworld/scene.hpp b/apps/openmw/mwworld/scene.hpp index 0455ade00..9e43a98a5 100644 --- a/apps/openmw/mwworld/scene.hpp +++ b/apps/openmw/mwworld/scene.hpp @@ -53,10 +53,10 @@ namespace MWWorld public: - private: - typedef std::map CellRenderCollection; + private: + MWRender::MWScene& mScene; Ptr::CellStore *mCurrentCell; // the cell, the player is in CellRenderCollection mActiveCells; @@ -65,12 +65,11 @@ namespace MWWorld World *mWorld; PhysicsSystem *mPhysics; - void playerCellChange (Ptr::CellStore *cell, const ESM::Position& position, bool adjustPlayerPos = true); public: - Scene (Environment& environment, World *world, MWRender::MWScene& scene, PhysicsSystem *physics); + Scene (Environment& environment, World *world, MWRender::MWScene& scene, PhysicsSystem *physics); ~Scene(); @@ -84,7 +83,7 @@ namespace MWWorld Ptr::CellStore* getCurrentCell (); - const CellRenderCollection& getActiveCells (); + const CellRenderCollection& getActiveCells () const; bool hasCellChanged() const; ///< Has the player moved to a different cell, since the last frame? @@ -97,7 +96,7 @@ namespace MWWorld void markCellAsUnchanged(); - std::string getFacedHandle(); +// std::string getFacedHandle(); void insertCell(ESMS::CellStore &cell); }; diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 134662f54..86edd2b38 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -219,7 +219,7 @@ namespace MWWorld 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()) { @@ -405,7 +405,7 @@ namespace MWWorld } // active cells - for (CellRenderCollection::const_iterator iter (mWorldScene->getActiveCells().begin()); + for (Scene::CellRenderCollection::const_iterator iter (mWorldScene->getActiveCells().begin()); iter!=mWorldScene->getActiveCells().end(); ++iter) { Ptr ptr = getPtr (name, *iter->first); @@ -427,7 +427,7 @@ namespace MWWorld if (mPlayer->getPlayer().getRefData().getHandle()==handle) 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) { Ptr ptr = getPtrViaHandle (handle, *iter->first); @@ -683,8 +683,7 @@ namespace MWWorld { moveObjectImp(ptr, x, y, z); - mPhysics->moveObject (ptr.getRefData().getHandle(), Ogre::Vector3 (x, y, z), - true); + mPhysics->moveObject (ptr.getRefData().getHandle(), Ogre::Vector3 (x, y, z)); } void World::indexToPosition (int cellX, int cellY, float &x, float &y, bool centre) const @@ -746,7 +745,7 @@ namespace MWWorld bool World::toggleCollisionMode() { - return mScene.toggleCollisionMode(); + return mPhysics->toggleCollisionMode(); } bool World::toggleRenderMode (RenderMode mode) diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 7b900fb09..8a5fc4bc4 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -65,8 +65,6 @@ namespace MWWorld private: - typedef std::map CellRenderCollection; - MWRender::MWScene mScene; MWWorld::Scene *mWorldScene; MWWorld::Player *mPlayer; @@ -79,7 +77,7 @@ namespace MWWorld Environment& mEnvironment; MWRender::RenderingManager *mRenderingManager; int mNextDynamicRecord; - + std::map mInteriors; std::map, Ptr::CellStore> mExteriors; @@ -96,9 +94,9 @@ namespace MWWorld MWRender::CellRender *searchRender (Ptr::CellStore *store); int getDaysPerMonth (int month) const; - + void moveObjectImp (Ptr ptr, float x, float y, float z); - + public: World (OEngine::Render::OgreRenderer& renderer, OEngine::Physic::PhysicEngine* physEng, @@ -107,9 +105,9 @@ namespace MWWorld Environment& environment, const std::string& encoding); ~World(); - + Ptr::CellStore *getExterior (int x, int y); - + Ptr::CellStore *getInterior (std::string name); void removeScripts (Ptr::CellStore *cell); @@ -121,7 +119,7 @@ namespace MWWorld MWWorld::Player& getPlayer(); const ESMS::ESMStore& getStore() const; - + ESM::ESMReader& getEsmReader(); const ScriptList& getLocalScripts() const;