(Scene) Added FindNode(As) and RemoveNode methods
Former-commit-id: 35b0d6a61e99383fffa8048b3c0f6a48b8f0f66c
This commit is contained in:
@@ -44,6 +44,11 @@ class NAZARA_API NzScene
|
||||
|
||||
void EnableBackground(bool enable);
|
||||
|
||||
NzSceneNode* FindNode(const NzString& name);
|
||||
const NzSceneNode* FindNode(const NzString& name) const;
|
||||
template<typename T> T* FindNodeAs(const NzString& name);
|
||||
template<typename T> const T* FindNodeAs(const NzString& name) const;
|
||||
|
||||
NzColor GetAmbientColor() const;
|
||||
NzAbstractBackground* GetBackground() const;
|
||||
NzVector3f GetBackward() const;
|
||||
@@ -63,6 +68,9 @@ class NAZARA_API NzScene
|
||||
|
||||
void RegisterForUpdate(NzUpdatable* object);
|
||||
|
||||
void RemoveNode(NzSceneNode* node);
|
||||
void RemoveNode(const NzString& name);
|
||||
|
||||
void RenderFrame();
|
||||
|
||||
void SetAmbientColor(const NzColor& color);
|
||||
|
||||
@@ -91,7 +91,7 @@ T* NzScene::CreateNode(const NzString& name, const NzString& templateNodeName)
|
||||
}
|
||||
|
||||
NzSceneNode* sceneNode = it->second;
|
||||
if (NzImplGetType<T>() != sceneNode->GetSceneNodeType())
|
||||
if (sceneNode->GetSceneNodeType() != NzImplGetType<T>())
|
||||
{
|
||||
NazaraError("Scene node type of T (" + NzString::Number(NzImplGetType<T>()) + ") doesn't match template scene node type (" + NzString::Number(sceneNode->GetSceneNodeType()) + ")");
|
||||
return nullptr;
|
||||
@@ -104,4 +104,36 @@ T* NzScene::CreateNode(const NzString& name, const NzString& templateNodeName)
|
||||
return node.release();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T* NzScene::FindNodeAs(const NzString& name)
|
||||
{
|
||||
NzSceneNode* sceneNode = FindNode(name);
|
||||
if (!sceneNode)
|
||||
return nullptr;
|
||||
|
||||
if (sceneNode->GetSceneNodeType() != NzImplGetType<T>())
|
||||
{
|
||||
NazaraError("Scene node type of T (" + NzString::Number(NzImplGetType<T>()) + ") doesn't match \"" + name + "\" scene node type (" + NzString::Number(sceneNode->GetSceneNodeType()) + ")");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return static_cast<T*>(sceneNode);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
const T* NzScene::FindNodeAs(const NzString& name) const
|
||||
{
|
||||
const NzSceneNode* sceneNode = FindNode(name);
|
||||
if (!sceneNode)
|
||||
return nullptr;
|
||||
|
||||
if (sceneNode->GetSceneNodeType() != NzImplGetType<T>())
|
||||
{
|
||||
NazaraError("Scene node type of T (" + NzString::Number(NzImplGetType<T>()) + ") doesn't match \"" + name + "\" scene node type (" + NzString::Number(sceneNode->GetSceneNodeType()) + ")");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return static_cast<const T*>(sceneNode);
|
||||
}
|
||||
|
||||
#include <Nazara/Graphics/DebugOff.hpp>
|
||||
|
||||
Reference in New Issue
Block a user