Physics2D/Collider2D: Allow to prevent individual colliders properties override
This commit is contained in:
parent
b9e36f36e2
commit
933cb64488
|
|
@ -140,6 +140,7 @@ Nazara Engine:
|
||||||
- Added ConvexCollider2D::GetVertices
|
- Added ConvexCollider2D::GetVertices
|
||||||
- Added SegmentCollider2D::GetThickness
|
- Added SegmentCollider2D::GetThickness
|
||||||
- Fixed vertices generation/render queue submit when using multiples materials on a Tilemap
|
- Fixed vertices generation/render queue submit when using multiples materials on a Tilemap
|
||||||
|
- It is now possible to prevent CompoundCollider2D to override individual colliders properties
|
||||||
|
|
||||||
Nazara Development Kit:
|
Nazara Development Kit:
|
||||||
- Added ImageWidget (#139)
|
- Added ImageWidget (#139)
|
||||||
|
|
|
||||||
|
|
@ -143,15 +143,21 @@ namespace Nz
|
||||||
|
|
||||||
float ComputeMomentOfInertia(float mass) const override;
|
float ComputeMomentOfInertia(float mass) const override;
|
||||||
|
|
||||||
|
inline bool DoesOverrideCollisionProperties() const;
|
||||||
|
|
||||||
inline const std::vector<Collider2DRef>& GetGeoms() const;
|
inline const std::vector<Collider2DRef>& GetGeoms() const;
|
||||||
ColliderType2D GetType() const override;
|
ColliderType2D GetType() const override;
|
||||||
|
|
||||||
|
inline void OverridesCollisionProperties(bool shouldOverride);
|
||||||
|
|
||||||
template<typename... Args> static CompoundCollider2DRef New(Args&&... args);
|
template<typename... Args> static CompoundCollider2DRef New(Args&&... args);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void CreateShapes(RigidBody2D* body, std::vector<cpShape*>& shapes) const override;
|
void CreateShapes(RigidBody2D* body, std::vector<cpShape*>& shapes) const override;
|
||||||
|
std::vector<cpShape*> GenerateShapes(RigidBody2D* body) const override;
|
||||||
|
|
||||||
std::vector<Collider2DRef> m_geoms;
|
std::vector<Collider2DRef> m_geoms;
|
||||||
|
bool m_doesOverrideCollisionProperties;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConvexCollider2D;
|
class ConvexCollider2D;
|
||||||
|
|
|
||||||
|
|
@ -110,11 +110,21 @@ namespace Nz
|
||||||
return object.release();
|
return object.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool Nz::CompoundCollider2D::DoesOverrideCollisionProperties() const
|
||||||
|
{
|
||||||
|
return m_doesOverrideCollisionProperties;
|
||||||
|
}
|
||||||
|
|
||||||
inline const std::vector<Collider2DRef>& CompoundCollider2D::GetGeoms() const
|
inline const std::vector<Collider2DRef>& CompoundCollider2D::GetGeoms() const
|
||||||
{
|
{
|
||||||
return m_geoms;
|
return m_geoms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void Nz::CompoundCollider2D::OverridesCollisionProperties(bool shouldOverride)
|
||||||
|
{
|
||||||
|
m_doesOverrideCollisionProperties = shouldOverride;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
CompoundCollider2DRef CompoundCollider2D::New(Args&&... args)
|
CompoundCollider2DRef CompoundCollider2D::New(Args&&... args)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,10 @@ namespace Nz
|
||||||
|
|
||||||
std::vector<cpShape*> Collider2D::GenerateShapes(RigidBody2D* body) const
|
std::vector<cpShape*> Collider2D::GenerateShapes(RigidBody2D* body) const
|
||||||
{
|
{
|
||||||
cpShapeFilter filter = cpShapeFilterNew(m_collisionGroup, m_categoryMask, m_collisionMask);
|
|
||||||
|
|
||||||
std::vector<cpShape*> shapes;
|
std::vector<cpShape*> shapes;
|
||||||
CreateShapes(body, shapes);
|
CreateShapes(body, shapes);
|
||||||
|
|
||||||
|
cpShapeFilter filter = cpShapeFilterNew(m_collisionGroup, m_categoryMask, m_collisionMask);
|
||||||
for (cpShape* shape : shapes)
|
for (cpShape* shape : shapes)
|
||||||
{
|
{
|
||||||
cpShapeSetFilter(shape, filter);
|
cpShapeSetFilter(shape, filter);
|
||||||
|
|
@ -82,7 +81,8 @@ namespace Nz
|
||||||
/******************************** CompoundCollider2D *********************************/
|
/******************************** CompoundCollider2D *********************************/
|
||||||
|
|
||||||
CompoundCollider2D::CompoundCollider2D(std::vector<Collider2DRef> geoms) :
|
CompoundCollider2D::CompoundCollider2D(std::vector<Collider2DRef> geoms) :
|
||||||
m_geoms(std::move(geoms))
|
m_geoms(std::move(geoms)),
|
||||||
|
m_doesOverrideCollisionProperties(true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -109,6 +109,20 @@ namespace Nz
|
||||||
geom->CreateShapes(body, shapes);
|
geom->CreateShapes(body, shapes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<cpShape*> CompoundCollider2D::GenerateShapes(RigidBody2D* body) const
|
||||||
|
{
|
||||||
|
// This is our parent's default behavior
|
||||||
|
if (m_doesOverrideCollisionProperties)
|
||||||
|
return Collider2D::GenerateShapes(body);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::vector<cpShape*> shapes;
|
||||||
|
CreateShapes(body, shapes);
|
||||||
|
|
||||||
|
return shapes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/******************************** ConvexCollider2D *********************************/
|
/******************************** ConvexCollider2D *********************************/
|
||||||
|
|
||||||
ConvexCollider2D::ConvexCollider2D(SparsePtr<const Vector2f> vertices, std::size_t vertexCount, float radius) :
|
ConvexCollider2D::ConvexCollider2D(SparsePtr<const Vector2f> vertices, std::size_t vertexCount, float radius) :
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue