diff --git a/ChangeLog.md b/ChangeLog.md index 410312517..39ead0d94 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -174,6 +174,7 @@ Nazara Engine: - Signal now implement a copy constructor and copy assignation operator for convenience - Fixed ENet UnreliableFragment packets sent as Unreliable (and such being incomplete upon reception) - ENet DisconnectLater now reflects libenet behavior (and is waiting for unreliable commands to be sent before disconnecting for good) +- ⚠ Collider3D::ForEachPolygon now takes a void(Vector3f\*, std::size_t) callback (instead of void(float\*, std::size_t)) Nazara Development Kit: - Added ImageWidget (#139) diff --git a/include/Nazara/Physics3D/Collider3D.hpp b/include/Nazara/Physics3D/Collider3D.hpp index a7a59a2d1..9dbfe126c 100644 --- a/include/Nazara/Physics3D/Collider3D.hpp +++ b/include/Nazara/Physics3D/Collider3D.hpp @@ -54,7 +54,7 @@ namespace Nz virtual void ComputeInertialMatrix(Vector3f* inertia, Vector3f* center) const; virtual float ComputeVolume() const; - virtual void ForEachPolygon(const std::function& callback) const; + virtual void ForEachPolygon(const std::function& callback) const; NewtonCollision* GetHandle(PhysWorld3D* world) const; virtual ColliderType3D GetType() const = 0; diff --git a/src/Nazara/Physics3D/Collider3D.cpp b/src/Nazara/Physics3D/Collider3D.cpp index 4dc2f6821..be7ceb6be 100644 --- a/src/Nazara/Physics3D/Collider3D.cpp +++ b/src/Nazara/Physics3D/Collider3D.cpp @@ -114,12 +114,14 @@ namespace Nz return volume; } - void Collider3D::ForEachPolygon(const std::function& callback) const + void Collider3D::ForEachPolygon(const std::function& callback) const { auto newtCallback = [](void* const userData, int vertexCount, const dFloat* const faceArray, int /*faceId*/) { + static_assert(sizeof(Vector3f) == 3 * sizeof(float), "Vector3 is expected to contain 3 floats without padding"); + const auto& cb = *static_cast>(userData); - cb(faceArray, vertexCount); + cb(reinterpret_cast(faceArray), vertexCount); }; // Check for existing collision handles, and create a temporary one if none is available