mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 20:26:43 +00:00 
			
		
		
		
	Empty npcs
This commit is contained in:
		
							parent
							
								
									835c3f2603
								
							
						
					
					
						commit
						ee98a2af1a
					
				
					 7 changed files with 83 additions and 6 deletions
				
			
		|  | @ -32,6 +32,7 @@ namespace MWClass | |||
| 
 | ||||
|     void Npc::insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const | ||||
|     { | ||||
|         renderingInterface.getActors().insertNPC(ptr); | ||||
|         /*
 | ||||
|         ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> *ref = | ||||
|             ptr.get<ESM::NPC>(); | ||||
|  |  | |||
|  | @ -250,7 +250,7 @@ namespace MWMechanics | |||
|         while (iter!=mActors.end()) | ||||
|             if (iter->getCell()==cellStore) | ||||
|             { | ||||
|                 std::cout << "Erasing an actor"; | ||||
|                 //std::cout << "Erasing an actor";
 | ||||
|                 mActors.erase (iter++); | ||||
|             } | ||||
|             else | ||||
|  |  | |||
|  | @ -4,10 +4,76 @@ | |||
| 
 | ||||
| using namespace Ogre; | ||||
| using namespace MWRender; | ||||
| using namespace NifOgre; | ||||
| 
 | ||||
| void Actors::setMwRoot(Ogre::SceneNode* root){ | ||||
|     mMwRoot = root; | ||||
| } | ||||
| void Actors::insertNPC(const MWWorld::Ptr& ptr){ | ||||
| /*
 | ||||
|     ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> *ref = | ||||
|             ptr.get<ESM::NPC>(); | ||||
|         assert (ref->base != NULL); | ||||
| 		 | ||||
|         insertBegin(ptr, true, true); | ||||
| 		 | ||||
| 		//Part selection on last character of the file string
 | ||||
| 		//  " Tri Chest
 | ||||
| 		//  * Tri Tail
 | ||||
| 		//  : Tri Left Foot
 | ||||
| 		//  < Tri Right Foot
 | ||||
| 		//  > Tri Left Hand
 | ||||
| 		//  ? Tri Right Hand
 | ||||
| 		//  | Normal
 | ||||
| 
 | ||||
| 		//Mirroring Parts on second to last character
 | ||||
| 		//suffix == '*'
 | ||||
| 		//	vector = Ogre::Vector3(-1,1,1);
 | ||||
| 		//  suffix == '?'
 | ||||
| 		//	vector = Ogre::Vector3(1,-1,1);
 | ||||
| 		//  suffix == '<'
 | ||||
| 		//	vector = Ogre::Vector3(1,1,-1);
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 		std::string hairID = ref->base->hair; | ||||
|         std::string headID = ref->base->head; | ||||
| 		std::string npcName = ref->base->name; | ||||
| 
 | ||||
|          std::string bodyRaceID = headID.substr(0, headID.find_last_of("head_") - 4); | ||||
| 		char secondtolast = bodyRaceID.at(bodyRaceID.length() - 2); | ||||
| 		bool female = tolower(secondtolast) == 'f'; | ||||
| 		bool beast = bodyRaceID == "b_n_khajiit_m_" || bodyRaceID == "b_n_khajiit_f_" || bodyRaceID == "b_n_argonian_m_" || bodyRaceID == "b_n_argonian_f_"; | ||||
| 
 | ||||
|         std::string headModel = "meshes\\" + | ||||
|             mEnvironment.mWorld->getStore().bodyParts.find(headID)->model; | ||||
| 
 | ||||
| 		std::string hairModel = "meshes\\" + | ||||
|             mEnvironment.mWorld->getStore().bodyParts.find(hairID)->model; | ||||
| 
 | ||||
|         const ESM::BodyPart *upperleg = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "upper leg"); | ||||
| 		const ESM::BodyPart *groin = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "groin"); | ||||
| 		const ESM::BodyPart *arml = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "upper arm");  //We need two
 | ||||
| 		const ESM::BodyPart *neck = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "neck"); | ||||
| 		const ESM::BodyPart *knee = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "knee"); | ||||
| 		const ESM::BodyPart *ankle = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "ankle"); | ||||
| 		const ESM::BodyPart *foot = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "foot"); | ||||
| 		const ESM::BodyPart *feet = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "feet"); | ||||
| 		const ESM::BodyPart *tail = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "tail"); | ||||
| 		const ESM::BodyPart *wristl = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "wrist");  //We need two
 | ||||
| 		const ESM::BodyPart *forearml = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "forearm");  //We need two
 | ||||
| 		const ESM::BodyPart *handl = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "hand");   //We need two
 | ||||
| 		const ESM::BodyPart *hair = mEnvironment.mWorld->getStore().bodyParts.search(hairID); | ||||
| 		const ESM::BodyPart *head = mEnvironment.mWorld->getStore().bodyParts.search(headID); | ||||
| 		if(!handl) | ||||
| 			handl = mEnvironment.mWorld->getStore().bodyParts.search (bodyRaceID + "hands"); | ||||
| 		//const ESM::BodyPart* claviclel = environment.mWorld->getStore().bodyParts.search (bodyRaceID + "clavicle");
 | ||||
| 		//const ESM::BodyPart* clavicler = claviclel;
 | ||||
| 		const ESM::BodyPart* handr = handl; | ||||
| 		const ESM::BodyPart* forearmr = forearml; | ||||
| 		const ESM::BodyPart* wristr = wristl; | ||||
| 		const ESM::BodyPart* armr = arml;*/ | ||||
| } | ||||
| void Actors::insertBegin (const MWWorld::Ptr& ptr, bool enabled, bool static_){ | ||||
|     Ogre::SceneNode* cellnode; | ||||
|     if(mCellSceneNodes.find(ptr.getCell()) == mCellSceneNodes.end()) | ||||
|  | @ -45,6 +111,11 @@ void Actors::insertBegin (const MWWorld::Ptr& ptr, bool enabled, bool static_){ | |||
|     ptr.getRefData().setBaseNode(insert); | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| void Actors::insertFreePart(const MWWorld::Ptr& ptr, const std::string& mesh){ | ||||
|     MeshPtr meshp = NIFLoader::load(mesh); | ||||
| 	Entity *ent = mRend.getScene()->createEntity(mesh); | ||||
| 	NIFLoader::getSingletonPtr()->addInMesh(ent->getMesh().getPointer()); | ||||
| } | ||||
| void Actors::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh){ | ||||
|     Ogre::SceneNode* insert = ptr.getRefData().getBaseNode(); | ||||
|  |  | |||
|  | @ -7,20 +7,25 @@ | |||
| #include "../mwworld/refdata.hpp" | ||||
| #include "../mwworld/ptr.hpp" | ||||
| #include <openengine/ogre/renderer.hpp> | ||||
| #include "components/nifogre/ogre_nif_loader.hpp" | ||||
| #include "../mwworld/environment.hpp" | ||||
| namespace MWRender{ | ||||
|     class Actors{ | ||||
|         OEngine::Render::OgreRenderer &mRend; | ||||
|         std::map<MWWorld::Ptr::CellStore *, Ogre::SceneNode *> mCellSceneNodes; | ||||
|         Ogre::SceneNode* mMwRoot; | ||||
|         MWWorld::Environment& mEnvironment; | ||||
| 
 | ||||
|          | ||||
| 
 | ||||
|         public: | ||||
|         Actors(OEngine::Render::OgreRenderer& _rend): mRend(_rend){} | ||||
|         Actors(OEngine::Render::OgreRenderer& _rend, MWWorld::Environment& _env): mRend(_rend), mEnvironment(_env){} | ||||
|         ~Actors(){} | ||||
|         void setMwRoot(Ogre::SceneNode* root); | ||||
|         void insertBegin (const MWWorld::Ptr& ptr, bool enabled, bool static_); | ||||
|         void insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh); | ||||
|         void insertFreePart(const MWWorld::Ptr& ptr, const std::string& mesh); | ||||
|         void insertNPC(const MWWorld::Ptr& ptr); | ||||
|          bool deleteObject (const MWWorld::Ptr& ptr); | ||||
|         ///< \return found?
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -21,8 +21,8 @@ namespace MWRender { | |||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir, OEngine::Physic::PhysicEngine* engine) | ||||
| :mRendering(_rend), mObjects(mRendering), mDebugging(engine), mActors(mRendering) | ||||
| RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir, OEngine::Physic::PhysicEngine* engine, MWWorld::Environment& environment) | ||||
| :mRendering(_rend), mObjects(mRendering), mDebugging(engine), mActors(mRendering, environment) | ||||
| { | ||||
|     mRendering.createScene("PlayerCam", 55, 5); | ||||
|     mSkyManager = MWRender::SkyManager::create(mRendering.getWindow(), mRendering.getCamera(), resDir); | ||||
|  |  | |||
|  | @ -54,7 +54,7 @@ class RenderingManager: private RenderingInterface { | |||
|     virtual MWRender::Actors& getActors(); | ||||
| 
 | ||||
|   public: | ||||
|     RenderingManager(OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir, OEngine::Physic::PhysicEngine* engine); | ||||
|     RenderingManager(OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir, OEngine::Physic::PhysicEngine* engine, MWWorld::Environment& environment); | ||||
|     virtual ~RenderingManager(); | ||||
| 
 | ||||
|     virtual MWRender::Player& getPlayer(); /// \todo move this to private again as soon as
 | ||||
|  |  | |||
|  | @ -147,7 +147,7 @@ namespace MWWorld | |||
|         const Files::Collections& fileCollections, | ||||
|         const std::string& master, const boost::filesystem::path& resDir, | ||||
|         bool newGame, Environment& environment, const std::string& encoding) | ||||
|     : mRendering (renderer,resDir, physEng),mPlayer (0), mLocalScripts (mStore), mGlobalVariables (0), | ||||
|     : mRendering (renderer,resDir, physEng, environment),mPlayer (0), mLocalScripts (mStore), mGlobalVariables (0), | ||||
|       mSky (false), mEnvironment (environment), mNextDynamicRecord (0), mCells (mStore, mEsm, *this) | ||||
|     { | ||||
|         mPhysEngine = physEng; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue