Made SceneNodes non-movable
Fixed SceneNodes copy constructor not parenting the right object Former-commit-id: 21a08e3bb0931af426d97399dab86dda9acdf172
This commit is contained in:
parent
6d3228477f
commit
fdb722ef14
|
|
@ -36,7 +36,6 @@ class NAZARA_API NzModel : public NzSceneNode
|
||||||
public:
|
public:
|
||||||
NzModel();
|
NzModel();
|
||||||
NzModel(const NzModel& model);
|
NzModel(const NzModel& model);
|
||||||
NzModel(NzModel&& model);
|
|
||||||
virtual ~NzModel();
|
virtual ~NzModel();
|
||||||
|
|
||||||
void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override;
|
void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override;
|
||||||
|
|
@ -83,7 +82,6 @@ class NAZARA_API NzModel : public NzSceneNode
|
||||||
void SetSkinCount(unsigned int skinCount);
|
void SetSkinCount(unsigned int skinCount);
|
||||||
|
|
||||||
NzModel& operator=(const NzModel& node);
|
NzModel& operator=(const NzModel& node);
|
||||||
NzModel& operator=(NzModel&& node);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void InvalidateNode() override;
|
void InvalidateNode() override;
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ class NAZARA_API NzSceneNode : public NzNode
|
||||||
public:
|
public:
|
||||||
NzSceneNode();
|
NzSceneNode();
|
||||||
NzSceneNode(const NzSceneNode& sceneNode);
|
NzSceneNode(const NzSceneNode& sceneNode);
|
||||||
|
NzSceneNode(NzSceneNode& sceneNode) = delete;
|
||||||
virtual ~NzSceneNode();
|
virtual ~NzSceneNode();
|
||||||
|
|
||||||
virtual void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const = 0;
|
virtual void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const = 0;
|
||||||
|
|
@ -43,7 +44,7 @@ class NAZARA_API NzSceneNode : public NzNode
|
||||||
bool IsVisible() const;
|
bool IsVisible() const;
|
||||||
|
|
||||||
NzSceneNode& operator=(const NzSceneNode& sceneNode);
|
NzSceneNode& operator=(const NzSceneNode& sceneNode);
|
||||||
NzSceneNode& operator=(NzSceneNode&& sceneNode);
|
NzSceneNode& operator=(NzSceneNode&& sceneNode) = delete;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool FrustumCull(const NzFrustumf& frustum) const;
|
virtual bool FrustumCull(const NzFrustumf& frustum) const;
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,7 @@ class NAZARA_API NzSprite : public NzSceneNode
|
||||||
NzSprite();
|
NzSprite();
|
||||||
NzSprite(NzTexture* texture);
|
NzSprite(NzTexture* texture);
|
||||||
NzSprite(const NzSprite& sprite);
|
NzSprite(const NzSprite& sprite);
|
||||||
NzSprite(NzSprite&& sprite);
|
~NzSprite() = default;
|
||||||
~NzSprite();
|
|
||||||
|
|
||||||
void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override;
|
void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override;
|
||||||
|
|
||||||
|
|
@ -40,6 +39,8 @@ class NAZARA_API NzSprite : public NzSceneNode
|
||||||
void SetTextureCoords(const NzRectf& coords);
|
void SetTextureCoords(const NzRectf& coords);
|
||||||
void SetTextureRect(const NzRectui& rect);
|
void SetTextureRect(const NzRectui& rect);
|
||||||
|
|
||||||
|
NzSprite& operator=(const NzSprite& sprite);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InvalidateNode() override;
|
void InvalidateNode() override;
|
||||||
void Register() override;
|
void Register() override;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ m_innerAngle(light.m_innerAngle),
|
||||||
m_outerAngle(light.m_outerAngle),
|
m_outerAngle(light.m_outerAngle),
|
||||||
m_radius(light.m_radius)
|
m_radius(light.m_radius)
|
||||||
{
|
{
|
||||||
SetParent(light);
|
SetParent(light.GetParent());
|
||||||
}
|
}
|
||||||
|
|
||||||
void NzLight::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const
|
void NzLight::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const
|
||||||
|
|
|
||||||
|
|
@ -35,20 +35,14 @@ m_skinCount(1)
|
||||||
NzModel::NzModel(const NzModel& model) :
|
NzModel::NzModel(const NzModel& model) :
|
||||||
NzSceneNode(model),
|
NzSceneNode(model),
|
||||||
m_materials(model.m_materials),
|
m_materials(model.m_materials),
|
||||||
|
m_mesh(model.m_mesh),
|
||||||
m_boundingVolume(model.m_boundingVolume),
|
m_boundingVolume(model.m_boundingVolume),
|
||||||
m_boundingVolumeUpdated(model.m_boundingVolumeUpdated),
|
m_boundingVolumeUpdated(model.m_boundingVolumeUpdated),
|
||||||
m_matCount(model.m_matCount),
|
m_matCount(model.m_matCount),
|
||||||
m_skin(model.m_skin),
|
m_skin(model.m_skin),
|
||||||
m_skinCount(model.m_skinCount)
|
m_skinCount(model.m_skinCount)
|
||||||
{
|
{
|
||||||
if (model.m_mesh)
|
SetParent(model.GetParent());
|
||||||
{
|
|
||||||
// Nous n'avons des matériaux que si nous avons un mesh
|
|
||||||
m_mesh = model.m_mesh;
|
|
||||||
m_materials = model.m_materials;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetParent(model);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NzModel::~NzModel()
|
NzModel::~NzModel()
|
||||||
|
|
@ -420,24 +414,6 @@ NzModel& NzModel::operator=(const NzModel& node)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
NzModel& NzModel::operator=(NzModel&& node)
|
|
||||||
{
|
|
||||||
NzSceneNode::operator=(node);
|
|
||||||
|
|
||||||
// Ressources
|
|
||||||
m_mesh = std::move(node.m_mesh);
|
|
||||||
m_materials = std::move(node.m_materials);
|
|
||||||
|
|
||||||
// Paramètres
|
|
||||||
m_boundingVolume = node.m_boundingVolume;
|
|
||||||
m_boundingVolumeUpdated = node.m_boundingVolumeUpdated;
|
|
||||||
m_matCount = node.m_matCount;
|
|
||||||
m_skin = node.m_skin;
|
|
||||||
m_skinCount = node.m_skinCount;
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzModel::InvalidateNode()
|
void NzModel::InvalidateNode()
|
||||||
{
|
{
|
||||||
NzSceneNode::InvalidateNode();
|
NzSceneNode::InvalidateNode();
|
||||||
|
|
|
||||||
|
|
@ -140,17 +140,6 @@ NzSceneNode& NzSceneNode::operator=(const NzSceneNode& sceneNode)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
NzSceneNode& NzSceneNode::operator=(NzSceneNode&& sceneNode)
|
|
||||||
{
|
|
||||||
NzNode::operator=(sceneNode);
|
|
||||||
|
|
||||||
// La scène est affectée via le parenting du node
|
|
||||||
m_drawingEnabled = sceneNode.m_drawingEnabled;
|
|
||||||
m_visible = sceneNode.m_visible;
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool NzSceneNode::FrustumCull(const NzFrustumf& frustum) const
|
bool NzSceneNode::FrustumCull(const NzFrustumf& frustum) const
|
||||||
{
|
{
|
||||||
return frustum.Contains(GetBoundingVolume());
|
return frustum.Contains(GetBoundingVolume());
|
||||||
|
|
|
||||||
|
|
@ -53,23 +53,9 @@ m_vertices(sprite.m_vertices),
|
||||||
m_boundingVolumeUpdated(sprite.m_boundingVolumeUpdated),
|
m_boundingVolumeUpdated(sprite.m_boundingVolumeUpdated),
|
||||||
m_verticesUpdated(sprite.m_verticesUpdated)
|
m_verticesUpdated(sprite.m_verticesUpdated)
|
||||||
{
|
{
|
||||||
SetParent(sprite);
|
SetParent(sprite.GetParent());
|
||||||
}
|
}
|
||||||
|
|
||||||
NzSprite::NzSprite(NzSprite&& sprite) :
|
|
||||||
NzSceneNode(sprite),
|
|
||||||
m_boundingVolume(sprite.m_boundingVolume),
|
|
||||||
m_material(std::move(sprite.m_material)),
|
|
||||||
m_textureCoords(sprite.m_textureCoords),
|
|
||||||
m_size(sprite.m_size),
|
|
||||||
m_vertices(sprite.m_vertices),
|
|
||||||
m_boundingVolumeUpdated(sprite.m_boundingVolumeUpdated),
|
|
||||||
m_verticesUpdated(sprite.m_verticesUpdated)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
NzSprite::~NzSprite() = default;
|
|
||||||
|
|
||||||
void NzSprite::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const
|
void NzSprite::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const
|
||||||
{
|
{
|
||||||
if (!m_verticesUpdated)
|
if (!m_verticesUpdated)
|
||||||
|
|
@ -189,6 +175,22 @@ void NzSprite::SetTextureRect(const NzRectui& rect)
|
||||||
SetTextureCoords(NzRectf(invWidth*rect.x, invHeight*rect.y, invWidth*rect.width, invHeight*rect.height));
|
SetTextureCoords(NzRectf(invWidth*rect.x, invHeight*rect.y, invWidth*rect.width, invHeight*rect.height));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NzSprite& NzSprite::operator=(const NzSprite& sprite)
|
||||||
|
{
|
||||||
|
NzSceneNode::operator=(sprite);
|
||||||
|
|
||||||
|
m_color = sprite.m_color;
|
||||||
|
m_material = sprite.m_material;
|
||||||
|
m_textureCoords = sprite.m_textureCoords;
|
||||||
|
m_size = sprite.m_size;
|
||||||
|
|
||||||
|
// On ne copie pas les sommets finaux car il est très probable que nos paramètres soient modifiés et qu'ils doivent être régénérés de toute façon
|
||||||
|
m_boundingVolumeUpdated = false;
|
||||||
|
m_verticesUpdated = false;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
void NzSprite::InvalidateNode()
|
void NzSprite::InvalidateNode()
|
||||||
{
|
{
|
||||||
NzSceneNode::InvalidateNode();
|
NzSceneNode::InvalidateNode();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue