Made SceneNode name change reflect on the Scene
Former-commit-id: b924b0b9d103e4fce6ab2faf952b9153d49cce06
This commit is contained in:
parent
6d8b266b4c
commit
bc6dd44009
|
|
@ -27,6 +27,8 @@ class NzSceneNode;
|
||||||
|
|
||||||
class NAZARA_API NzScene
|
class NAZARA_API NzScene
|
||||||
{
|
{
|
||||||
|
friend NzSceneNode;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NzScene();
|
NzScene();
|
||||||
~NzScene() = default;
|
~NzScene() = default;
|
||||||
|
|
@ -88,6 +90,7 @@ class NAZARA_API NzScene
|
||||||
operator const NzSceneNode&() const;
|
operator const NzSceneNode&() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool ChangeNodeName(NzSceneNode* node, const NzString& newName);
|
||||||
bool RegisterSceneNode(const NzString& name, NzSceneNode* node);
|
bool RegisterSceneNode(const NzString& name, NzSceneNode* node);
|
||||||
void RecursiveFrustumCull(NzAbstractRenderQueue* renderQueue, const NzFrustumf& frustum, NzNode* node);
|
void RecursiveFrustumCull(NzAbstractRenderQueue* renderQueue, const NzFrustumf& frustum, NzNode* node);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class NAZARA_API NzSceneNode : public NzNode
|
||||||
bool IsDrawingEnabled() const;
|
bool IsDrawingEnabled() const;
|
||||||
bool IsVisible() const;
|
bool IsVisible() const;
|
||||||
|
|
||||||
void SetName(const NzString& name);
|
bool SetName(const NzString& name);
|
||||||
|
|
||||||
NzSceneNode& operator=(const NzSceneNode& sceneNode);
|
NzSceneNode& operator=(const NzSceneNode& sceneNode);
|
||||||
NzSceneNode& operator=(NzSceneNode&& sceneNode) = delete;
|
NzSceneNode& operator=(NzSceneNode&& sceneNode) = delete;
|
||||||
|
|
@ -65,6 +65,7 @@ class NAZARA_API NzSceneNode : public NzNode
|
||||||
virtual void OnVisibilityChange(bool visibility);
|
virtual void OnVisibilityChange(bool visibility);
|
||||||
void RecursiveSetScene(NzScene* scene, NzNode* node);
|
void RecursiveSetScene(NzScene* scene, NzNode* node);
|
||||||
virtual void Register();
|
virtual void Register();
|
||||||
|
void SetNameInternal(const NzString& name);
|
||||||
void SetScene(NzScene* scene);
|
void SetScene(NzScene* scene);
|
||||||
virtual void Unregister();
|
virtual void Unregister();
|
||||||
virtual void Update();
|
virtual void Update();
|
||||||
|
|
|
||||||
|
|
@ -383,6 +383,38 @@ NzScene::operator const NzSceneNode&() const
|
||||||
return m_root;
|
return m_root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NzScene::ChangeNodeName(NzSceneNode* node, const NzString& newName)
|
||||||
|
{
|
||||||
|
#ifdef NAZARA_DEBUG
|
||||||
|
std::unique_ptr<NzSceneNode> ptr(node);
|
||||||
|
auto it = std::find(m_nodes.begin(), m_nodes.end(), ptr);
|
||||||
|
ptr.release();
|
||||||
|
|
||||||
|
if (it == m_nodes.end())
|
||||||
|
{
|
||||||
|
NazaraInternalError("Node isn't part of the scene");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!newName.IsEmpty())
|
||||||
|
{
|
||||||
|
auto pair = m_nodeMap.insert(std::make_pair(newName, node));
|
||||||
|
if (!pair.second)
|
||||||
|
{
|
||||||
|
NazaraError("Name \"" + newName + "\" is already in use");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NzString oldName = node->GetName();
|
||||||
|
if (!oldName.IsEmpty())
|
||||||
|
m_nodeMap.erase(oldName);
|
||||||
|
|
||||||
|
node->SetNameInternal(newName);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool NzScene::RegisterSceneNode(const NzString& name, NzSceneNode* node)
|
bool NzScene::RegisterSceneNode(const NzString& name, NzSceneNode* node)
|
||||||
{
|
{
|
||||||
if (!name.IsEmpty())
|
if (!name.IsEmpty())
|
||||||
|
|
@ -396,6 +428,7 @@ bool NzScene::RegisterSceneNode(const NzString& name, NzSceneNode* node)
|
||||||
m_nodeMap[name] = node;
|
m_nodeMap[name] = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
node->SetNameInternal(name);
|
||||||
node->SetParent(m_root, true);
|
node->SetParent(m_root, true);
|
||||||
|
|
||||||
m_nodes.emplace_back(node);
|
m_nodes.emplace_back(node);
|
||||||
|
|
|
||||||
|
|
@ -144,9 +144,17 @@ bool NzSceneNode::IsVisible() const
|
||||||
return m_visible;
|
return m_visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NzSceneNode::SetName(const NzString& name)
|
bool NzSceneNode::SetName(const NzString& name)
|
||||||
{
|
{
|
||||||
m_name = name;
|
if (m_scene)
|
||||||
|
// On demande à la scène de changer notre nom
|
||||||
|
return m_scene->ChangeNodeName(this, name);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Pas de scène ? Changeons notre nom nous-même
|
||||||
|
SetNameInternal(name);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NzSceneNode& NzSceneNode::operator=(const NzSceneNode& sceneNode)
|
NzSceneNode& NzSceneNode::operator=(const NzSceneNode& sceneNode)
|
||||||
|
|
@ -211,6 +219,11 @@ void NzSceneNode::Register()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NzSceneNode::SetNameInternal(const NzString& name)
|
||||||
|
{
|
||||||
|
m_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
void NzSceneNode::SetScene(NzScene* scene)
|
void NzSceneNode::SetScene(NzScene* scene)
|
||||||
{
|
{
|
||||||
if (m_scene != scene)
|
if (m_scene != scene)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue