IGameObject* gkGameObjectSystem::CreateStaticGeoGameObject( CRapidXmlParseNode* node )
{
	if (node)
	{
		// transform
		Vec3 trans(0,0,0);
		Quat rot(1,0,0,0);
		Vec3 scale(1,1,1);

		node->GetTranslation(trans);
		node->GetOrientation(rot);
		node->GetScale(scale);

		IGameObject* statObj = CreateStaticGeoGameObject(node->GetAttribute(_T("Name")), node->GetAttribute(_T("MeshName")), trans, rot);

		if (statObj)
		{
			IGameObjectRenderLayer* pRenderLayer = statObj->getRenderLayer();
			if (pRenderLayer)
			{
				gkLogMessage(_T("Load Material"));
				pRenderLayer->setMaterialName(node->GetAttribute(_T("MaterialName")));
				gkLogMessage(_T("Material Loaded"));
			}

			statObj->setPosition(trans);
			statObj->setOrientation(rot);
			statObj->setScale(scale);

#ifdef OS_WIN32


			if (node->GetAttribute(_T("Physical")) && !_tcsicmp(node->GetAttribute(_T("Physical")), _T("true")))
			{
				IGameObjectPhysicLayer* pPhysicLayer = gEnv->pPhysics->CreatePhysicLayer();
				statObj->setGameObjectLayer(pPhysicLayer);
				pPhysicLayer->createStatic();

				
			}
			else if (node->GetAttribute(_T("Physical")) && !_tcsicmp(node->GetAttribute(_T("Physical")), _T("rigidsphere")))
			{
				IGameObjectPhysicLayer* pPhysicLayer = gEnv->pPhysics->CreatePhysicLayer();
				statObj->setGameObjectLayer(pPhysicLayer);
				pPhysicLayer->createDynamic(IGameObjectPhysicLayer::ePDT_Sphere);

				
			}


			
#endif

		}

		return statObj;
	}

	return NULL;
}
void gkSceneBuilder::parseSceneObject( CRapidXmlParseNode* firstnode, IGameObject* parent )
{
	for ( ; firstnode != NULL; firstnode = firstnode->getNextSiblingNode(_T("gkObject")) )
	{
		IGameObject* pCreated = NULL;

		pCreated = gEnv->pGameObjSystem->CreateGameObjectFromXml( firstnode );
		if (m_bBuiltInPak)
		{
			pCreated->setGameObjectSuperClass(eGOClass_SYSTEM);
		}

		if (pCreated)
		{
			IGameObjectRenderLayer* pRenderLayer = pCreated->getRenderLayer();
			//pRenderLayer->setRenderLayer(m_uRenderLayer);
			// if has parent, attach
			if (parent)
			{
				parent->attachChild(pCreated);
			}

			addExistEntity2List(pCreated);

			if (ms_nAllNodeCount != 0)
				gEnv->pSystem->updateProgress( ++ms_nLoadedNodeCount * 100 / ms_nAllNodeCount);

			// if we got child
			CRapidXmlParseNode* childNode = firstnode->getChildNode(_T("gkObject"));
			if (childNode)
			{
				parseSceneObject(childNode, pCreated);
			}

			
		}

	}
}
Exemple #3
0
	IGameObject* gkGameObject::clone( const gkStdString& newName ) const
	{
		IGameObject* ret = NULL;
		
		if ( m_pRenderLayer )
		{
			Vec3 pos = getPosition();
			Quat rot = getOrientation();

			static int name_gen = 0;
			TCHAR new_name[255];
			_tcscpy(new_name, getName().c_str());
			_stprintf( new_name, _T("%s_%d"), new_name, name_gen++ );

			ret = gEnv->pGameObjSystem->CreateStaticGeoGameObject( new_name, m_pRenderLayer->getMesh()->getName(), pos, rot );
			ret->setScale( m_pRenderLayer->getScale() );
			ret->getRenderLayer()->setMaterialName( getMaterialName() );
		}	
		


		return ret;
	}