BulletSim: add axis parameter for specifying enable, damping, and stiffness for spring constraints. Renumber parameter ops since I can as no one is using them yet.

varregion
Robert Adams 2013-08-22 16:31:17 -07:00
parent 30b3657a66
commit 7c54630a2d
4 changed files with 44 additions and 21 deletions

View File

@ -399,13 +399,15 @@ public class ExtendedPhysics : INonSharedRegionModule
[ScriptConstant]
public const int PHYS_PARAM_SOLVER_ITERATIONS = 14415;
[ScriptConstant]
public const int PHYS_PARAM_SPRING_DAMPING = 14416;
public const int PHYS_PARAM_SPRING_AXIS_ENABLE = 14416;
[ScriptConstant]
public const int PHYS_PARAM_SPRING_STIFFNESS = 14417;
public const int PHYS_PARAM_SPRING_DAMPING = 14417;
[ScriptConstant]
public const int PHYS_PARAM_LINK_TYPE = 14418;
public const int PHYS_PARAM_SPRING_STIFFNESS = 14418;
[ScriptConstant]
public const int PHYS_PARAM_LINK_TYPE = 14419;
public const int PHYS_PARAM_MAX = 14418;
public const int PHYS_PARAM_MAX = 14419;
// physChangeLinkParams(integer linkNum, [ PHYS_PARAM_*, value, PHYS_PARAM_*, value, ...])
[ScriptInvocation]

View File

@ -292,7 +292,7 @@ public enum ConstraintParamAxis : int
AXIS_ANGULAR_X,
AXIS_ANGULAR_Y,
AXIS_ANGULAR_Z,
AXIS_LINEAR_ALL = 20, // these last three added by BulletSim so we don't have to do zillions of calls
AXIS_LINEAR_ALL = 20, // added by BulletSim so we don't have to do zillions of calls
AXIS_ANGULAR_ALL,
AXIS_ALL
};

View File

@ -53,7 +53,7 @@ public sealed class BSConstraintSpring : BSConstraint6Dof
m_body1.ID, frame1Loc, frame1Rot, frame2Loc, frame2Rot, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies);
}
public bool SetEnable(int pIndex, bool pAxisEnable)
public bool SetAxisEnable(int pIndex, bool pAxisEnable)
{
PhysicsScene.DetailLog("{0},BSConstraintSpring.SetEnable,obj1ID={1},obj2ID={2},indx={3},enable={4}",
m_body1.ID, m_body1.ID, m_body2.ID, pIndex, pAxisEnable);

View File

@ -1,4 +1,4 @@
/*
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
@ -59,8 +59,9 @@ public sealed class BSLinksetConstraints : BSLinkset
public OMV.Vector3 frameInBloc;
public OMV.Quaternion frameInBrot;
// Spring
public float springDamping;
public float springStiffness;
public bool[] springAxisEnable;
public float[] springDamping;
public float[] springStiffness;
public BSLinkInfoConstraint(BSPrimLinkable pMember)
: base(pMember)
@ -90,8 +91,15 @@ public sealed class BSLinksetConstraints : BSLinkset
frameInArot = OMV.Quaternion.Identity;
frameInBloc = OMV.Vector3.Zero;
frameInBrot = OMV.Quaternion.Identity;
springDamping = -1f;
springStiffness = -1f;
springAxisEnable = new bool[6];
springDamping = new float[6];
springStiffness = new float[6];
for (int ii = 0; ii < springAxisEnable.Length; ii++)
{
springAxisEnable[ii] = false;
springDamping[ii] = BSAPITemplate.SPRING_NOT_SPECIFIED;
springStiffness[ii] = BSAPITemplate.SPRING_NOT_SPECIFIED;
}
member.PhysScene.DetailLog("{0},BSLinkInfoConstraint.ResetLink", member.LocalID);
}
@ -139,11 +147,13 @@ public sealed class BSLinksetConstraints : BSLinkset
}
for (int ii = 0; ii < 6; ii++)
{
if (springDamping != -1)
constrainSpring.SetDamping(ii, springDamping);
if (springStiffness != -1)
constrainSpring.SetStiffness(ii, springStiffness);
constrainSpring.SetAxisEnable(ii, springAxisEnable[ii]);
if (springDamping[ii] != BSAPITemplate.SPRING_NOT_SPECIFIED)
constrainSpring.SetDamping(ii, springDamping[ii]);
if (springStiffness[ii] != BSAPITemplate.SPRING_NOT_SPECIFIED)
constrainSpring.SetStiffness(ii, springStiffness[ii]);
}
constrainSpring.SetEquilibriumPoint(BSAPITemplate.SPRING_NOT_SPECIFIED, BSAPITemplate.SPRING_NOT_SPECIFIED);
}
break;
default:
@ -707,15 +717,26 @@ public sealed class BSLinksetConstraints : BSLinkset
linkInfo.solverIterations = valueFloat;
opIndex += 2;
break;
case ExtendedPhysics.PHYS_PARAM_SPRING_AXIS_ENABLE:
valueInt = (int)pParams[opIndex + 1];
valueBool = ((int)pParams[opIndex + 2] != 0);
if (valueInt >=0 && valueInt < linkInfo.springAxisEnable.Length)
linkInfo.springAxisEnable[valueInt] = valueBool;
opIndex += 3;
break;
case ExtendedPhysics.PHYS_PARAM_SPRING_DAMPING:
valueFloat = (float)pParams[opIndex + 1];
linkInfo.springDamping = valueFloat;
opIndex += 2;
valueInt = (int)pParams[opIndex + 1];
valueFloat = (float)pParams[opIndex + 2];
if (valueInt >=0 && valueInt < linkInfo.springDamping.Length)
linkInfo.springDamping[valueInt] = valueFloat;
opIndex += 3;
break;
case ExtendedPhysics.PHYS_PARAM_SPRING_STIFFNESS:
valueFloat = (float)pParams[opIndex + 1];
linkInfo.springStiffness = valueFloat;
opIndex += 2;
valueInt = (int)pParams[opIndex + 1];
valueFloat = (float)pParams[opIndex + 2];
if (valueInt >=0 && valueInt < linkInfo.springStiffness.Length)
linkInfo.springStiffness[valueInt] = valueFloat;
opIndex += 3;
break;
default:
break;