// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - JoltPhysics3D module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_JOLTPHYSICS3D_JOLTCONSTRAINT3D_HPP #define NAZARA_JOLTPHYSICS3D_JOLTCONSTRAINT3D_HPP #include #include #include #include #include #include namespace JPH { class TwoBodyConstraint; } namespace Nz { class JoltConstraint3D; using JoltConstraint3DHandle = ObjectHandle; class NAZARA_JOLTPHYSICS3D_API JoltConstraint3D : public HandledObject { public: JoltConstraint3D(const JoltConstraint3D&) = delete; JoltConstraint3D(JoltConstraint3D&& constraint) noexcept; virtual ~JoltConstraint3D(); JoltRigidBody3D& GetBodyA(); const JoltRigidBody3D& GetBodyA() const; JoltRigidBody3D& GetBodyB(); const JoltRigidBody3D& GetBodyB() const; JoltPhysWorld3D& GetWorld(); const JoltPhysWorld3D& GetWorld() const; bool IsSingleBody() const; JoltConstraint3D& operator=(const JoltConstraint3D&) = delete; JoltConstraint3D& operator=(JoltConstraint3D&& constraint) noexcept; protected: JoltConstraint3D(); template T* GetConstraint(); template const T* GetConstraint() const; void SetupConstraint(std::unique_ptr constraint); private: void Destroy(); std::unique_ptr m_constraint; }; class NAZARA_JOLTPHYSICS3D_API JoltPivotConstraint3D : public JoltConstraint3D { public: JoltPivotConstraint3D(JoltRigidBody3D& first, const Vector3f& pivot); JoltPivotConstraint3D(JoltRigidBody3D& first, JoltRigidBody3D& second, const Vector3f& pivot); JoltPivotConstraint3D(JoltRigidBody3D& first, JoltRigidBody3D& second, const Vector3f& firstAnchor, const Vector3f& secondAnchor); ~JoltPivotConstraint3D() = default; Vector3f GetFirstAnchor() const; Vector3f GetSecondAnchor() const; void SetFirstAnchor(const Vector3f& firstAnchor); void SetSecondAnchor(const Vector3f& secondAnchor); }; } #include #endif // NAZARA_BULLETPHYSICS3D_BULLETCONSTRAINT3D_HPP