Made scene propagation works with Node class

Former-commit-id: b587ea907f70dc08cd741f64e4e6f3201cd1783e
This commit is contained in:
Lynix 2013-03-06 13:34:22 +01:00
parent 62afc9d5dc
commit 2fe693f24d
4 changed files with 23 additions and 10 deletions

View File

@ -15,6 +15,7 @@
class NzCamera; class NzCamera;
class NzLight; class NzLight;
class NzModel; class NzModel;
class NzNode;
class NzRenderQueue; class NzRenderQueue;
class NzSceneNode; class NzSceneNode;
struct NzSceneImpl; struct NzSceneImpl;
@ -47,7 +48,7 @@ class NAZARA_API NzScene
operator const NzSceneNode&() const; operator const NzSceneNode&() const;
private: private:
void RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf& frustum, NzSceneNode* node); void RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf& frustum, NzNode* node);
void SetActiveCamera(const NzCamera* camera); void SetActiveCamera(const NzCamera* camera);
NzSceneImpl* m_impl; NzSceneImpl* m_impl;

View File

@ -36,6 +36,7 @@ class NAZARA_API NzSceneNode : public NzNode
protected: protected:
virtual void OnParenting(const NzNode* parent) override; virtual void OnParenting(const NzNode* parent) override;
virtual void OnVisibilityChange(bool visibility); virtual void OnVisibilityChange(bool visibility);
void RecursiveSetScene(NzScene* scene, NzNode* node);
virtual void Register(); virtual void Register();
void SetScene(NzScene* scene); void SetScene(NzScene* scene);
virtual void Unregister(); virtual void Unregister();

View File

@ -389,7 +389,7 @@ NzScene::operator const NzSceneNode&() const
return m_impl->root; return m_impl->root;
} }
void NzScene::RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf& frustum, NzSceneNode* node) void NzScene::RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf& frustum, NzNode* node)
{ {
for (NzNode* child : node->GetChilds()) for (NzNode* child : node->GetChilds())
{ {
@ -400,10 +400,10 @@ void NzScene::RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf&
sceneNode->UpdateVisibility(frustum); sceneNode->UpdateVisibility(frustum);
if (sceneNode->IsVisible()) if (sceneNode->IsVisible())
sceneNode->AddToRenderQueue(renderQueue); sceneNode->AddToRenderQueue(renderQueue);
if (sceneNode->HasChilds())
RecursiveFrustumCull(renderQueue, frustum, sceneNode);
} }
if (child->HasChilds())
RecursiveFrustumCull(renderQueue, frustum, child);
} }
} }

View File

@ -54,6 +54,21 @@ void NzSceneNode::OnVisibilityChange(bool visibility)
///TODO: Envoyer l'évènements aux listeners ///TODO: Envoyer l'évènements aux listeners
} }
void NzSceneNode::RecursiveSetScene(NzScene* scene, NzNode* node)
{
for (NzNode* child : node->GetChilds())
{
if (child->GetNodeType() == nzNodeType_Scene)
{
NzSceneNode* sceneNode = static_cast<NzSceneNode*>(child);
sceneNode->SetScene(scene);
}
if (node->HasChilds())
RecursiveSetScene(scene, node);
}
}
void NzSceneNode::Register() void NzSceneNode::Register()
{ {
} }
@ -69,11 +84,7 @@ void NzSceneNode::SetScene(NzScene* scene)
if (m_scene) if (m_scene)
Register(); Register();
for (NzNode* child : m_childs) RecursiveSetScene(scene, this);
{
if (child->GetNodeType() == nzNodeType_Scene)
static_cast<NzSceneNode*>(child)->SetScene(scene);
}
} }
} }