From 6deb4d14445e112483522ee323a558aeefd169de Mon Sep 17 00:00:00 2001 From: stephengold Date: Fri, 28 Jun 2024 13:54:33 -0700 Subject: [PATCH] BodyInterface: add the activateBody() and setAngularVelocity() methods --- .../stephengold/joltjni/BodyInterface.java | 30 +++++++++++++++++++ ...thub_stephengold_joltjni_BodyInterface.cpp | 28 +++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/src/main/java/com/github/stephengold/joltjni/BodyInterface.java b/src/main/java/com/github/stephengold/joltjni/BodyInterface.java index 41ff85f9..b979b766 100644 --- a/src/main/java/com/github/stephengold/joltjni/BodyInterface.java +++ b/src/main/java/com/github/stephengold/joltjni/BodyInterface.java @@ -37,6 +37,17 @@ public class BodyInterface extends NonCopyable { // ************************************************************************* // new methods exposed + /** + * Activate the specified body. + * + * @param bodyId which body to activate (not null) + */ + public void activateBody(BodyId bodyId) { + long bodyInterfaceVa = va(); + long bodyIdVa = bodyId.va(); + activateBody(bodyInterfaceVa, bodyIdVa); + } + /** * Add the specified body to the physics system. * @@ -152,6 +163,19 @@ public boolean isActive(BodyId bodyId) { return result; } + /** + * Alter the linear velocity of the specified body. + * + * @param bodyId the ID of the body to test (not null) + * @param omega the desired rates (not null, unaffected) + */ + public void setAngularVelocity(BodyId bodyId, Vec3 omega) { + long bodyInterfaceVa = va(); + long bodyIdVa = bodyId.va(); + setAngularVelocity(bodyInterfaceVa, bodyIdVa, + omega.getX(), omega.getY(), omega.getZ()); + } + /** * Alter the linear velocity of the specified body. * @@ -166,6 +190,9 @@ public void setLinearVelocity(BodyId bodyId, Vec3 velocity) { // ************************************************************************* // native private methods + native private static void activateBody( + long bodyInterfaceVa, long bodyIdVa); + native private static void addBody( long bodyInterfaceVa, long bodyIdVa, int activationOrdinal); @@ -201,6 +228,9 @@ native private static float getLinearVelocityZ( native private static void removeBody( long bodyInterfaceVa, long bodyIdVa); + native private static void setAngularVelocity( + long bodyInterfaceVa, long bodyIdVa, float wx, float wy, float wz); + native private static void setLinearVelocity( long bodyInterfaceVa, long bodyIdVa, float vx, float vy, float vz); } diff --git a/src/main/native/glue/com_github_stephengold_joltjni_BodyInterface.cpp b/src/main/native/glue/com_github_stephengold_joltjni_BodyInterface.cpp index c0a5c3e3..4851c83f 100644 --- a/src/main/native/glue/com_github_stephengold_joltjni_BodyInterface.cpp +++ b/src/main/native/glue/com_github_stephengold_joltjni_BodyInterface.cpp @@ -29,6 +29,19 @@ SOFTWARE. using namespace JPH; +/* + * Class: com_github_stephengold_joltjni_BodyInterface + * Method: activateBody + * Signature: (JJ)V + */ +JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_BodyInterface_activateBody + (JNIEnv *, jclass, jlong bodyInterfaceVa, jlong bodyIdVa) { + BodyInterface * const pInterface + = reinterpret_cast (bodyInterfaceVa); + const BodyID * const pBodyId = reinterpret_cast (bodyIdVa); + pInterface->ActivateBody(*pBodyId); +} + /* * Class: com_github_stephengold_joltjni_BodyInterface * Method: addBody @@ -199,6 +212,21 @@ JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_BodyInterface_removeB pInterface->RemoveBody(*pBodyId); } +/* + * Class: com_github_stephengold_joltjni_BodyInterface + * Method: setAngularVelocity + * Signature: (JJFFF)V + */ +JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_BodyInterface_setAngularVelocity + (JNIEnv *, jclass, jlong bodyInterfaceVa, jlong bodyIdVa, + jfloat wx, jfloat wy, jfloat wz) { + BodyInterface * const pInterface + = reinterpret_cast (bodyInterfaceVa); + const BodyID * const pBodyId = reinterpret_cast (bodyIdVa); + const Vec3 omega(wx, wy, wz); + pInterface->SetAngularVelocity(*pBodyId, omega); +} + /* * Class: com_github_stephengold_joltjni_BodyInterface * Method: setLinearVelocity