ISceneNode* SceneManager::createSceneNode(const core::string&name, ISceneNode* parent)
{
	core::string strName=name;
	if(strName==mT(""))
	{
		strName=mT("SceneNode#")+core::StringConverter::toString(++m_nameIDGenerator);
	}
	/*
	SceneNodeMap::iterator it= m_Children.find(strName);
	if(it!=m_Children.end())
	{
		gSceneLoggerSystem.log(mT("CreateSceneNode: SceneNode with name:")+strName+mT(" is already exists in the scene manager"),ELL_WARNING,EVL_Heavy);
		//pick new name
		strName+=core::StringConverter::toString(++m_nameIDGenerator);
	}*/

	ISceneNode* node=new ISceneNode(strName,m_objectsID.GetNextID(),this);
	addSceneNode(node, parent);
	/*
	m_objectsID.AddObject(node,node->getID());
	m_Children[strName]=node;
	node->_OnAddedToSceneManager(this);

	if (parent)
		parent->addChild(node);
	else
		m_rootNode->addChild(node);*/
	return node;
}
void SceneManager::addSceneNode(const ISceneNodePtr& node, ISceneNode* parent)
{
	if(!node)
		return;

	SceneNodeMap::iterator it= m_Children.find(node->getNodeName());
	if(it!=m_Children.end())
	{
		gSceneLoggerSystem.log(mT("AddSceneNode: SceneNode with name:")+node->getNodeName()+mT(" is already exists in the scene manager"),ELL_WARNING,EVL_Heavy);
		node->setNodeName(node->getNodeName()+mT("#")+core::StringConverter::toString(++m_nameIDGenerator)+mT("_"));
		addSceneNode(node);
		return;
	}
	node->SetSceneManager(this);

	{
		OS::ScopedLock lock(m_nodesMutex);
		m_Children[node->getNodeName()]=node;
		uint id=m_objectsID.AddObject(node,node->getID());
		node->setID(id);
	}

	node->_OnAddedToSceneManager(this);
	if (parent)
		parent->addChild(node);
	else if (m_rootNode)
		m_rootNode->addChild(node);
	else gSceneLoggerSystem.log("AddSceneNode: parent node is null, and there is no root node set!", ELL_WARNING);
}
示例#3
0
 /**
 Creates a Camera. Without cameras you cannot see the scene which shall be rendered.
 \return Pointer to the specified Camera or Camera derived class object.
 */
 template <class T> T* createCamera()
 {
     T* NewCamera = MemoryManager::createMemory<T>("scene::Camera");
     addSceneNode(NewCamera);
     setActiveCamera(NewCamera);
     return NewCamera;
 }
CameraNode* SceneManager::createCamera(const core::string&name, ISceneNode* parent)
{
	core::string strName=name;
	if(strName==mT(""))
	{
		strName=mT("CameraNode#")+core::StringConverter::toString(++m_nameIDGenerator);
	}
	CameraNode* node=new CameraNode(strName,m_objectsID.GetNextID(),this);
	addSceneNode(node, parent);
	return node;
}
irr::scene::ISceneNode *CIrrOdeSceneNodeFactory::addSceneNode (const c8 *typeName, irr::scene::ISceneNode *parent) {
  irr::core::stringc sName=irr::core::stringc(typeName);
  for (u32 i=0; i<m_cNames.size(); i++)
    if (m_cNames[i]==sName) {
      #ifdef _TRACE_FACTORY
        printf("CIrrOdeSceneNodeFactory::addSceneNode(\"%s\"): \"%s\"\n",typeName,m_cNames[i].c_str());
      #endif
      return addSceneNode(m_cTypes[i],parent);
    }
  return NULL;
}
示例#6
0
//! adds a scene node to the scene graph based on its type name
ISceneNode* CIrrKlangSceneNodeFactory::addSceneNode(const c8* typeName, ISceneNode* parent)
{
	return addSceneNode( getTypeFromName(typeName), parent );
}