/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_jme3_bullet_joints_motors_RotationalLimitMotor */

#ifndef _Included_com_jme3_bullet_joints_motors_RotationalLimitMotor
#define _Included_com_jme3_bullet_joints_motors_RotationalLimitMotor
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    getLoLimit
 * Signature: (J)F
 */
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_getLoLimit
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setLoLimit
 * Signature: (JF)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setLoLimit
  (JNIEnv *, jobject, jlong, jfloat);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    getHiLimit
 * Signature: (J)F
 */
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_getHiLimit
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setHiLimit
 * Signature: (JF)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setHiLimit
  (JNIEnv *, jobject, jlong, jfloat);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    getTargetVelocity
 * Signature: (J)F
 */
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_getTargetVelocity
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setTargetVelocity
 * Signature: (JF)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setTargetVelocity
  (JNIEnv *, jobject, jlong, jfloat);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    getMaxMotorForce
 * Signature: (J)F
 */
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_getMaxMotorForce
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setMaxMotorForce
 * Signature: (JF)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setMaxMotorForce
  (JNIEnv *, jobject, jlong, jfloat);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    getMaxLimitForce
 * Signature: (J)F
 */
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_getMaxLimitForce
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setMaxLimitForce
 * Signature: (JF)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setMaxLimitForce
  (JNIEnv *, jobject, jlong, jfloat);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    getDamping
 * Signature: (J)F
 */
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_getDamping
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setDamping
 * Signature: (JF)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setDamping
  (JNIEnv *, jobject, jlong, jfloat);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    getLimitSoftness
 * Signature: (J)F
 */
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_getLimitSoftness
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setLimitSoftness
 * Signature: (JF)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setLimitSoftness
  (JNIEnv *, jobject, jlong, jfloat);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    getERP
 * Signature: (J)F
 */
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_getERP
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setERP
 * Signature: (JF)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setERP
  (JNIEnv *, jobject, jlong, jfloat);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    getBounce
 * Signature: (J)F
 */
JNIEXPORT jfloat JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_getBounce
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setBounce
 * Signature: (JF)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setBounce
  (JNIEnv *, jobject, jlong, jfloat);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    isEnableMotor
 * Signature: (J)Z
 */
JNIEXPORT jboolean JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_isEnableMotor
  (JNIEnv *, jobject, jlong);

/*
 * Class:     com_jme3_bullet_joints_motors_RotationalLimitMotor
 * Method:    setEnableMotor
 * Signature: (JZ)V
 */
JNIEXPORT void JNICALL Java_com_jme3_bullet_joints_motors_RotationalLimitMotor_setEnableMotor
  (JNIEnv *, jobject, jlong, jboolean);

#ifdef __cplusplus
}
#endif
#endif
