1 /*
2  * Copyright (c) 2009-2010 jMonkeyEngine
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  *   notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in the
14  *   documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17  *   may be used to endorse or promote products derived from this software
18  *   without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 /**
34  * Author: Normen Hansen
35  */
36 #include "com_jme3_bullet_collision_PhysicsCollisionObject.h"
37 #include "jmeBulletUtil.h"
38 #include "jmePhysicsSpace.h"
39 
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43 
44     /*
45      * Class:     com_jme3_bullet_collision_PhysicsCollisionObject
46      * Method:    attachCollisionShape
47      * Signature: (JJ)V
48      */
Java_com_jme3_bullet_collision_PhysicsCollisionObject_attachCollisionShape(JNIEnv * env,jobject object,jlong objectId,jlong shapeId)49     JNIEXPORT void JNICALL Java_com_jme3_bullet_collision_PhysicsCollisionObject_attachCollisionShape
50     (JNIEnv * env, jobject object, jlong objectId, jlong shapeId) {
51         btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId);
52         if (collisionObject == NULL) {
53             jclass newExc = env->FindClass("java/lang/IllegalStateException");
54             env->ThrowNew(newExc, "The collision object does not exist.");
55             return;
56         }
57         btCollisionShape* collisionShape = reinterpret_cast<btCollisionShape*>(shapeId);
58         if (collisionShape == NULL) {
59             jclass newExc = env->FindClass("java/lang/IllegalStateException");
60             env->ThrowNew(newExc, "The collision shape does not exist.");
61             return;
62         }
63         collisionObject->setCollisionShape(collisionShape);
64     }
65 
66     /*
67      * Class:     com_jme3_bullet_collision_PhysicsCollisionObject
68      * Method:    finalizeNative
69      * Signature: (J)V
70      */
Java_com_jme3_bullet_collision_PhysicsCollisionObject_finalizeNative(JNIEnv * env,jobject object,jlong objectId)71     JNIEXPORT void JNICALL Java_com_jme3_bullet_collision_PhysicsCollisionObject_finalizeNative
72     (JNIEnv * env, jobject object, jlong objectId) {
73         btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId);
74         if (collisionObject == NULL) {
75             jclass newExc = env->FindClass("java/lang/NullPointerException");
76             env->ThrowNew(newExc, "The native object does not exist.");
77             return;
78         }
79         if (collisionObject -> getUserPointer() != NULL){
80             jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
81             delete(userPointer);
82         }
83         delete(collisionObject);
84     }
85     /*
86      * Class:     com_jme3_bullet_collision_PhysicsCollisionObject
87      * Method:    initUserPointer
88      * Signature: (JII)V
89      */
Java_com_jme3_bullet_collision_PhysicsCollisionObject_initUserPointer(JNIEnv * env,jobject object,jlong objectId,jint group,jint groups)90     JNIEXPORT void JNICALL Java_com_jme3_bullet_collision_PhysicsCollisionObject_initUserPointer
91       (JNIEnv *env, jobject object, jlong objectId, jint group, jint groups) {
92         btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId);
93         if (collisionObject == NULL) {
94             jclass newExc = env->FindClass("java/lang/NullPointerException");
95             env->ThrowNew(newExc, "The native object does not exist.");
96             return;
97         }
98         jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
99         if (userPointer != NULL) {
100 //            delete(userPointer);
101         }
102         userPointer = new jmeUserPointer();
103         userPointer -> javaCollisionObject = env->NewWeakGlobalRef(object);
104         userPointer -> group = group;
105         userPointer -> groups = groups;
106         userPointer -> space = NULL;
107         collisionObject -> setUserPointer(userPointer);
108     }
109     /*
110      * Class:     com_jme3_bullet_collision_PhysicsCollisionObject
111      * Method:    setCollisionGroup
112      * Signature: (JI)V
113      */
Java_com_jme3_bullet_collision_PhysicsCollisionObject_setCollisionGroup(JNIEnv * env,jobject object,jlong objectId,jint group)114     JNIEXPORT void JNICALL Java_com_jme3_bullet_collision_PhysicsCollisionObject_setCollisionGroup
115       (JNIEnv *env, jobject object, jlong objectId, jint group) {
116         btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId);
117         if (collisionObject == NULL) {
118             jclass newExc = env->FindClass("java/lang/NullPointerException");
119             env->ThrowNew(newExc, "The native object does not exist.");
120             return;
121         }
122         jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
123         if (userPointer != NULL){
124             userPointer -> group = group;
125         }
126     }
127     /*
128      * Class:     com_jme3_bullet_collision_PhysicsCollisionObject
129      * Method:    setCollideWithGroups
130      * Signature: (JI)V
131      */
Java_com_jme3_bullet_collision_PhysicsCollisionObject_setCollideWithGroups(JNIEnv * env,jobject object,jlong objectId,jint groups)132     JNIEXPORT void JNICALL Java_com_jme3_bullet_collision_PhysicsCollisionObject_setCollideWithGroups
133       (JNIEnv *env, jobject object, jlong objectId, jint groups) {
134         btCollisionObject* collisionObject = reinterpret_cast<btCollisionObject*>(objectId);
135         if (collisionObject == NULL) {
136             jclass newExc = env->FindClass("java/lang/NullPointerException");
137             env->ThrowNew(newExc, "The native object does not exist.");
138             return;
139         }
140         jmeUserPointer *userPointer = (jmeUserPointer*)collisionObject->getUserPointer();
141         if (userPointer != NULL){
142             userPointer -> groups = groups;
143         }
144     }
145 
146 #ifdef __cplusplus
147 }
148 #endif
149