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