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 package com.jme3.bullet.joints;
33 
34 import com.jme3.bullet.objects.PhysicsRigidBody;
35 import com.jme3.math.Matrix3f;
36 import com.jme3.math.Vector3f;
37 
38 /**
39  * <i>From bullet manual:</i><br>
40  * This generic constraint can emulate a variety of standard constraints,
41  * by configuring each of the 6 degrees of freedom (dof).
42  * The first 3 dof axis are linear axis, which represent translation of rigidbodies,
43  * and the latter 3 dof axis represent the angular motion. Each axis can be either locked,
44  * free or limited. On construction of a new btGeneric6DofConstraint, all axis are locked.
45  * Afterwards the axis can be reconfigured. Note that several combinations that
46  * include free and/or limited angular degrees of freedom are undefined.
47  * @author normenhansen
48  */
49 public class SixDofSpringJoint extends SixDofJoint {
50 
51    final boolean       springEnabled[] = new boolean[6];
52    final float equilibriumPoint[] = new float[6];
53    final float springStiffness[] = new float[6];
54    final float springDamping[] = new float[6]; // between 0 and 1 (1 == no damping)
55 
SixDofSpringJoint()56     public SixDofSpringJoint() {
57     }
58 
59     /**
60      * @param pivotA local translation of the joint connection point in node A
61      * @param pivotB local translation of the joint connection point in node B
62      */
SixDofSpringJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB, Matrix3f rotA, Matrix3f rotB, boolean useLinearReferenceFrameA)63     public SixDofSpringJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB, Matrix3f rotA, Matrix3f rotB, boolean useLinearReferenceFrameA) {
64         super(nodeA, nodeB, pivotA, pivotB, rotA, rotB, useLinearReferenceFrameA);
65     }
enableSpring(int index, boolean onOff)66     public void enableSpring(int index, boolean onOff) {
67         enableSpring(objectId, index, onOff);
68     }
enableSpring(long objctId, int index, boolean onOff)69     native void enableSpring(long objctId, int index, boolean onOff);
70 
setStiffness(int index, float stiffness)71     public void setStiffness(int index, float stiffness) {
72         setStiffness(objectId, index, stiffness);
73     }
setStiffness(long objctId, int index, float stiffness)74     native void setStiffness(long objctId, int index, float stiffness);
75 
setDamping(int index, float damping)76     public void setDamping(int index, float damping) {
77         setDamping(objectId, index, damping);
78 
79     }
setDamping(long objctId, int index, float damping)80     native void setDamping(long objctId, int index, float damping);
setEquilibriumPoint()81     public void setEquilibriumPoint() { // set the current constraint position/orientation as an equilibrium point for all DOF
82         setEquilibriumPoint(objectId);
83     }
setEquilibriumPoint(long objctId)84     native void setEquilibriumPoint(long objctId);
setEquilibriumPoint(int index)85     public void setEquilibriumPoint(int index){ // set the current constraint position/orientation as an equilibrium point for given DOF
86         setEquilibriumPoint(objectId, index);
87     }
setEquilibriumPoint(long objctId, int index)88     native void setEquilibriumPoint(long objctId, int index);
89     @Override
createJoint(long objectIdA, long objectIdB, Vector3f pivotA, Matrix3f rotA, Vector3f pivotB, Matrix3f rotB, boolean useLinearReferenceFrameA)90     native long createJoint(long objectIdA, long objectIdB, Vector3f pivotA, Matrix3f rotA, Vector3f pivotB, Matrix3f rotB, boolean useLinearReferenceFrameA);
91 
92 }
93