159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/* 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copyright (c) 2009-2010 jMonkeyEngine 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * All rights reserved. 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Redistribution and use in source and binary forms, with or without 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * modification, are permitted provided that the following conditions are 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * met: 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions of source code must retain the above copyright 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer. 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions in binary form must reproduce the above copyright 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer in the 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * documentation and/or other materials provided with the distribution. 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * may be used to endorse or promote products derived from this software 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * without specific prior written permission. 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#include "com_jme3_bullet_PhysicsSpace.h" 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#include "jmePhysicsSpace.h" 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#include "jmeBulletUtil.h" 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Author: Normen Hansen 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#ifdef __cplusplus 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaextern "C" { 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#endif 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: createPhysicsSpace 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (FFFFFFI)J 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT jlong JNICALL Java_com_jme3_bullet_PhysicsSpace_createPhysicsSpace 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jfloat minX, jfloat minY, jfloat minZ, jfloat maxX, jfloat maxY, jfloat maxZ, jint broadphase, jboolean threading) { 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeClasses::initJavaClasses(env); 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = new jmePhysicsSpace(env, object); 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space has not been created."); 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return 0; 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->createPhysicsSpace(minX, minY, minZ, maxX, maxY, maxZ, broadphase, threading); 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return reinterpret_cast<jlong>(space); 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: stepSimulation 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JFIF)V 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_stepSimulation 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jfloat tpf, jint maxSteps, jfloat accuracy) { 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->stepSimulation(tpf, maxSteps, accuracy); 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: addCollisionObject 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addCollisionObject 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId); 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (collisionObject == NULL) { 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The collision object does not exist."); 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer(); 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta userPointer -> space = space; 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->addCollisionObject(collisionObject); 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: removeCollisionObject 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeCollisionObject 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId); 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (collisionObject == NULL) { 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The collision object does not exist."); 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->removeCollisionObject(collisionObject); 12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer(); 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta userPointer -> space = NULL; 12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: addRigidBody 12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addRigidBody 13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong rigidBodyId) { 13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btRigidBody* collisionObject = reinterpret_cast<btRigidBody*>(rigidBodyId); 13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 13859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (collisionObject == NULL) { 14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The collision object does not exist."); 14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 14459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer(); 14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta userPointer -> space = space; 14759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->addRigidBody(collisionObject); 14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 15159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: removeRigidBody 15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 15559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeRigidBody 15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong rigidBodyId) { 15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 15859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btRigidBody* collisionObject = reinterpret_cast<btRigidBody*>(rigidBodyId); 15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 16059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 16459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (collisionObject == NULL) { 16559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 16659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The collision object does not exist."); 16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 16859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer(); 17059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta userPointer -> space = NULL; 17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->removeRigidBody(collisionObject); 17259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 17459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 17659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: addCharacterObject 17759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 17959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addCharacterObject 18059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 18159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 18259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId); 18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 18559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 18659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (collisionObject == NULL) { 18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 19059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The collision object does not exist."); 19159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 19259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 19359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer(); 19459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta userPointer -> space = space; 19559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->addCollisionObject(collisionObject, 19659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btBroadphaseProxy::CharacterFilter, 19759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btBroadphaseProxy::StaticFilter | btBroadphaseProxy::DefaultFilter 19859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta ); 19959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 20059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 20159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 20259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 20359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: removeCharacterObject 20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeCharacterObject 20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId); 21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 21559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (collisionObject == NULL) { 21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The collision object does not exist."); 21859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 22059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer(); 22159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta userPointer -> space = NULL; 22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->removeCollisionObject(collisionObject); 22359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 22459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 22559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 22759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: addAction 22859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addAction 23159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btActionInterface* actionObject = reinterpret_cast<btActionInterface*>(objectId); 23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 23959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (actionObject == NULL) { 24059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The action object does not exist."); 24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 24459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->addAction(actionObject); 24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 24659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 24859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: removeAction 25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 25159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeAction 25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 25459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btActionInterface* actionObject = reinterpret_cast<btActionInterface*>(objectId); 25659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 25759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 25859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 26159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (actionObject == NULL) { 26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 26359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The action object does not exist."); 26459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 26559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 26659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->removeAction(actionObject); 26759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 27059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: addVehicle 27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 27359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 27459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addVehicle 27559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 27759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btActionInterface* actionObject = reinterpret_cast<btActionInterface*>(objectId); 27859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 28159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 28259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (actionObject == NULL) { 28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The vehicle object does not exist."); 28659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->addVehicle(actionObject); 28959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 29259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: removeVehicle 29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 29559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 29659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeVehicle 29759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 29859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 29959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btActionInterface* actionObject = reinterpret_cast<btActionInterface*>(objectId); 30059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 30159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 30259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 30359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 30459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 30559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (actionObject == NULL) { 30659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 30759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The action object does not exist."); 30859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 30959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 31059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->removeVehicle(actionObject); 31159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 31259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 31359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 31459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 31559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: addConstraint 31659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 31759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 31859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_addConstraint 31959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 32059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 32159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btTypedConstraint* constraint = reinterpret_cast<btTypedConstraint*>(objectId); 32259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 32359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 32459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 32559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 32659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 32759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (constraint == NULL) { 32859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 32959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The constraint object does not exist."); 33059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 33159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 33259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->addConstraint(constraint); 33359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 33459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 33559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 33659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 33759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: removeConstraint 33859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JJ)V 33959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 34059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeConstraint 34159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jlong objectId) { 34259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 34359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btTypedConstraint* constraint = reinterpret_cast<btTypedConstraint*>(objectId); 34459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 34559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 34659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 34759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 34859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 34959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (constraint == NULL) { 35059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 35159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The constraint object does not exist."); 35259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 35359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 35459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->removeConstraint(constraint); 35559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 35659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 35759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 35859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 35959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: setGravity 36059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (JLcom/jme3/math/Vector3f;)V 36159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 36259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_setGravity 36359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId, jobject vector) { 36459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 36559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 36659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 36759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 36859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 36959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 37059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btVector3 gravity = btVector3(); 37159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeBulletUtil::convert(env, vector, &gravity); 37259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->setGravity(gravity); 37359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 37459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 37559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 37659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 37759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: initNativePhysics 37859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: ()V 37959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 38059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_initNativePhysics 38159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jclass clazz) { 38259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeClasses::initJavaClasses(env); 38359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 38459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 38559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /* 38659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Class: com_jme3_bullet_PhysicsSpace 38759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Method: finalizeNative 38859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Signature: (J)V 38959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 39059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_finalizeNative 39159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jlong spaceId) { 39259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*>(spaceId); 39359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 39459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 39559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 39659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta delete(space); 39759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 39859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 39959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_rayTest_1native 40059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta (JNIEnv * env, jobject object, jobject to, jobject from, jlong spaceId, jobject resultlist) { 40159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 40259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmePhysicsSpace* space = reinterpret_cast<jmePhysicsSpace*> (spaceId); 40359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (space == NULL) { 40459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jclass newExc = env->FindClass("java/lang/NullPointerException"); 40559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta env->ThrowNew(newExc, "The physics space does not exist."); 40659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 40759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 40859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 40959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta struct AllRayResultCallback : public btCollisionWorld::RayResultCallback { 41059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 41159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta AllRayResultCallback(const btVector3& rayFromWorld, const btVector3 & rayToWorld) : m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld) { 41259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 41359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jobject resultlist; 41459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta JNIEnv* env; 41559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btVector3 m_rayFromWorld; //used to calculate hitPointWorld from hitFraction 41659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btVector3 m_rayToWorld; 41759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 41859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btVector3 m_hitNormalWorld; 41959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btVector3 m_hitPointWorld; 42059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 42159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) { 42259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (normalInWorldSpace) { 42359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta m_hitNormalWorld = rayResult.m_hitNormalLocal; 42459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } else { 42559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta m_hitNormalWorld = m_collisionObject->getWorldTransform().getBasis() * rayResult.m_hitNormalLocal; 42659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 42759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta m_hitPointWorld.setInterpolate3(m_rayFromWorld, m_rayToWorld, rayResult.m_hitFraction); 42859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 42959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeBulletUtil::addResult(env, resultlist, m_hitNormalWorld, m_hitPointWorld, rayResult.m_hitFraction, rayResult.m_collisionObject); 43059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 43159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return 1.f; 43259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 43359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta }; 43459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 43559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btVector3 native_to = btVector3(); 43659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeBulletUtil::convert(env, to, &native_to); 43759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 43859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta btVector3 native_from = btVector3(); 43959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta jmeBulletUtil::convert(env, from, &native_from); 44059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 44159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta AllRayResultCallback resultCallback(native_from, native_to); 44259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta resultCallback.env = env; 44359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta resultCallback.resultlist = resultlist; 44459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta space->getDynamicsWorld()->rayTest(native_from, native_to, resultCallback); 44559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 44659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 44759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 44859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#ifdef __cplusplus 44959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 45059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#endif 451