Home | History | Annotate | Download | only in bullet-native
      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_joints_ConeJoint.h"
     37 #include "jmeBulletUtil.h"
     38 
     39 #ifdef __cplusplus
     40 extern "C" {
     41 #endif
     42 
     43     /*
     44      * Class:     com_jme3_bullet_joints_ConeJoint
     45      * Method:    setLimit
     46      * Signature: (JFFF)V
     47      */
     48     JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_ConeJoint_setLimit
     49     (JNIEnv * env, jobject object, jlong jointId, jfloat swingSpan1, jfloat swingSpan2, jfloat twistSpan) {
     50         btConeTwistConstraint* joint = reinterpret_cast<btConeTwistConstraint*>(jointId);
     51         if (joint == NULL) {
     52             jclass newExc = env->FindClass("java/lang/NullPointerException");
     53             env->ThrowNew(newExc, "The native object does not exist.");
     54             return;
     55         }
     56         //TODO: extended setLimit!
     57         joint->setLimit(swingSpan1, swingSpan2, twistSpan);
     58     }
     59 
     60     /*
     61      * Class:     com_jme3_bullet_joints_ConeJoint
     62      * Method:    setAngularOnly
     63      * Signature: (JZ)V
     64      */
     65     JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_ConeJoint_setAngularOnly
     66     (JNIEnv * env, jobject object, jlong jointId, jboolean angularOnly) {
     67         btConeTwistConstraint* joint = reinterpret_cast<btConeTwistConstraint*>(jointId);
     68         if (joint == NULL) {
     69             jclass newExc = env->FindClass("java/lang/NullPointerException");
     70             env->ThrowNew(newExc, "The native object does not exist.");
     71             return;
     72         }
     73         joint->setAngularOnly(angularOnly);
     74     }
     75 
     76     /*
     77      * Class:     com_jme3_bullet_joints_ConeJoint
     78      * Method:    createJoint
     79      * Signature: (JJLcom/jme3/math/Vector3f;Lcom/jme3/math/Matrix3f;Lcom/jme3/math/Vector3f;Lcom/jme3/math/Matrix3f;)J
     80      */
     81     JNIEXPORT jlong JNICALL Java_com_jme3_bullet_joints_ConeJoint_createJoint
     82     (JNIEnv * env, jobject object, jlong bodyIdA, jlong bodyIdB, jobject pivotA, jobject rotA, jobject pivotB, jobject rotB) {
     83         jmeClasses::initJavaClasses(env);
     84         btRigidBody* bodyA = reinterpret_cast<btRigidBody*>(bodyIdA);
     85         btRigidBody* bodyB = reinterpret_cast<btRigidBody*>(bodyIdB);
     86         btMatrix3x3 mtx1 = btMatrix3x3();
     87         btMatrix3x3 mtx2 = btMatrix3x3();
     88         btTransform transA = btTransform(mtx1);
     89         jmeBulletUtil::convert(env, pivotA, &transA.getOrigin());
     90         jmeBulletUtil::convert(env, rotA, &transA.getBasis());
     91         btTransform transB = btTransform(mtx2);
     92         jmeBulletUtil::convert(env, pivotB, &transB.getOrigin());
     93         jmeBulletUtil::convert(env, rotB, &transB.getBasis());
     94         btConeTwistConstraint* joint = new btConeTwistConstraint(*bodyA, *bodyB, transA, transB);
     95         return reinterpret_cast<jlong>(joint);
     96     }
     97 
     98 #ifdef __cplusplus
     99 }
    100 #endif
    101