Physics2D/RigidBody2D: Add ForEachArbiter method

This commit is contained in:
Lynix 2019-01-19 02:29:27 +01:00
parent 9be8d0eae4
commit 40cd8a7987
5 changed files with 30 additions and 0 deletions

View File

@ -158,6 +158,7 @@ Nazara Engine:
- Added LuaState::RawEqual
- Fixed LuaCoroutine movement assignation operator
- Added Arbiter2D::GetBodies
- Added RigidBody2D::ForEachArbiter
Nazara Development Kit:
- Added ImageWidget (#139)

View File

@ -38,6 +38,8 @@ namespace Ndk
inline void EnableNodeSynchronization(bool nodeSynchronization);
inline void ForEachArbiter(const std::function<void(Nz::Arbiter2D&)>& callback);
inline Nz::Rectf GetAABB() const;
inline float GetAngularDamping() const;
inline Nz::RadianAnglef GetAngularVelocity() const;

View File

@ -138,6 +138,15 @@ namespace Ndk
m_entity->Invalidate();
}
/*!
TODO
*/
inline void PhysicsComponent2D::ForEachArbiter(const std::function<void(Nz::Arbiter2D&)>& callback)
{
NazaraAssert(m_object, "Invalid physics object");
return m_object->ForEachArbiter(callback);
}
/*!
* \brief Gets the AABB of the physics object
* \return AABB of the object

View File

@ -41,6 +41,8 @@ namespace Nz
void EnableSimulation(bool simulation);
void ForEachArbiter(std::function<void(Nz::Arbiter2D& /*arbiter*/)> callback);
Rectf GetAABB() const;
inline float GetAngularDamping() const;
RadianAnglef GetAngularVelocity() const;

View File

@ -3,6 +3,7 @@
// For conditions of distribution and use, see copyright notice in Config.hpp
#include <Nazara/Physics2D/RigidBody2D.hpp>
#include <Nazara/Physics2D/Arbiter2D.hpp>
#include <Nazara/Physics2D/PhysWorld2D.hpp>
#include <chipmunk/chipmunk.h>
#include <chipmunk/chipmunk_private.h>
@ -175,6 +176,21 @@ namespace Nz
}
}
void RigidBody2D::ForEachArbiter(std::function<void(Nz::Arbiter2D&)> callback)
{
using CallbackType = decltype(callback);
auto RealCallback = [](cpBody* body, cpArbiter* arbiter, void* data)
{
CallbackType& cb = *static_cast<CallbackType*>(data);
Arbiter2D nzArbiter(arbiter);
cb(nzArbiter);
};
cpBodyEachArbiter(m_handle, RealCallback, &callback);
}
Rectf RigidBody2D::GetAABB() const
{
if (m_shapes.empty())