| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546 |
- /*
- * Copyright (c) 2009-2012 jMonkeyEngine
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #include "com_jme3_bullet_PhysicsSpace.h"
- #include "jmePhysicsSpace.h"
- #include "jmeBulletUtil.h"
- /**
- * Author: Normen Hansen
- */
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: createPhysicsSpace
- * Signature: (FFFFFFI)J
- */
- JNIEXPORT jlong JNICALL Java_com_jme3_bullet_PhysicsSpace_createPhysicsSpace
- (JNIEnv * env, jobject object, jfloat minX, jfloat minY, jfloat minZ, jfloat maxX, jfloat maxY, jfloat maxZ, jint broadphase, jboolean threading) {
- jmeClasses::initJavaClasses(env);
- jmePhysicsSpace* space = new jmePhysicsSpace(env, object);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space has not been created.");
- return 0;
- }
- space->createPhysicsSpace(minX, minY, minZ, maxX, maxY, maxZ, broadphase, threading);
- return reinterpret_cast<jlong>(space);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: stepSimulation
- * Signature: (JFIF)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_stepSimulation
- (JNIEnv * env, jobject object, jlong spaceId, jfloat tpf, jint maxSteps, jfloat accuracy) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- space->stepSimulation(tpf, maxSteps, accuracy);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: addCollisionObject
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addCollisionObject
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (collisionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The collision object does not exist.");
- return;
- }
- jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
- userPointer -> space = space;
- space->getDynamicsWorld()->addCollisionObject(collisionObject);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: removeCollisionObject
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeCollisionObject
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (collisionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The collision object does not exist.");
- return;
- }
- space->getDynamicsWorld()->removeCollisionObject(collisionObject);
- jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
- userPointer -> space = NULL;
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: addRigidBody
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addRigidBody
- (JNIEnv * env, jobject object, jlong spaceId, jlong rigidBodyId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btRigidBody* collisionObject = reinterpret_cast<btRigidBody*>(rigidBodyId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (collisionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The collision object does not exist.");
- return;
- }
- jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
- userPointer -> space = space;
- space->getDynamicsWorld()->addRigidBody(collisionObject);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: removeRigidBody
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeRigidBody
- (JNIEnv * env, jobject object, jlong spaceId, jlong rigidBodyId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btRigidBody* collisionObject = reinterpret_cast<btRigidBody*>(rigidBodyId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (collisionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The collision object does not exist.");
- return;
- }
- jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
- userPointer -> space = NULL;
- space->getDynamicsWorld()->removeRigidBody(collisionObject);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: addCharacterObject
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addCharacterObject
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (collisionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The collision object does not exist.");
- return;
- }
- jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
- userPointer -> space = space;
- space->getDynamicsWorld()->addCollisionObject(collisionObject,
- btBroadphaseProxy::CharacterFilter,
- btBroadphaseProxy::StaticFilter | btBroadphaseProxy::DefaultFilter
- );
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: removeCharacterObject
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeCharacterObject
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (collisionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The collision object does not exist.");
- return;
- }
- jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
- userPointer -> space = NULL;
- space->getDynamicsWorld()->removeCollisionObject(collisionObject);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: addAction
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addAction
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btActionInterface* actionObject = reinterpret_cast<btActionInterface*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (actionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The action object does not exist.");
- return;
- }
- space->getDynamicsWorld()->addAction(actionObject);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: removeAction
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeAction
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btActionInterface* actionObject = reinterpret_cast<btActionInterface*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (actionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The action object does not exist.");
- return;
- }
- space->getDynamicsWorld()->removeAction(actionObject);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: addVehicle
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addVehicle
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btActionInterface* actionObject = reinterpret_cast<btActionInterface*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (actionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The vehicle object does not exist.");
- return;
- }
- space->getDynamicsWorld()->addVehicle(actionObject);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: removeVehicle
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeVehicle
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btActionInterface* actionObject = reinterpret_cast<btActionInterface*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (actionObject == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The action object does not exist.");
- return;
- }
- space->getDynamicsWorld()->removeVehicle(actionObject);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: addConstraint
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addConstraint
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btTypedConstraint* constraint = reinterpret_cast<btTypedConstraint*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (constraint == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The constraint object does not exist.");
- return;
- }
- space->getDynamicsWorld()->addConstraint(constraint);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: addConstraint
- * Signature: (JJZ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addConstraintC
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId, jboolean collision) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btTypedConstraint* constraint = reinterpret_cast<btTypedConstraint*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (constraint == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The constraint object does not exist.");
- return;
- }
- space->getDynamicsWorld()->addConstraint(constraint, collision);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: removeConstraint
- * Signature: (JJ)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeConstraint
- (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- btTypedConstraint* constraint = reinterpret_cast<btTypedConstraint*>(objectId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- if (constraint == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The constraint object does not exist.");
- return;
- }
- space->getDynamicsWorld()->removeConstraint(constraint);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: setGravity
- * Signature: (JLcom/jme3/math/Vector3f;)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_setGravity
- (JNIEnv * env, jobject object, jlong spaceId, jobject vector) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- btVector3 gravity = btVector3();
- jmeBulletUtil::convert(env, vector, &gravity);
- space->getDynamicsWorld()->setGravity(gravity);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: initNativePhysics
- * Signature: ()V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_initNativePhysics
- (JNIEnv * env, jclass clazz) {
- jmeClasses::initJavaClasses(env);
- }
- /*
- * Class: com_jme3_bullet_PhysicsSpace
- * Method: finalizeNative
- * Signature: (J)V
- */
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_finalizeNative
- (JNIEnv * env, jobject object, jlong spaceId) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- if (space == NULL) {
- return;
- }
- delete(space);
- }
-
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_rayTest_1native
- (JNIEnv * env, jobject object, jobject from, jobject to, jlong spaceId, jobject resultlist, jint flags) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*> (spaceId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- struct AllRayResultCallback : public btCollisionWorld::RayResultCallback {
- AllRayResultCallback(const btVector3& rayFromWorld, const btVector3 & rayToWorld) : m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld) {
- }
- jobject resultlist;
- JNIEnv* env;
- btVector3 m_rayFromWorld; //used to calculate hitPointWorld from hitFraction
- btVector3 m_rayToWorld;
- btVector3 m_hitNormalWorld;
- btVector3 m_hitPointWorld;
- virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) {
- if (normalInWorldSpace) {
- m_hitNormalWorld = rayResult.m_hitNormalLocal;
- } else {
- m_hitNormalWorld = m_collisionObject->getWorldTransform().getBasis() * rayResult.m_hitNormalLocal;
- }
- m_hitPointWorld.setInterpolate3(m_rayFromWorld, m_rayToWorld, rayResult.m_hitFraction);
- jmeBulletUtil::addResult(env, resultlist, &m_hitNormalWorld, &m_hitPointWorld, rayResult.m_hitFraction, rayResult.m_collisionObject);
- return 1.f;
- }
- };
- btVector3 native_to = btVector3();
- jmeBulletUtil::convert(env, to, &native_to);
- btVector3 native_from = btVector3();
- jmeBulletUtil::convert(env, from, &native_from);
- AllRayResultCallback resultCallback(native_from, native_to);
- resultCallback.env = env;
- resultCallback.resultlist = resultlist;
- resultCallback.m_flags = flags;
- space->getDynamicsWorld()->rayTest(native_from, native_to, resultCallback);
- return;
- }
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_sweepTest_1native
- (JNIEnv * env, jobject object, jlong shapeId, jobject from, jobject to, jlong spaceId, jobject resultlist, jfloat allowedCcdPenetration) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*> (spaceId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
- btCollisionShape* shape = reinterpret_cast<btCollisionShape*> (shapeId);
- if (shape == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The shape does not exist.");
- return;
- }
- struct AllConvexResultCallback : public btCollisionWorld::ConvexResultCallback {
- AllConvexResultCallback(const btTransform& convexFromWorld, const btTransform & convexToWorld) : m_convexFromWorld(convexFromWorld), m_convexToWorld(convexToWorld) {
- }
- jobject resultlist;
- JNIEnv* env;
- btTransform m_convexFromWorld; //used to calculate hitPointWorld from hitFraction
- btTransform m_convexToWorld;
- btVector3 m_hitNormalWorld;
- btVector3 m_hitPointWorld;
- virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult& convexResult, bool normalInWorldSpace) {
- if (normalInWorldSpace) {
- m_hitNormalWorld = convexResult.m_hitNormalLocal;
- }
- else {
- m_hitNormalWorld = convexResult.m_hitCollisionObject->getWorldTransform().getBasis() * convexResult.m_hitNormalLocal;
- }
- m_hitPointWorld.setInterpolate3(m_convexFromWorld.getBasis() * m_convexFromWorld.getOrigin(), m_convexToWorld.getBasis() * m_convexToWorld.getOrigin(), convexResult.m_hitFraction);
- jmeBulletUtil::addSweepResult(env, resultlist, &m_hitNormalWorld, &m_hitPointWorld, convexResult.m_hitFraction, convexResult.m_hitCollisionObject);
- return 1.f;
- }
- };
- btTransform native_to = btTransform();
- jmeBulletUtil::convert(env, to, &native_to);
- btTransform native_from = btTransform();
- jmeBulletUtil::convert(env, from, &native_from);
- btScalar native_allowed_ccd_penetration = btScalar(allowedCcdPenetration);
- AllConvexResultCallback resultCallback(native_from, native_to);
- resultCallback.env = env;
- resultCallback.resultlist = resultlist;
- space->getDynamicsWorld()->convexSweepTest((btConvexShape *) shape, native_from, native_to, resultCallback, native_allowed_ccd_penetration);
- return;
- }
-
- JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_setSolverNumIterations
- (JNIEnv *env, jobject object, jlong spaceId, jint value) {
- jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId);
- if (space == NULL) {
- jclass newExc = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(newExc, "The physics space does not exist.");
- return;
- }
-
- space->getDynamicsWorld()->getSolverInfo().m_numIterations = value;
- }
- #ifdef __cplusplus
- }
- #endif
|