mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-01 13:56:38 +00:00 
			
		
		
		
	Refactor duplicate code sections.
This commit is contained in:
		
							parent
							
								
									49d416353e
								
							
						
					
					
						commit
						3796240b19
					
				
					 2 changed files with 32 additions and 36 deletions
				
			
		|  | @ -36,21 +36,15 @@ namespace CSVWorld | ||||||
|             const std::string &sceneNodeName, const std::string &referenceId, float scale, |             const std::string &sceneNodeName, const std::string &referenceId, float scale, | ||||||
|             const Ogre::Vector3 &position, const Ogre::Quaternion &rotation, bool placeable) |             const Ogre::Vector3 &position, const Ogre::Quaternion &rotation, bool placeable) | ||||||
|     { |     { | ||||||
|         bool foundSceneManager = false; |         Ogre::SceneManager *sceneManager = findSceneManager(sceneNodeName); | ||||||
|         std::map<Ogre::SceneManager *, CSVRender::SceneWidget *>::const_iterator iter = mSceneWidgets.begin(); |         if(sceneManager) | ||||||
|         for(; iter != mSceneWidgets.end(); ++iter) |  | ||||||
|         { |  | ||||||
|             if((*iter).first->hasSceneNode(sceneNodeName)) |  | ||||||
|         { |         { | ||||||
|  |             // update maps
 | ||||||
|             mSceneNodeToRefId[sceneNodeName] = referenceId; |             mSceneNodeToRefId[sceneNodeName] = referenceId; | ||||||
|                 mRefIdToSceneNode[referenceId][(*iter).first] = sceneNodeName; |  | ||||||
|             mSceneNodeToMesh[sceneNodeName] = mesh; |             mSceneNodeToMesh[sceneNodeName] = mesh; | ||||||
|                 foundSceneManager = true; |             mRefIdToSceneNode[referenceId][sceneManager] = sceneNodeName; | ||||||
|                 break; |  | ||||||
|         } |         } | ||||||
|         } |         else | ||||||
| 
 |  | ||||||
|         if(!foundSceneManager) |  | ||||||
|         { |         { | ||||||
|             std::cerr << "Attempt to add an object without a corresponding SceneManager: " |             std::cerr << "Attempt to add an object without a corresponding SceneManager: " | ||||||
|                 + referenceId + " : " + sceneNodeName << std::endl; |                 + referenceId + " : " + sceneNodeName << std::endl; | ||||||
|  | @ -81,17 +75,7 @@ namespace CSVWorld | ||||||
|             mSceneNodeToMesh.erase(sceneNodeName); |             mSceneNodeToMesh.erase(sceneNodeName); | ||||||
| 
 | 
 | ||||||
|             // find which SceneManager has this object
 |             // find which SceneManager has this object
 | ||||||
|             Ogre::SceneManager *sceneManager = NULL; |             Ogre::SceneManager *sceneManager = findSceneManager(sceneNodeName); | ||||||
|             std::map<Ogre::SceneManager *, CSVRender::SceneWidget *>::const_iterator iter = mSceneWidgets.begin(); |  | ||||||
|             for(; iter != mSceneWidgets.end(); ++iter) |  | ||||||
|             { |  | ||||||
|                 if((*iter).first->hasSceneNode(sceneNodeName)) |  | ||||||
|                 { |  | ||||||
|                     sceneManager = (*iter).first; |  | ||||||
|                     break; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if(!sceneManager) |             if(!sceneManager) | ||||||
|             { |             { | ||||||
|                 std::cerr << "Attempt to remove an object without a corresponding SceneManager: " |                 std::cerr << "Attempt to remove an object without a corresponding SceneManager: " | ||||||
|  | @ -121,7 +105,7 @@ namespace CSVWorld | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             // check whether the physics model be deleted
 |             // check whether the physics model should be deleted
 | ||||||
|             if(mRefIdToSceneNode.find(referenceId) == mRefIdToSceneNode.end()) |             if(mRefIdToSceneNode.find(referenceId) == mRefIdToSceneNode.end()) | ||||||
|             { |             { | ||||||
|                 mEngine->removeRigidBody(referenceId); |                 mEngine->removeRigidBody(referenceId); | ||||||
|  | @ -130,9 +114,8 @@ namespace CSVWorld | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void PhysicsSystem::replaceObject(const std::string &sceneNodeName, |     void PhysicsSystem::replaceObject(const std::string &sceneNodeName, float scale, | ||||||
|             float scale, const Ogre::Vector3 &position, |             const Ogre::Vector3 &position, const Ogre::Quaternion &rotation, bool placeable) | ||||||
|             const Ogre::Quaternion &rotation, bool placeable) |  | ||||||
|     { |     { | ||||||
|         std::string referenceId = mSceneNodeToRefId[sceneNodeName]; |         std::string referenceId = mSceneNodeToRefId[sceneNodeName]; | ||||||
|         std::string mesh = mSceneNodeToMesh[sceneNodeName]; |         std::string mesh = mSceneNodeToMesh[sceneNodeName]; | ||||||
|  | @ -143,13 +126,9 @@ namespace CSVWorld | ||||||
|             mEngine->removeRigidBody(referenceId); |             mEngine->removeRigidBody(referenceId); | ||||||
|             mEngine->deleteRigidBody(referenceId); |             mEngine->deleteRigidBody(referenceId); | ||||||
| 
 | 
 | ||||||
|             // create the physics object
 |             // create a new physics object
 | ||||||
|             mEngine->createAndAdjustRigidBody(mesh, |             mEngine->createAndAdjustRigidBody(mesh, referenceId, scale, position, rotation, | ||||||
|                     referenceId, scale, position, rotation, |                     0, 0, true, placeable); | ||||||
|                     0,    // scaledBoxTranslation
 |  | ||||||
|                     0,    // boxRotation
 |  | ||||||
|                     true, // raycasting
 |  | ||||||
|                     placeable); |  | ||||||
| 
 | 
 | ||||||
|             // update other scene managers if they have the referenceId
 |             // update other scene managers if they have the referenceId
 | ||||||
|             // FIXME: rotation or scale not updated
 |             // FIXME: rotation or scale not updated
 | ||||||
|  | @ -182,6 +161,7 @@ namespace CSVWorld | ||||||
|     { |     { | ||||||
|         moveSceneNodeImpl(sceneNodeName, sceneNodeToRefId(sceneNodeName), position); |         moveSceneNodeImpl(sceneNodeName, sceneNodeToRefId(sceneNodeName), position); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     void PhysicsSystem::addHeightField(Ogre::SceneManager *sceneManager, |     void PhysicsSystem::addHeightField(Ogre::SceneManager *sceneManager, | ||||||
|             float* heights, int x, int y, float yoffset, float triSize, float sqrtVerts) |             float* heights, int x, int y, float yoffset, float triSize, float sqrtVerts) | ||||||
|     { |     { | ||||||
|  | @ -291,6 +271,20 @@ namespace CSVWorld | ||||||
|         mSceneWidgets.erase(sceneMgr); |         mSceneWidgets.erase(sceneMgr); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     Ogre::SceneManager *PhysicsSystem::findSceneManager(std::string sceneNodeName) | ||||||
|  |     { | ||||||
|  |         std::map<Ogre::SceneManager *, CSVRender::SceneWidget *>::const_iterator iter = mSceneWidgets.begin(); | ||||||
|  |         for(; iter != mSceneWidgets.end(); ++iter) | ||||||
|  |         { | ||||||
|  |             if((*iter).first->hasSceneNode(sceneNodeName)) | ||||||
|  |             { | ||||||
|  |                 return (*iter).first; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     void PhysicsSystem::toggleDebugRendering(Ogre::SceneManager *sceneMgr) |     void PhysicsSystem::toggleDebugRendering(Ogre::SceneManager *sceneMgr) | ||||||
|     { |     { | ||||||
|         // FIXME: should check if sceneMgr is in the list
 |         // FIXME: should check if sceneMgr is in the list
 | ||||||
|  |  | ||||||
|  | @ -85,6 +85,8 @@ namespace CSVWorld | ||||||
|             void updateSelectionHighlight(std::string sceneNode, const Ogre::Vector3 &position); |             void updateSelectionHighlight(std::string sceneNode, const Ogre::Vector3 &position); | ||||||
| 
 | 
 | ||||||
|             std::string refIdToSceneNode(std::string referenceId, Ogre::SceneManager *sceneMgr); |             std::string refIdToSceneNode(std::string referenceId, Ogre::SceneManager *sceneMgr); | ||||||
|  | 
 | ||||||
|  |             Ogre::SceneManager *findSceneManager(std::string sceneNodeName); | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue