|
|
@ -46,15 +46,20 @@ extern "C" { |
|
|
|
* Signature: (FFFFFFI)J |
|
|
|
* Signature: (FFFFFFI)J |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
JNIEXPORT jlong JNICALL Java_com_jme3_bullet_PhysicsSpace_createPhysicsSpace |
|
|
|
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) { |
|
|
|
(JNIEnv * env, jobject object, jfloat minX, jfloat minY, jfloat minZ, |
|
|
|
|
|
|
|
jfloat maxX, jfloat maxY, jfloat maxZ, jint broadphase, |
|
|
|
|
|
|
|
jboolean threading) { |
|
|
|
jmeClasses::initJavaClasses(env); |
|
|
|
jmeClasses::initJavaClasses(env); |
|
|
|
|
|
|
|
|
|
|
|
jmePhysicsSpace* space = new jmePhysicsSpace(env, object); |
|
|
|
jmePhysicsSpace* space = new jmePhysicsSpace(env, object); |
|
|
|
if (space == NULL) { |
|
|
|
if (space == NULL) { |
|
|
|
jclass newExc = env->FindClass("java/lang/NullPointerException"); |
|
|
|
jclass newExc = env->FindClass("java/lang/NullPointerException"); |
|
|
|
env->ThrowNew(newExc, "The physics space has not been created."); |
|
|
|
env->ThrowNew(newExc, "The physics space has not been created."); |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
space->createPhysicsSpace(minX, minY, minZ, maxX, maxY, maxZ, broadphase, threading); |
|
|
|
|
|
|
|
|
|
|
|
space->createPhysicsSpace(minX, minY, minZ, maxX, maxY, maxZ, |
|
|
|
|
|
|
|
broadphase, threading); |
|
|
|
return reinterpret_cast<jlong> (space); |
|
|
|
return reinterpret_cast<jlong> (space); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -64,7 +69,8 @@ extern "C" { |
|
|
|
* Signature: (JFIF)V |
|
|
|
* Signature: (JFIF)V |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_stepSimulation |
|
|
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_stepSimulation |
|
|
|
(JNIEnv * env, jobject object, jlong spaceId, jfloat tpf, jint maxSteps, jfloat accuracy) { |
|
|
|
(JNIEnv * env, jobject object, jlong spaceId, jfloat tpf, jint maxSteps, |
|
|
|
|
|
|
|
jfloat accuracy) { |
|
|
|
jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*> (spaceId); |
|
|
|
jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*> (spaceId); |
|
|
|
if (space == NULL) { |
|
|
|
if (space == NULL) { |
|
|
|
jclass newExc = env->FindClass("java/lang/NullPointerException"); |
|
|
|
jclass newExc = env->FindClass("java/lang/NullPointerException"); |
|
|
@ -391,6 +397,7 @@ extern "C" { |
|
|
|
} |
|
|
|
} |
|
|
|
btVector3 gravity = btVector3(); |
|
|
|
btVector3 gravity = btVector3(); |
|
|
|
jmeBulletUtil::convert(env, vector, &gravity); |
|
|
|
jmeBulletUtil::convert(env, vector, &gravity); |
|
|
|
|
|
|
|
|
|
|
|
space->getDynamicsWorld()->setGravity(gravity); |
|
|
|
space->getDynamicsWorld()->setGravity(gravity); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -465,11 +472,10 @@ extern "C" { |
|
|
|
resultCallback.resultlist = resultlist; |
|
|
|
resultCallback.resultlist = resultlist; |
|
|
|
resultCallback.m_flags = flags; |
|
|
|
resultCallback.m_flags = flags; |
|
|
|
space->getDynamicsWorld()->rayTest(native_from, native_to, resultCallback); |
|
|
|
space->getDynamicsWorld()->rayTest(native_from, native_to, resultCallback); |
|
|
|
|
|
|
|
|
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_sweepTest_1native |
|
|
|
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) { |
|
|
|
(JNIEnv * env, jobject object, jlong shapeId, jobject from, jobject to, jlong spaceId, jobject resultlist, jfloat allowedCcdPenetration) { |
|
|
|
|
|
|
|
|
|
|
@ -502,8 +508,7 @@ extern "C" { |
|
|
|
virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult& convexResult, bool normalInWorldSpace) { |
|
|
|
virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult& convexResult, bool normalInWorldSpace) { |
|
|
|
if (normalInWorldSpace) { |
|
|
|
if (normalInWorldSpace) { |
|
|
|
m_hitNormalWorld = convexResult.m_hitNormalLocal; |
|
|
|
m_hitNormalWorld = convexResult.m_hitNormalLocal; |
|
|
|
} |
|
|
|
} else { |
|
|
|
else { |
|
|
|
|
|
|
|
m_hitNormalWorld = convexResult.m_hitCollisionObject->getWorldTransform().getBasis() * convexResult.m_hitNormalLocal; |
|
|
|
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); |
|
|
|
m_hitPointWorld.setInterpolate3(m_convexFromWorld.getBasis() * m_convexFromWorld.getOrigin(), m_convexToWorld.getBasis() * m_convexToWorld.getOrigin(), convexResult.m_hitFraction); |
|
|
|