From cf12552358b9bbedf833581de04e6d61f19cfc17 Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 23 Jan 2015 21:04:29 +0100 Subject: [PATCH] (SceneNode) Added virtual constructor idiom (Light) Added default constructor Former-commit-id: 591e6a8435d2cea6238e70c0058d381b8d547f3e --- include/Nazara/Graphics/Light.hpp | 5 ++++- include/Nazara/Graphics/Model.hpp | 3 +++ include/Nazara/Graphics/SceneNode.hpp | 4 ++++ include/Nazara/Graphics/SceneRoot.hpp | 3 +++ include/Nazara/Graphics/Sprite.hpp | 3 +++ include/Nazara/Graphics/TextSprite.hpp | 3 +++ src/Nazara/Graphics/Light.cpp | 10 ++++++++++ src/Nazara/Graphics/Model.cpp | 10 ++++++++++ src/Nazara/Graphics/SceneRoot.cpp | 12 ++++++++++++ src/Nazara/Graphics/Sprite.cpp | 10 ++++++++++ src/Nazara/Graphics/TextSprite.cpp | 10 ++++++++++ 11 files changed, 72 insertions(+), 1 deletion(-) diff --git a/include/Nazara/Graphics/Light.hpp b/include/Nazara/Graphics/Light.hpp index 9db57e7c6..40ec4e525 100644 --- a/include/Nazara/Graphics/Light.hpp +++ b/include/Nazara/Graphics/Light.hpp @@ -18,12 +18,15 @@ struct NzLightUniforms; class NAZARA_API NzLight : public NzSceneNode { public: - NzLight(nzLightType type); + NzLight(nzLightType type = nzLightType_Point); NzLight(const NzLight& light); ~NzLight() = default; void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override; + NzLight* Clone() const; + NzLight* Create() const; + void Enable(const NzShader* shader, const NzLightUniforms& uniforms, int offset = 0) const; float GetAmbientFactor() const; diff --git a/include/Nazara/Graphics/Model.hpp b/include/Nazara/Graphics/Model.hpp index 5b193f5ee..d209530a1 100644 --- a/include/Nazara/Graphics/Model.hpp +++ b/include/Nazara/Graphics/Model.hpp @@ -41,6 +41,9 @@ class NAZARA_API NzModel : public NzSceneNode void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override; void AdvanceAnimation(float elapsedTime); + NzModel* Clone() const; + NzModel* Create() const; + void EnableAnimation(bool animation); NzAnimation* GetAnimation() const; diff --git a/include/Nazara/Graphics/SceneNode.hpp b/include/Nazara/Graphics/SceneNode.hpp index ccb62806e..0a771a00e 100644 --- a/include/Nazara/Graphics/SceneNode.hpp +++ b/include/Nazara/Graphics/SceneNode.hpp @@ -28,6 +28,10 @@ class NAZARA_API NzSceneNode : public NzNode virtual void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const = 0; + // IdiƓme "virtual constructor" + virtual NzSceneNode* Clone() const = 0; + virtual NzSceneNode* Create() const = 0; + void EnableDrawing(bool drawingEnabled); NzVector3f GetBackward() const; diff --git a/include/Nazara/Graphics/SceneRoot.hpp b/include/Nazara/Graphics/SceneRoot.hpp index 28aa9b20e..9e4f6b960 100644 --- a/include/Nazara/Graphics/SceneRoot.hpp +++ b/include/Nazara/Graphics/SceneRoot.hpp @@ -27,6 +27,9 @@ class NAZARA_API NzSceneRoot : public NzSceneNode NzSceneRoot(NzScene* scene); virtual ~NzSceneRoot(); + NzSceneRoot* Clone() const; + NzSceneRoot* Create() const; + void MakeBoundingVolume() const override; void Register(); void Unregister(); diff --git a/include/Nazara/Graphics/Sprite.hpp b/include/Nazara/Graphics/Sprite.hpp index 69c51fa90..2beb4c85d 100644 --- a/include/Nazara/Graphics/Sprite.hpp +++ b/include/Nazara/Graphics/Sprite.hpp @@ -22,6 +22,9 @@ class NAZARA_API NzSprite : public NzSceneNode void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override; + NzSprite* Clone() const; + NzSprite* Create() const; + const NzColor& GetColor() const; NzMaterial* GetMaterial() const; nzSceneNodeType GetSceneNodeType() const override; diff --git a/include/Nazara/Graphics/TextSprite.hpp b/include/Nazara/Graphics/TextSprite.hpp index 23ce1a7f3..2b7f33e09 100644 --- a/include/Nazara/Graphics/TextSprite.hpp +++ b/include/Nazara/Graphics/TextSprite.hpp @@ -28,6 +28,9 @@ class NAZARA_API NzTextSprite : public NzSceneNode, NzAbstractAtlas::Listener void Clear(); + NzTextSprite* Clone() const; + NzTextSprite* Create() const; + const NzColor& GetColor() const; NzMaterial* GetMaterial() const; nzSceneNodeType GetSceneNodeType() const override; diff --git a/src/Nazara/Graphics/Light.cpp b/src/Nazara/Graphics/Light.cpp index 73df7e784..3f2e7ad2d 100644 --- a/src/Nazara/Graphics/Light.cpp +++ b/src/Nazara/Graphics/Light.cpp @@ -47,6 +47,16 @@ void NzLight::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const renderQueue->AddLight(this); } +NzLight* NzLight::Clone() const +{ + return new NzLight(*this); +} + +NzLight* NzLight::Create() const +{ + return new NzLight; +} + void NzLight::Enable(const NzShader* shader, const NzLightUniforms& uniforms, int offset) const { /* diff --git a/src/Nazara/Graphics/Model.cpp b/src/Nazara/Graphics/Model.cpp index 6bddc09cc..137dff795 100644 --- a/src/Nazara/Graphics/Model.cpp +++ b/src/Nazara/Graphics/Model.cpp @@ -66,6 +66,16 @@ void NzModel::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const } } +NzModel* NzModel::Clone() const +{ + return new NzModel(*this); +} + +NzModel* NzModel::Create() const +{ + return new NzModel; +} + NzMaterial* NzModel::GetMaterial(const NzString& subMeshName) const { #if NAZARA_GRAPHICS_SAFE diff --git a/src/Nazara/Graphics/SceneRoot.cpp b/src/Nazara/Graphics/SceneRoot.cpp index 5bb63f624..cdf9f5eb5 100644 --- a/src/Nazara/Graphics/SceneRoot.cpp +++ b/src/Nazara/Graphics/SceneRoot.cpp @@ -30,6 +30,18 @@ bool NzSceneRoot::IsDrawable() const return true; } +NzSceneRoot* NzSceneRoot::Clone() const +{ + NazaraInternalError("SceneNode::Clone() called on SceneRoot"); + return nullptr; +} + +NzSceneRoot* NzSceneRoot::Create() const +{ + NazaraInternalError("SceneNode::Create() called on SceneRoot"); + return nullptr; +} + void NzSceneRoot::MakeBoundingVolume() const { m_boundingVolume.MakeInfinite(); diff --git a/src/Nazara/Graphics/Sprite.cpp b/src/Nazara/Graphics/Sprite.cpp index e3ec9752b..716bf9d5b 100644 --- a/src/Nazara/Graphics/Sprite.cpp +++ b/src/Nazara/Graphics/Sprite.cpp @@ -48,6 +48,16 @@ void NzSprite::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const renderQueue->AddSprites(m_material, m_vertices, 1); } +NzSprite* NzSprite::Clone() const +{ + return new NzSprite(*this); +} + +NzSprite* NzSprite::Create() const +{ + return new NzSprite; +} + const NzColor& NzSprite::GetColor() const { return m_color; diff --git a/src/Nazara/Graphics/TextSprite.cpp b/src/Nazara/Graphics/TextSprite.cpp index fb0f64f1e..f6fbb33fd 100644 --- a/src/Nazara/Graphics/TextSprite.cpp +++ b/src/Nazara/Graphics/TextSprite.cpp @@ -65,6 +65,16 @@ void NzTextSprite::Clear() m_vertices.clear(); } +NzTextSprite* NzTextSprite::Clone() const +{ + return new NzTextSprite(*this); +} + +NzTextSprite* NzTextSprite::Create() const +{ + return new NzTextSprite; +} + const NzColor& NzTextSprite::GetColor() const { return m_color;