native bullet:
- add ray test code, thanks to @EmpirePhoenix - clean up import structure - remove separate jmeUserPointer class git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8577 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
83ab68264b
commit
439c5b36b8
@ -214,11 +214,10 @@ public class PhysicsSpace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addCollision_native(){
|
private void addCollision_native() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean needCollision_native(PhysicsCollisionObject objectA, PhysicsCollisionObject objectB){
|
private boolean needCollision_native(PhysicsCollisionObject objectA, PhysicsCollisionObject objectB) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,6 +332,7 @@ public class PhysicsSpace {
|
|||||||
// System.out.println("addCollisionEvent:"+node.getObjectId()+" "+ node1.getObjectId());
|
// System.out.println("addCollisionEvent:"+node.getObjectId()+" "+ node1.getObjectId());
|
||||||
collisionEvents.add(eventFactory.getEvent(PhysicsCollisionEvent.TYPE_PROCESSED, node, node1, manifoldPointObjectId));
|
collisionEvents.add(eventFactory.getEvent(PhysicsCollisionEvent.TYPE_PROCESSED, node, node1, manifoldPointObjectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* updates the physics space
|
* updates the physics space
|
||||||
* @param time the current time value
|
* @param time the current time value
|
||||||
@ -715,10 +715,10 @@ public class PhysicsSpace {
|
|||||||
/**
|
/**
|
||||||
* Performs a ray collision test and returns the results as a list of PhysicsRayTestResults
|
* Performs a ray collision test and returns the results as a list of PhysicsRayTestResults
|
||||||
*/
|
*/
|
||||||
public List<PhysicsRayTestResult> rayTest(Vector3f from, Vector3f to) {
|
public List rayTest(Vector3f from, Vector3f to) {
|
||||||
List<PhysicsRayTestResult> results = new LinkedList<PhysicsRayTestResult>();
|
List results = new LinkedList();
|
||||||
// dynamicsWorld.rayTest(Converter.convert(from, rayVec1), Converter.convert(to, rayVec2), new InternalRayListener(results));
|
rayTest(from, to, results);
|
||||||
return results;
|
return (List<PhysicsRayTestResult>) results;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -726,10 +726,12 @@ public class PhysicsSpace {
|
|||||||
*/
|
*/
|
||||||
public List<PhysicsRayTestResult> rayTest(Vector3f from, Vector3f to, List<PhysicsRayTestResult> results) {
|
public List<PhysicsRayTestResult> rayTest(Vector3f from, Vector3f to, List<PhysicsRayTestResult> results) {
|
||||||
results.clear();
|
results.clear();
|
||||||
// dynamicsWorld.rayTest(Converter.convert(from, rayVec1), Converter.convert(to, rayVec2), new InternalRayListener(results));
|
rayTest_native(from, to, physicsSpaceId, results);
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public native void rayTest_native(Vector3f from, Vector3f to, long physicsSpaceId, List<PhysicsRayTestResult> results);
|
||||||
|
|
||||||
// private class InternalRayListener extends CollisionWorld.RayResultCallback {
|
// private class InternalRayListener extends CollisionWorld.RayResultCallback {
|
||||||
//
|
//
|
||||||
// private List<PhysicsRayTestResult> results;
|
// private List<PhysicsRayTestResult> results;
|
||||||
|
@ -35,23 +35,21 @@ import com.jme3.math.Vector3f;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains the results of a PhysicsSpace rayTest
|
* Contains the results of a PhysicsSpace rayTest
|
||||||
* @author normenhansen
|
* bulletAppState.getPhysicsSpace().rayTest(new Vector3f(0,1000,0),new Vector3f(0,-1000,0));
|
||||||
|
javap -s java.util.List
|
||||||
|
* @author Empire-Phoenix,normenhansen
|
||||||
*/
|
*/
|
||||||
public class PhysicsRayTestResult {
|
public class PhysicsRayTestResult {
|
||||||
|
|
||||||
private PhysicsCollisionObject collisionObject;
|
private PhysicsCollisionObject collisionObject;
|
||||||
private Vector3f hitNormalLocal;
|
private Vector3f hitNormalLocal;
|
||||||
private float hitFraction;
|
private float hitFraction;
|
||||||
private boolean normalInWorldSpace;
|
private boolean normalInWorldSpace = true;
|
||||||
|
|
||||||
public PhysicsRayTestResult() {
|
/**
|
||||||
}
|
* allocated by native code only
|
||||||
|
*/
|
||||||
public PhysicsRayTestResult(PhysicsCollisionObject collisionObject, Vector3f hitNormalLocal, float hitFraction, boolean normalInWorldSpace) {
|
private PhysicsRayTestResult() {
|
||||||
this.collisionObject = collisionObject;
|
|
||||||
this.hitNormalLocal = hitNormalLocal;
|
|
||||||
this.hitFraction = hitFraction;
|
|
||||||
this.normalInWorldSpace = normalInWorldSpace;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,11 +79,4 @@ public class PhysicsRayTestResult {
|
|||||||
public boolean isNormalInWorldSpace() {
|
public boolean isNormalInWorldSpace() {
|
||||||
return normalInWorldSpace;
|
return normalInWorldSpace;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void fill(PhysicsCollisionObject collisionObject, Vector3f hitNormalLocal, float hitFraction, boolean normalInWorldSpace) {
|
|
||||||
this.collisionObject = collisionObject;
|
|
||||||
this.hitNormalLocal = hitNormalLocal;
|
|
||||||
this.hitFraction = hitFraction;
|
|
||||||
this.normalInWorldSpace = normalInWorldSpace;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,6 @@ import com.jme3.export.JmeExporter;
|
|||||||
import com.jme3.math.Matrix3f;
|
import com.jme3.math.Matrix3f;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.bullet.objects.PhysicsRigidBody;
|
import com.jme3.bullet.objects.PhysicsRigidBody;
|
||||||
import com.jme3.bullet.util.Converter;
|
|
||||||
import com.jme3.export.InputCapsule;
|
import com.jme3.export.InputCapsule;
|
||||||
import com.jme3.export.JmeImporter;
|
import com.jme3.export.JmeImporter;
|
||||||
import com.jme3.export.OutputCapsule;
|
import com.jme3.export.OutputCapsule;
|
||||||
|
@ -12,7 +12,7 @@ bullet.compile.debug=false
|
|||||||
|
|
||||||
# native library compilation options
|
# native library compilation options
|
||||||
bullet.osx.compiler=g++
|
bullet.osx.compiler=g++
|
||||||
bullet.osx.syslibroot=/Developer/SDKs/MacOSX10.5.sdk
|
bullet.osx.syslibroot=/Developer/SDKs/MacOSX10.5u.sdk
|
||||||
# change this to msvc for MS Visual Studio compiler
|
# change this to msvc for MS Visual Studio compiler
|
||||||
bullet.windows.compiler=g++
|
bullet.windows.compiler=g++
|
||||||
bullet.linux.compiler=g++
|
bullet.linux.compiler=g++
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#include "com_jme3_bullet_PhysicsSpace.h"
|
#include "com_jme3_bullet_PhysicsSpace.h"
|
||||||
#include "jmePhysicsSpace.h"
|
#include "jmePhysicsSpace.h"
|
||||||
#include "jmeBulletUtil.h"
|
#include "jmeBulletUtil.h"
|
||||||
#include "jmeUserPointer.h"
|
|
||||||
/**
|
/**
|
||||||
* Author: Normen Hansen
|
* Author: Normen Hansen
|
||||||
*/
|
*/
|
||||||
@ -396,6 +396,55 @@ extern "C" {
|
|||||||
delete(space);
|
delete(space);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_rayTest_1native
|
||||||
|
(JNIEnv * env, jobject object, jobject to, jobject from, jlong spaceId, jobject resultlist) {
|
||||||
|
|
||||||
|
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;
|
||||||
|
space->getDynamicsWorld()->rayTest(native_from, native_to, resultCallback);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -135,6 +135,14 @@ JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_removeConstraint
|
|||||||
JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_setGravity
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_setGravity
|
||||||
(JNIEnv *, jobject, jlong, jobject);
|
(JNIEnv *, jobject, jlong, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: com_jme3_bullet_PhysicsSpace
|
||||||
|
* Method: rayTest_native
|
||||||
|
* Signature: (Lcom/jme3/math/Vector3f;Lcom/jme3/math/Vector3f;JLjava/util/List;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_rayTest_1native
|
||||||
|
(JNIEnv *, jobject, jobject, jobject, jlong, jobject);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: com_jme3_bullet_PhysicsSpace
|
* Class: com_jme3_bullet_PhysicsSpace
|
||||||
* Method: initNativePhysics
|
* Method: initNativePhysics
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
#include "com_jme3_bullet_collision_PhysicsCollisionObject.h"
|
#include "com_jme3_bullet_collision_PhysicsCollisionObject.h"
|
||||||
#include "jmeBulletUtil.h"
|
#include "jmeBulletUtil.h"
|
||||||
#include "jmePhysicsSpace.h"
|
#include "jmePhysicsSpace.h"
|
||||||
#include "jmeUserPointer.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h"
|
#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h"
|
||||||
#include "jmeBulletUtil.h"
|
#include "jmeBulletUtil.h"
|
||||||
#include "jmePhysicsSpace.h"
|
#include "jmePhysicsSpace.h"
|
||||||
#include "jmeUserPointer.h"
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -33,23 +33,23 @@
|
|||||||
#include "jmeBulletUtil.h"
|
#include "jmeBulletUtil.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Normen Hansen
|
* Author: Normen Hansen,Empire Phoenix, Lutherion
|
||||||
*/
|
*/
|
||||||
void jmeBulletUtil::convert(JNIEnv* env, jobject in, btVector3* out) {
|
void jmeBulletUtil::convert(JNIEnv* env, jobject in, btVector3* out) {
|
||||||
if (in == NULL || out == NULL) {
|
if (in == NULL || out == NULL) {
|
||||||
jmeClasses::throwNPE(env);
|
jmeClasses::throwNPE(env);
|
||||||
}
|
}
|
||||||
float x = env->GetFloatField(in, jmeClasses::Vector3f_x);//env->CallFloatMethod(in, jmeClasses::Vector3f_getX);
|
float x = env->GetFloatField(in, jmeClasses::Vector3f_x); //env->CallFloatMethod(in, jmeClasses::Vector3f_getX);
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
float y = env->GetFloatField(in, jmeClasses::Vector3f_y);//env->CallFloatMethod(in, jmeClasses::Vector3f_getY);
|
float y = env->GetFloatField(in, jmeClasses::Vector3f_y); //env->CallFloatMethod(in, jmeClasses::Vector3f_getY);
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
float z = env->GetFloatField(in, jmeClasses::Vector3f_z);//env->CallFloatMethod(in, jmeClasses::Vector3f_getZ);
|
float z = env->GetFloatField(in, jmeClasses::Vector3f_z); //env->CallFloatMethod(in, jmeClasses::Vector3f_getZ);
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
@ -77,7 +77,7 @@ void jmeBulletUtil::convert(JNIEnv* env, const btVector3* in, jobject out) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
env->SetFloatField(out, jmeClasses::Vector3f_z, z);
|
env->SetFloatField(out, jmeClasses::Vector3f_z, z);
|
||||||
// env->CallObjectMethod(out, jmeClasses::Vector3f_set, x, y, z);
|
// env->CallObjectMethod(out, jmeClasses::Vector3f_set, x, y, z);
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
@ -300,7 +300,26 @@ void jmeBulletUtil::convertQuat(JNIEnv* env, const btMatrix3x3* in, jobject out)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
env->SetFloatField(out, jmeClasses::Quaternion_w, w);
|
env->SetFloatField(out, jmeClasses::Quaternion_w, w);
|
||||||
// env->CallObjectMethod(out, jmeClasses::Quaternion_set, x, y, z, w);
|
// env->CallObjectMethod(out, jmeClasses::Quaternion_set, x, y, z, w);
|
||||||
|
if (env->ExceptionCheck()) {
|
||||||
|
env->Throw(env->ExceptionOccurred());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void jmeBulletUtil::addResult(JNIEnv* env, jobject resultlist, btVector3 hitnormal, btVector3 m_hitPointWorld, btScalar m_hitFraction, btCollisionObject* hitobject) {
|
||||||
|
|
||||||
|
jobject singleresult = env->AllocObject(jmeClasses::PhysicsRay_Class);
|
||||||
|
jobject hitnormalvec = env->AllocObject(jmeClasses::Vector3f);
|
||||||
|
|
||||||
|
convert(env, const_cast<btVector3*> (&hitnormal), hitnormalvec);
|
||||||
|
jmeUserPointer *up1 = (jmeUserPointer*) hitobject -> getUserPointer();
|
||||||
|
|
||||||
|
env->SetObjectField(singleresult, jmeClasses::PhysicsRay_normalInWorldSpace, hitnormalvec);
|
||||||
|
env->SetFloatField(singleresult, jmeClasses::PhysicsRay_hitfraction, m_hitFraction);
|
||||||
|
|
||||||
|
env->SetObjectField(singleresult, jmeClasses::PhysicsRay_collisionObject, up1->javaCollisionObject);
|
||||||
|
env->CallVoidMethod(resultlist, jmeClasses::PhysicsRay_addmethod, singleresult);
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
|
@ -45,8 +45,17 @@ public:
|
|||||||
static void convert(JNIEnv* env, const btMatrix3x3* in, jobject out);
|
static void convert(JNIEnv* env, const btMatrix3x3* in, jobject out);
|
||||||
static void convertQuat(JNIEnv* env, jobject in, btMatrix3x3* out);
|
static void convertQuat(JNIEnv* env, jobject in, btMatrix3x3* out);
|
||||||
static void convertQuat(JNIEnv* env, const btMatrix3x3* in, jobject out);
|
static void convertQuat(JNIEnv* env, const btMatrix3x3* in, jobject out);
|
||||||
|
static void addResult(JNIEnv* env, jobject resultlist, const btVector3 hitnormal,const btVector3 m_hitPointWorld,const btScalar m_hitFraction,btCollisionObject* hitobject);
|
||||||
private:
|
private:
|
||||||
jmeBulletUtil(){};
|
jmeBulletUtil(){};
|
||||||
~jmeBulletUtil(){};
|
~jmeBulletUtil(){};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class jmeUserPointer {
|
||||||
|
public:
|
||||||
|
jobject javaCollisionObject;
|
||||||
|
jint group;
|
||||||
|
jint groups;
|
||||||
|
void *space;
|
||||||
|
};
|
@ -33,7 +33,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Normen Hansen
|
* Author: Normen Hansen,Empire Phoenix, Lutherion
|
||||||
*/
|
*/
|
||||||
//public fields
|
//public fields
|
||||||
jclass jmeClasses::PhysicsSpace;
|
jclass jmeClasses::PhysicsSpace;
|
||||||
@ -81,6 +81,16 @@ jfieldID jmeClasses::Matrix3f_m22;
|
|||||||
jclass jmeClasses::DebugMeshCallback;
|
jclass jmeClasses::DebugMeshCallback;
|
||||||
jmethodID jmeClasses::DebugMeshCallback_addVector;
|
jmethodID jmeClasses::DebugMeshCallback_addVector;
|
||||||
|
|
||||||
|
jclass jmeClasses::PhysicsRay_Class;
|
||||||
|
jmethodID jmeClasses::PhysicsRay_newSingleResult;
|
||||||
|
|
||||||
|
jfieldID jmeClasses::PhysicsRay_normalInWorldSpace;
|
||||||
|
jfieldID jmeClasses::PhysicsRay_hitfraction;
|
||||||
|
jfieldID jmeClasses::PhysicsRay_collisionObject;
|
||||||
|
|
||||||
|
jclass jmeClasses::PhysicsRay_listresult;
|
||||||
|
jmethodID jmeClasses::PhysicsRay_addmethod;
|
||||||
|
|
||||||
//private fields
|
//private fields
|
||||||
//JNIEnv* jmeClasses::env;
|
//JNIEnv* jmeClasses::env;
|
||||||
JavaVM* jmeClasses::vm;
|
JavaVM* jmeClasses::vm;
|
||||||
@ -103,7 +113,7 @@ void jmeClasses::initJavaClasses(JNIEnv* env) {
|
|||||||
// jmeClasses::env = env;
|
// jmeClasses::env = env;
|
||||||
env->GetJavaVM(&vm);
|
env->GetJavaVM(&vm);
|
||||||
|
|
||||||
PhysicsSpace = env->FindClass("com/jme3/bullet/PhysicsSpace");
|
PhysicsSpace = (jclass)env->NewGlobalRef(env->FindClass("com/jme3/bullet/PhysicsSpace"));
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
@ -117,7 +127,7 @@ void jmeClasses::initJavaClasses(JNIEnv* env) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicsGhostObject = env->FindClass("com/jme3/bullet/objects/PhysicsGhostObject");
|
PhysicsGhostObject = (jclass)env->NewGlobalRef(env->FindClass("com/jme3/bullet/objects/PhysicsGhostObject"));
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
@ -128,7 +138,7 @@ void jmeClasses::initJavaClasses(JNIEnv* env) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3f = env->FindClass("com/jme3/math/Vector3f");
|
Vector3f = (jclass)env->NewGlobalRef(env->FindClass("com/jme3/math/Vector3f"));
|
||||||
Vector3f_set = env->GetMethodID(Vector3f, "set", "(FFF)Lcom/jme3/math/Vector3f;");
|
Vector3f_set = env->GetMethodID(Vector3f, "set", "(FFF)Lcom/jme3/math/Vector3f;");
|
||||||
Vector3f_toArray = env->GetMethodID(Vector3f, "toArray", "([F)[F");
|
Vector3f_toArray = env->GetMethodID(Vector3f, "toArray", "([F)[F");
|
||||||
Vector3f_getX = env->GetMethodID(Vector3f, "getX", "()F");
|
Vector3f_getX = env->GetMethodID(Vector3f, "getX", "()F");
|
||||||
@ -138,7 +148,7 @@ void jmeClasses::initJavaClasses(JNIEnv* env) {
|
|||||||
Vector3f_y = env->GetFieldID(Vector3f, "y", "F");
|
Vector3f_y = env->GetFieldID(Vector3f, "y", "F");
|
||||||
Vector3f_z = env->GetFieldID(Vector3f, "z", "F");
|
Vector3f_z = env->GetFieldID(Vector3f, "z", "F");
|
||||||
|
|
||||||
Quaternion = env->FindClass("com/jme3/math/Quaternion");
|
Quaternion = (jclass)env->NewGlobalRef(env->FindClass("com/jme3/math/Quaternion"));
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
@ -153,7 +163,7 @@ void jmeClasses::initJavaClasses(JNIEnv* env) {
|
|||||||
Quaternion_z = env->GetFieldID(Quaternion, "z", "F");
|
Quaternion_z = env->GetFieldID(Quaternion, "z", "F");
|
||||||
Quaternion_w = env->GetFieldID(Quaternion, "w", "F");
|
Quaternion_w = env->GetFieldID(Quaternion, "w", "F");
|
||||||
|
|
||||||
Matrix3f = env->FindClass("com/jme3/math/Matrix3f");
|
Matrix3f = (jclass)env->NewGlobalRef(env->FindClass("com/jme3/math/Matrix3f"));
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
@ -174,7 +184,7 @@ void jmeClasses::initJavaClasses(JNIEnv* env) {
|
|||||||
Matrix3f_m21 = env->GetFieldID(Matrix3f, "m21", "F");
|
Matrix3f_m21 = env->GetFieldID(Matrix3f, "m21", "F");
|
||||||
Matrix3f_m22 = env->GetFieldID(Matrix3f, "m22", "F");
|
Matrix3f_m22 = env->GetFieldID(Matrix3f, "m22", "F");
|
||||||
|
|
||||||
DebugMeshCallback = env->FindClass("com/jme3/bullet/util/DebugMeshCallback");
|
DebugMeshCallback = (jclass)env->NewGlobalRef(env->FindClass("com/jme3/bullet/util/DebugMeshCallback"));
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
@ -185,6 +195,51 @@ void jmeClasses::initJavaClasses(JNIEnv* env) {
|
|||||||
env->Throw(env->ExceptionOccurred());
|
env->Throw(env->ExceptionOccurred());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PhysicsRay_Class = (jclass)env->NewGlobalRef(env->FindClass("com/jme3/bullet/collision/PhysicsRayTestResult"));
|
||||||
|
if (env->ExceptionCheck()) {
|
||||||
|
env->Throw(env->ExceptionOccurred());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PhysicsRay_newSingleResult = env->GetMethodID(PhysicsRay_Class,"<init>","()V");
|
||||||
|
if (env->ExceptionCheck()) {
|
||||||
|
env->Throw(env->ExceptionOccurred());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PhysicsRay_normalInWorldSpace = env->GetFieldID(PhysicsRay_Class,"hitNormalLocal","Lcom/jme3/math/Vector3f;");
|
||||||
|
if (env->ExceptionCheck()) {
|
||||||
|
env->Throw(env->ExceptionOccurred());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PhysicsRay_hitfraction = env->GetFieldID(PhysicsRay_Class,"hitFraction","F");
|
||||||
|
if (env->ExceptionCheck()) {
|
||||||
|
env->Throw(env->ExceptionOccurred());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PhysicsRay_collisionObject = env->GetFieldID(PhysicsRay_Class,"collisionObject","Lcom/jme3/bullet/collision/PhysicsCollisionObject;");
|
||||||
|
if (env->ExceptionCheck()) {
|
||||||
|
env->Throw(env->ExceptionOccurred());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PhysicsRay_listresult = env->FindClass("java/util/List");
|
||||||
|
PhysicsRay_listresult = (jclass)env->NewGlobalRef(PhysicsRay_listresult);
|
||||||
|
if (env->ExceptionCheck()) {
|
||||||
|
env->Throw(env->ExceptionOccurred());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PhysicsRay_addmethod = env->GetMethodID(PhysicsRay_listresult,"add","(Ljava/lang/Object;)Z");
|
||||||
|
if (env->ExceptionCheck()) {
|
||||||
|
env->Throw(env->ExceptionOccurred());
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void jmeClasses::throwNPE(JNIEnv* env) {
|
void jmeClasses::throwNPE(JNIEnv* env) {
|
||||||
|
@ -81,6 +81,14 @@ public:
|
|||||||
static jfieldID Matrix3f_m21;
|
static jfieldID Matrix3f_m21;
|
||||||
static jfieldID Matrix3f_m22;
|
static jfieldID Matrix3f_m22;
|
||||||
|
|
||||||
|
static jclass PhysicsRay_Class;
|
||||||
|
static jmethodID PhysicsRay_newSingleResult;
|
||||||
|
static jfieldID PhysicsRay_normalInWorldSpace;
|
||||||
|
static jfieldID PhysicsRay_hitfraction;
|
||||||
|
static jfieldID PhysicsRay_collisionObject;
|
||||||
|
static jclass PhysicsRay_listresult;
|
||||||
|
static jmethodID PhysicsRay_addmethod;
|
||||||
|
|
||||||
static jclass DebugMeshCallback;
|
static jclass DebugMeshCallback;
|
||||||
static jmethodID DebugMeshCallback_addVector;
|
static jmethodID DebugMeshCallback_addVector;
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "jmePhysicsSpace.h"
|
#include "jmePhysicsSpace.h"
|
||||||
#include "jmeBulletUtil.h"
|
#include "jmeBulletUtil.h"
|
||||||
#include "jmeUserPointer.h"
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -240,7 +239,7 @@ bool jmePhysicsSpace::contactProcessedCallback(btManifoldPoint &cp, void *body0,
|
|||||||
btCollisionObject* co1 = (btCollisionObject*) body1;
|
btCollisionObject* co1 = (btCollisionObject*) body1;
|
||||||
jmeUserPointer *up1 = (jmeUserPointer*) co1 -> getUserPointer();
|
jmeUserPointer *up1 = (jmeUserPointer*) co1 -> getUserPointer();
|
||||||
if (up0 != NULL) {
|
if (up0 != NULL) {
|
||||||
jmePhysicsSpace *dynamicsWorld = up0->space;
|
jmePhysicsSpace *dynamicsWorld = (jmePhysicsSpace *)up0->space;
|
||||||
if (dynamicsWorld != NULL) {
|
if (dynamicsWorld != NULL) {
|
||||||
JNIEnv* env = dynamicsWorld->getEnv();
|
JNIEnv* env = dynamicsWorld->getEnv();
|
||||||
jobject javaPhysicsSpace = env->NewLocalRef(dynamicsWorld->getJavaPhysicsSpace());
|
jobject javaPhysicsSpace = env->NewLocalRef(dynamicsWorld->getJavaPhysicsSpace());
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
#ifndef _Included_jmeUserPointer
|
|
||||||
#define _Included_jmeUserPointer
|
|
||||||
#include <jni.h>
|
|
||||||
class jmeUserPointer {
|
|
||||||
public:
|
|
||||||
jobject javaCollisionObject;
|
|
||||||
jint group;
|
|
||||||
jint groups;
|
|
||||||
jmePhysicsSpace *space;
|
|
||||||
};
|
|
||||||
#endif
|
|
Loading…
x
Reference in New Issue
Block a user