#include #include #include namespace Ndk { template inline Nz::ObjectRef ConstraintComponent2D::CreateConstraint(const Ndk::EntityHandle& first, const Ndk::EntityHandle& second, Args && ...args) { auto FetchBody = [](const Ndk::EntityHandle& entity) -> Nz::RigidBody2D* { if (entity->HasComponent()) return entity->GetComponent().GetRigidBody(); else if (entity->HasComponent()) return entity->GetComponent().GetStaticBody(); return nullptr; }; Nz::RigidBody2D* firstBody = FetchBody(first); NazaraAssert(firstBody, "First entity has no CollisionComponent2D nor PhysicsComponent2D component"); Nz::RigidBody2D* secondBody = FetchBody(second); NazaraAssert(secondBody, "Second entity has no CollisionComponent2D nor PhysicsComponent2D component"); Nz::ObjectRef constraint = T::New(*firstBody, *secondBody, std::forward(args)...); m_constraints.push_back(constraint); return constraint; } }