BulletSim: remove trailing white space to make git happier. No functional changes.

user_profiles
Robert Adams 2013-04-29 07:54:50 -07:00
parent ad1787770e
commit 92ee288d66
20 changed files with 152 additions and 152 deletions

View File

@ -75,7 +75,7 @@ private sealed class BulletBodyUnman : BulletBody
private sealed class BulletShapeUnman : BulletShape private sealed class BulletShapeUnman : BulletShape
{ {
public IntPtr ptr; public IntPtr ptr;
public BulletShapeUnman(IntPtr xx, BSPhysicsShapeType typ) public BulletShapeUnman(IntPtr xx, BSPhysicsShapeType typ)
: base() : base()
{ {
ptr = xx; ptr = xx;
@ -255,7 +255,7 @@ public override BulletShape CreateHullShape(BulletWorld world, int hullCount, fl
{ {
BulletWorldUnman worldu = world as BulletWorldUnman; BulletWorldUnman worldu = world as BulletWorldUnman;
return new BulletShapeUnman( return new BulletShapeUnman(
BSAPICPP.CreateHullShape2(worldu.ptr, hullCount, hulls), BSAPICPP.CreateHullShape2(worldu.ptr, hullCount, hulls),
BSPhysicsShapeType.SHAPE_HULL); BSPhysicsShapeType.SHAPE_HULL);
} }
@ -1503,7 +1503,7 @@ public static extern void DestroyObject2(IntPtr sim, IntPtr obj);
public static extern IntPtr CreateGroundPlaneShape2(uint id, float height, float collisionMargin); public static extern IntPtr CreateGroundPlaneShape2(uint id, float height, float collisionMargin);
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern IntPtr CreateTerrainShape2(uint id, Vector3 size, float minHeight, float maxHeight, public static extern IntPtr CreateTerrainShape2(uint id, Vector3 size, float minHeight, float maxHeight,
[MarshalAs(UnmanagedType.LPArray)] float[] heightMap, [MarshalAs(UnmanagedType.LPArray)] float[] heightMap,
float scaleFactor, float collisionMargin); float scaleFactor, float collisionMargin);

View File

@ -81,7 +81,7 @@ private sealed class BulletBodyXNA : BulletBody
private sealed class BulletShapeXNA : BulletShape private sealed class BulletShapeXNA : BulletShape
{ {
public CollisionShape shape; public CollisionShape shape;
public BulletShapeXNA(CollisionShape xx, BSPhysicsShapeType typ) public BulletShapeXNA(CollisionShape xx, BSPhysicsShapeType typ)
: base() : base()
{ {
shape = xx; shape = xx;
@ -137,8 +137,8 @@ private sealed class BulletConstraintXNA : BulletConstraint
internal int LastEntityProperty = 0; internal int LastEntityProperty = 0;
internal EntityProperties[] UpdatedObjects; internal EntityProperties[] UpdatedObjects;
internal Dictionary<uint, GhostObject> specialCollisionObjects; internal Dictionary<uint, GhostObject> specialCollisionObjects;
private static int m_collisionsThisFrame; private static int m_collisionsThisFrame;
private BSScene PhysicsScene { get; set; } private BSScene PhysicsScene { get; set; }
@ -151,7 +151,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="p"></param> /// <param name="p"></param>
/// <param name="p_2"></param> /// <param name="p_2"></param>
@ -174,7 +174,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world;
TypedConstraint constraint = (pConstraint as BulletConstraintXNA).constrain; TypedConstraint constraint = (pConstraint as BulletConstraintXNA).constrain;
world.AddConstraint(constraint, pDisableCollisionsBetweenLinkedObjects); world.AddConstraint(constraint, pDisableCollisionsBetweenLinkedObjects);
return true; return true;
} }
@ -300,7 +300,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
public override bool GetForceUpdateAllAabbs(BulletWorld pWorld) { public override bool GetForceUpdateAllAabbs(BulletWorld pWorld) {
DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world;
return world.GetForceUpdateAllAabbs(); return world.GetForceUpdateAllAabbs();
} }
public override void SetForceUpdateAllAabbs(BulletWorld pWorld, bool pForce) public override void SetForceUpdateAllAabbs(BulletWorld pWorld, bool pForce)
{ {
@ -404,7 +404,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
IndexedMatrix mat = IndexedMatrix.CreateFromQuaternion(vquaternion); IndexedMatrix mat = IndexedMatrix.CreateFromQuaternion(vquaternion);
mat._origin = vposition; mat._origin = vposition;
collisionObject.SetWorldTransform(mat); collisionObject.SetWorldTransform(mat);
} }
public override Vector3 GetPosition(BulletBody pCollisionObject) public override Vector3 GetPosition(BulletBody pCollisionObject)
@ -457,7 +457,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
{ {
CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody; CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody;
collisionObject.Activate(pforceactivation); collisionObject.Activate(pforceactivation);
} }
public override Quaternion GetOrientation(BulletBody pCollisionObject) public override Quaternion GetOrientation(BulletBody pCollisionObject)
@ -486,7 +486,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
{ {
CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody; CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody;
return collisionObject.GetCcdSweptSphereRadius(); return collisionObject.GetCcdSweptSphereRadius();
} }
public override IntPtr GetUserPointer(BulletBody pCollisionObject) public override IntPtr GetUserPointer(BulletBody pCollisionObject)
@ -559,8 +559,8 @@ private sealed class BulletConstraintXNA : BulletConstraint
} }
public override BulletConstraint Create6DofConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, public override BulletConstraint Create6DofConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2,
Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot, Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot,
bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies)
{ {
@ -604,7 +604,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="pWorld"></param> /// <param name="pWorld"></param>
/// <param name="pBody1"></param> /// <param name="pBody1"></param>
@ -824,7 +824,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
{ {
RigidBody body = (pBody as BulletBodyXNA).rigidBody; RigidBody body = (pBody as BulletBodyXNA).rigidBody;
float angularDamping = body.GetAngularDamping(); float angularDamping = body.GetAngularDamping();
body.SetDamping(lin_damping, angularDamping); body.SetDamping(lin_damping, angularDamping);
} }
public override float GetLinearDamping(BulletBody pBody) public override float GetLinearDamping(BulletBody pBody)
@ -907,7 +907,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
RigidBody bo = co as RigidBody; RigidBody bo = co as RigidBody;
if (bo == null) if (bo == null)
{ {
if (world.IsInWorld(co)) if (world.IsInWorld(co))
{ {
world.RemoveCollisionObject(co); world.RemoveCollisionObject(co);
@ -915,7 +915,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
} }
else else
{ {
if (world.IsInWorld(bo)) if (world.IsInWorld(bo))
{ {
world.RemoveRigidBody(bo); world.RemoveRigidBody(bo);
@ -947,7 +947,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
// TODO: Turn this from a reference copy to a Value Copy. // TODO: Turn this from a reference copy to a Value Copy.
BulletShapeXNA shape2 = new BulletShapeXNA(shape1, BSShapeTypeFromBroadPhaseNativeType(shape1.GetShapeType())); BulletShapeXNA shape2 = new BulletShapeXNA(shape1, BSShapeTypeFromBroadPhaseNativeType(shape1.GetShapeType()));
return shape2; return shape2;
} }
@ -957,7 +957,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
return false; return false;
} }
//(sim.ptr, shape.ptr, prim.LocalID, prim.RawPosition, prim.RawOrientation); //(sim.ptr, shape.ptr, prim.LocalID, prim.RawPosition, prim.RawOrientation);
public override BulletBody CreateBodyFromShape(BulletWorld pWorld, BulletShape pShape, uint pLocalID, Vector3 pRawPosition, Quaternion pRawOrientation) public override BulletBody CreateBodyFromShape(BulletWorld pWorld, BulletShape pShape, uint pLocalID, Vector3 pRawPosition, Quaternion pRawOrientation)
{ {
CollisionWorld world = (pWorld as BulletWorldXNA).world; CollisionWorld world = (pWorld as BulletWorldXNA).world;
@ -993,11 +993,11 @@ private sealed class BulletConstraintXNA : BulletConstraint
m_startWorldTransform = IndexedMatrix.Identity; m_startWorldTransform = IndexedMatrix.Identity;
*/ */
body.SetUserPointer(pLocalID); body.SetUserPointer(pLocalID);
return new BulletBodyXNA(pLocalID, body); return new BulletBodyXNA(pLocalID, body);
} }
public override BulletBody CreateBodyWithDefaultMotionState( BulletShape pShape, uint pLocalID, Vector3 pRawPosition, Quaternion pRawOrientation) public override BulletBody CreateBodyWithDefaultMotionState( BulletShape pShape, uint pLocalID, Vector3 pRawPosition, Quaternion pRawOrientation)
{ {
@ -1025,7 +1025,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
public override Vector3 GetAnisotripicFriction(BulletConstraint pconstrain) public override Vector3 GetAnisotripicFriction(BulletConstraint pconstrain)
{ {
/* TODO */ /* TODO */
return Vector3.Zero; return Vector3.Zero;
} }
public override Vector3 SetAnisotripicFriction(BulletConstraint pconstrain, Vector3 frict) { /* TODO */ return Vector3.Zero; } public override Vector3 SetAnisotripicFriction(BulletConstraint pconstrain, Vector3 frict) { /* TODO */ return Vector3.Zero; }
@ -1035,7 +1035,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
{ {
CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody; CollisionObject collisionObject = (pCollisionObject as BulletBodyXNA).rigidBody;
return collisionObject.IsStaticObject(); return collisionObject.IsStaticObject();
} }
public override bool IsKinematicObject(BulletBody pCollisionObject) public override bool IsKinematicObject(BulletBody pCollisionObject)
{ {
@ -1098,10 +1098,10 @@ private sealed class BulletConstraintXNA : BulletConstraint
return new BulletWorldXNA(1, PhysicsScene, BSAPIXNA.Initialize2(worldExtent, configparms, maxCollisions, ref collisionArray, maxUpdates, ref updateArray, null)); return new BulletWorldXNA(1, PhysicsScene, BSAPIXNA.Initialize2(worldExtent, configparms, maxCollisions, ref collisionArray, maxUpdates, ref updateArray, null));
} }
private static DiscreteDynamicsWorld Initialize2(Vector3 worldExtent, private static DiscreteDynamicsWorld Initialize2(Vector3 worldExtent,
ConfigurationParameters[] o, ConfigurationParameters[] o,
int mMaxCollisionsPerFrame, ref CollisionDesc[] collisionArray, int mMaxCollisionsPerFrame, ref CollisionDesc[] collisionArray,
int mMaxUpdatesPerFrame, ref EntityProperties[] updateArray, int mMaxUpdatesPerFrame, ref EntityProperties[] updateArray,
object mDebugLogCallbackHandle) object mDebugLogCallbackHandle)
{ {
CollisionWorld.WorldData.ParamData p = new CollisionWorld.WorldData.ParamData(); CollisionWorld.WorldData.ParamData p = new CollisionWorld.WorldData.ParamData();
@ -1138,9 +1138,9 @@ private sealed class BulletConstraintXNA : BulletConstraint
p.avatarCapsuleDepth = BSParam.AvatarCapsuleDepth; p.avatarCapsuleDepth = BSParam.AvatarCapsuleDepth;
p.avatarCapsuleHeight = BSParam.AvatarCapsuleHeight; p.avatarCapsuleHeight = BSParam.AvatarCapsuleHeight;
p.avatarContactProcessingThreshold = BSParam.AvatarContactProcessingThreshold; p.avatarContactProcessingThreshold = BSParam.AvatarContactProcessingThreshold;
p.vehicleAngularDamping = BSParam.VehicleAngularDamping; p.vehicleAngularDamping = BSParam.VehicleAngularDamping;
p.maxPersistantManifoldPoolSize = o[0].maxPersistantManifoldPoolSize; p.maxPersistantManifoldPoolSize = o[0].maxPersistantManifoldPoolSize;
p.maxCollisionAlgorithmPoolSize = o[0].maxCollisionAlgorithmPoolSize; p.maxCollisionAlgorithmPoolSize = o[0].maxCollisionAlgorithmPoolSize;
p.shouldDisableContactPoolDynamicAllocation = o[0].shouldDisableContactPoolDynamicAllocation; p.shouldDisableContactPoolDynamicAllocation = o[0].shouldDisableContactPoolDynamicAllocation;
@ -1160,7 +1160,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
p.linkConstraintSolverIterations = BSParam.LinkConstraintSolverIterations; p.linkConstraintSolverIterations = BSParam.LinkConstraintSolverIterations;
p.physicsLoggingFrames = o[0].physicsLoggingFrames; p.physicsLoggingFrames = o[0].physicsLoggingFrames;
DefaultCollisionConstructionInfo ccci = new DefaultCollisionConstructionInfo(); DefaultCollisionConstructionInfo ccci = new DefaultCollisionConstructionInfo();
DefaultCollisionConfiguration cci = new DefaultCollisionConfiguration(); DefaultCollisionConfiguration cci = new DefaultCollisionConfiguration();
CollisionDispatcher m_dispatcher = new CollisionDispatcher(cci); CollisionDispatcher m_dispatcher = new CollisionDispatcher(cci);
@ -1263,7 +1263,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
} }
} }
return ret; return ret;
} }
public override float GetAngularMotionDisc(BulletShape pShape) public override float GetAngularMotionDisc(BulletShape pShape)
@ -1353,10 +1353,10 @@ private sealed class BulletConstraintXNA : BulletConstraint
CollisionShape shape = (pShape as BulletShapeXNA).shape; CollisionShape shape = (pShape as BulletShapeXNA).shape;
gObj.SetCollisionShape(shape); gObj.SetCollisionShape(shape);
gObj.SetUserPointer(pLocalID); gObj.SetUserPointer(pLocalID);
if (specialCollisionObjects.ContainsKey(pLocalID)) if (specialCollisionObjects.ContainsKey(pLocalID))
specialCollisionObjects[pLocalID] = gObj; specialCollisionObjects[pLocalID] = gObj;
else else
specialCollisionObjects.Add(pLocalID, gObj); specialCollisionObjects.Add(pLocalID, gObj);
// TODO: Add to Special CollisionObjects! // TODO: Add to Special CollisionObjects!
@ -1447,8 +1447,8 @@ private sealed class BulletConstraintXNA : BulletConstraint
return new BulletShapeXNA(ret, BSShapeTypeFromBroadPhaseNativeType(ret.GetShapeType())); return new BulletShapeXNA(ret, BSShapeTypeFromBroadPhaseNativeType(ret.GetShapeType()));
} }
public override BulletShape GetChildShapeFromCompoundShapeIndex(BulletShape cShape, int indx) { public override BulletShape GetChildShapeFromCompoundShapeIndex(BulletShape cShape, int indx) {
if (cShape == null) if (cShape == null)
return null; return null;
CompoundShape compoundShape = (cShape as BulletShapeXNA).shape as CompoundShape; CompoundShape compoundShape = (cShape as BulletShapeXNA).shape as CompoundShape;
@ -1456,7 +1456,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
BulletShape retShape = new BulletShapeXNA(shape, BSShapeTypeFromBroadPhaseNativeType(shape.GetShapeType())); BulletShape retShape = new BulletShapeXNA(shape, BSShapeTypeFromBroadPhaseNativeType(shape.GetShapeType()));
return retShape; return retShape;
} }
public BSPhysicsShapeType BSShapeTypeFromBroadPhaseNativeType(BroadphaseNativeTypes pin) public BSPhysicsShapeType BSShapeTypeFromBroadPhaseNativeType(BroadphaseNativeTypes pin)
@ -1598,8 +1598,8 @@ private sealed class BulletConstraintXNA : BulletConstraint
return new BulletShapeXNA(m_planeshape, BSPhysicsShapeType.SHAPE_GROUNDPLANE); return new BulletShapeXNA(m_planeshape, BSPhysicsShapeType.SHAPE_GROUNDPLANE);
} }
public override BulletConstraint Create6DofSpringConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, public override BulletConstraint Create6DofSpringConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2,
Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot, Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot,
bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies)
{ {
@ -1745,7 +1745,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
{ {
DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world;
CompoundShape compoundshape = new CompoundShape(false); CompoundShape compoundshape = new CompoundShape(false);
compoundshape.SetMargin(world.WorldSettings.Params.collisionMargin); compoundshape.SetMargin(world.WorldSettings.Params.collisionMargin);
int ii = 1; int ii = 1;
@ -1761,7 +1761,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
int ender = ((ii + 4) + (vertexCount*3)); int ender = ((ii + 4) + (vertexCount*3));
for (int iii = ii + 4; iii < ender; iii+=3) for (int iii = ii + 4; iii < ender; iii+=3)
{ {
virts.Add(new IndexedVector3(pConvHulls[iii], pConvHulls[iii + 1], pConvHulls[iii +2])); virts.Add(new IndexedVector3(pConvHulls[iii], pConvHulls[iii + 1], pConvHulls[iii +2]));
} }
ConvexHullShape convexShape = new ConvexHullShape(virts, vertexCount); ConvexHullShape convexShape = new ConvexHullShape(virts, vertexCount);
@ -1769,7 +1769,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
compoundshape.AddChildShape(ref childTrans, convexShape); compoundshape.AddChildShape(ref childTrans, convexShape);
ii += (vertexCount*3 + 4); ii += (vertexCount*3 + 4);
} }
return new BulletShapeXNA(compoundshape, BSPhysicsShapeType.SHAPE_HULL); return new BulletShapeXNA(compoundshape, BSPhysicsShapeType.SHAPE_HULL);
} }
@ -1791,13 +1791,13 @@ private sealed class BulletConstraintXNA : BulletConstraint
public override BulletShape CreateMeshShape(BulletWorld pWorld, int pIndicesCount, int[] indices, int pVerticesCount, float[] verticesAsFloats) public override BulletShape CreateMeshShape(BulletWorld pWorld, int pIndicesCount, int[] indices, int pVerticesCount, float[] verticesAsFloats)
{ {
//DumpRaw(indices,verticesAsFloats,pIndicesCount,pVerticesCount); //DumpRaw(indices,verticesAsFloats,pIndicesCount,pVerticesCount);
for (int iter = 0; iter < pVerticesCount; iter++) for (int iter = 0; iter < pVerticesCount; iter++)
{ {
if (verticesAsFloats[iter] > 0 && verticesAsFloats[iter] < 0.0001) verticesAsFloats[iter] = 0; if (verticesAsFloats[iter] > 0 && verticesAsFloats[iter] < 0.0001) verticesAsFloats[iter] = 0;
if (verticesAsFloats[iter] < 0 && verticesAsFloats[iter] > -0.0001) verticesAsFloats[iter] = 0; if (verticesAsFloats[iter] < 0 && verticesAsFloats[iter] > -0.0001) verticesAsFloats[iter] = 0;
} }
ObjectArray<int> indicesarr = new ObjectArray<int>(indices); ObjectArray<int> indicesarr = new ObjectArray<int>(indices);
ObjectArray<float> vertices = new ObjectArray<float>(verticesAsFloats); ObjectArray<float> vertices = new ObjectArray<float>(verticesAsFloats);
DumpRaw(indicesarr,vertices,pIndicesCount,pVerticesCount); DumpRaw(indicesarr,vertices,pIndicesCount,pVerticesCount);
@ -1811,7 +1811,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
mesh.m_vertexStride = 3; mesh.m_vertexStride = 3;
mesh.m_vertexType = PHY_ScalarType.PHY_FLOAT; mesh.m_vertexType = PHY_ScalarType.PHY_FLOAT;
mesh.m_triangleIndexStride = 3; mesh.m_triangleIndexStride = 3;
TriangleIndexVertexArray tribuilder = new TriangleIndexVertexArray(); TriangleIndexVertexArray tribuilder = new TriangleIndexVertexArray();
tribuilder.AddIndexedMesh(mesh, PHY_ScalarType.PHY_INTEGER); tribuilder.AddIndexedMesh(mesh, PHY_ScalarType.PHY_INTEGER);
BvhTriangleMeshShape meshShape = new BvhTriangleMeshShape(tribuilder, true,true); BvhTriangleMeshShape meshShape = new BvhTriangleMeshShape(tribuilder, true,true);
@ -1822,7 +1822,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
} }
public static void DumpRaw(ObjectArray<int>indices, ObjectArray<float> vertices, int pIndicesCount,int pVerticesCount ) public static void DumpRaw(ObjectArray<int>indices, ObjectArray<float> vertices, int pIndicesCount,int pVerticesCount )
{ {
String fileName = "objTest3.raw"; String fileName = "objTest3.raw";
String completePath = System.IO.Path.Combine(Util.configDir(), fileName); String completePath = System.IO.Path.Combine(Util.configDir(), fileName);
StreamWriter sw = new StreamWriter(completePath); StreamWriter sw = new StreamWriter(completePath);
@ -1848,7 +1848,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
string s = vertices[indices[i * 3]].ToString("0.0000"); string s = vertices[indices[i * 3]].ToString("0.0000");
s += " " + vertices[indices[i * 3 + 1]].ToString("0.0000"); s += " " + vertices[indices[i * 3 + 1]].ToString("0.0000");
s += " " + vertices[indices[i * 3 + 2]].ToString("0.0000"); s += " " + vertices[indices[i * 3 + 2]].ToString("0.0000");
sw.Write(s + "\n"); sw.Write(s + "\n");
} }
@ -1870,7 +1870,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
mesh.m_vertexStride = 3; mesh.m_vertexStride = 3;
mesh.m_vertexType = PHY_ScalarType.PHY_FLOAT; mesh.m_vertexType = PHY_ScalarType.PHY_FLOAT;
mesh.m_triangleIndexStride = 3; mesh.m_triangleIndexStride = 3;
TriangleIndexVertexArray tribuilder = new TriangleIndexVertexArray(); TriangleIndexVertexArray tribuilder = new TriangleIndexVertexArray();
tribuilder.AddIndexedMesh(mesh, PHY_ScalarType.PHY_INTEGER); tribuilder.AddIndexedMesh(mesh, PHY_ScalarType.PHY_INTEGER);
@ -1901,7 +1901,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
sw.Close(); sw.Close();
} }
public override BulletShape CreateTerrainShape(uint id, Vector3 size, float minHeight, float maxHeight, float[] heightMap, public override BulletShape CreateTerrainShape(uint id, Vector3 size, float minHeight, float maxHeight, float[] heightMap,
float scaleFactor, float collisionMargin) float scaleFactor, float collisionMargin)
{ {
const int upAxis = 2; const int upAxis = 2;
@ -1943,14 +1943,14 @@ private sealed class BulletConstraintXNA : BulletConstraint
/* TODO */ /* TODO */
updatedEntityCount = 0; updatedEntityCount = 0;
collidersCount = 0; collidersCount = 0;
int ret = PhysicsStep2(world,timeStep,maxSubSteps,fixedTimeStep,out updatedEntityCount,out world.physicsScene.m_updateArray, out collidersCount, out world.physicsScene.m_collisionArray); int ret = PhysicsStep2(world,timeStep,maxSubSteps,fixedTimeStep,out updatedEntityCount,out world.physicsScene.m_updateArray, out collidersCount, out world.physicsScene.m_collisionArray);
return ret; return ret;
} }
private int PhysicsStep2(BulletWorld pWorld, float timeStep, int m_maxSubSteps, float m_fixedTimeStep, private int PhysicsStep2(BulletWorld pWorld, float timeStep, int m_maxSubSteps, float m_fixedTimeStep,
out int updatedEntityCount, out EntityProperties[] updatedEntities, out int updatedEntityCount, out EntityProperties[] updatedEntities,
out int collidersCount, out CollisionDesc[] colliders) out int collidersCount, out CollisionDesc[] colliders)
{ {
@ -1959,24 +1959,24 @@ private sealed class BulletConstraintXNA : BulletConstraint
return epic; return epic;
} }
private int PhysicsStepint(BulletWorld pWorld,float timeStep, int m_maxSubSteps, float m_fixedTimeStep, out int updatedEntityCount, private int PhysicsStepint(BulletWorld pWorld,float timeStep, int m_maxSubSteps, float m_fixedTimeStep, out int updatedEntityCount,
out EntityProperties[] updatedEntities, out int collidersCount, out CollisionDesc[] colliders, int maxCollisions, int maxUpdates) out EntityProperties[] updatedEntities, out int collidersCount, out CollisionDesc[] colliders, int maxCollisions, int maxUpdates)
{ {
int numSimSteps = 0; int numSimSteps = 0;
Array.Clear(UpdatedObjects, 0, UpdatedObjects.Length); Array.Clear(UpdatedObjects, 0, UpdatedObjects.Length);
Array.Clear(UpdatedCollisions, 0, UpdatedCollisions.Length); Array.Clear(UpdatedCollisions, 0, UpdatedCollisions.Length);
LastEntityProperty=0; LastEntityProperty=0;
LastCollisionDesc=0; LastCollisionDesc=0;
updatedEntityCount = 0; updatedEntityCount = 0;
collidersCount = 0; collidersCount = 0;
if (pWorld is BulletWorldXNA) if (pWorld is BulletWorldXNA)
{ {
@ -2033,7 +2033,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
collidersCount = LastCollisionDesc; collidersCount = LastCollisionDesc;
colliders = UpdatedCollisions; colliders = UpdatedCollisions;
} }
else else
@ -2041,15 +2041,15 @@ private sealed class BulletConstraintXNA : BulletConstraint
//if (updatedEntities is null) //if (updatedEntities is null)
//updatedEntities = new List<BulletXNA.EntityProperties>(); //updatedEntities = new List<BulletXNA.EntityProperties>();
//updatedEntityCount = 0; //updatedEntityCount = 0;
//collidersCount = 0; //collidersCount = 0;
updatedEntities = new EntityProperties[0]; updatedEntities = new EntityProperties[0];
colliders = new CollisionDesc[0]; colliders = new CollisionDesc[0];
} }
return numSimSteps; return numSimSteps;
} }
@ -2057,7 +2057,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
{ {
IOverlappingPairCache cache = obj.GetOverlappingPairCache(); IOverlappingPairCache cache = obj.GetOverlappingPairCache();
ObjectArray<BroadphasePair> pairs = cache.GetOverlappingPairArray(); ObjectArray<BroadphasePair> pairs = cache.GetOverlappingPairArray();
DiscreteDynamicsWorld world = (PhysicsScene.World as BulletWorldXNA).world; DiscreteDynamicsWorld world = (PhysicsScene.World as BulletWorldXNA).world;
PersistentManifoldArray manifoldArray = new PersistentManifoldArray(); PersistentManifoldArray manifoldArray = new PersistentManifoldArray();
BroadphasePair collisionPair; BroadphasePair collisionPair;
@ -2069,7 +2069,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
ManifoldPoint pt; ManifoldPoint pt;
int numPairs = pairs.Count; int numPairs = pairs.Count;
for (int i = 0; i < numPairs; i++) for (int i = 0; i < numPairs; i++)
{ {
manifoldArray.Clear(); manifoldArray.Clear();
@ -2078,7 +2078,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
collisionPair = world.GetPairCache().FindPair(pairs[i].m_pProxy0, pairs[i].m_pProxy1); collisionPair = world.GetPairCache().FindPair(pairs[i].m_pProxy0, pairs[i].m_pProxy1);
if (collisionPair == null) if (collisionPair == null)
continue; continue;
collisionPair.m_algorithm.GetAllContactManifolds(manifoldArray); collisionPair.m_algorithm.GetAllContactManifolds(manifoldArray);
for (int j = 0; j < manifoldArray.Count; j++) for (int j = 0; j < manifoldArray.Count; j++)
{ {
@ -2101,7 +2101,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
} }
private static void RecordCollision(BSAPIXNA world, CollisionObject objA, CollisionObject objB, IndexedVector3 contact, IndexedVector3 norm, float penetration) private static void RecordCollision(BSAPIXNA world, CollisionObject objA, CollisionObject objB, IndexedVector3 contact, IndexedVector3 norm, float penetration)
{ {
IndexedVector3 contactNormal = norm; IndexedVector3 contactNormal = norm;
if ((objA.GetCollisionFlags() & BulletXNA.BulletCollision.CollisionFlags.BS_WANTS_COLLISIONS) == 0 && if ((objA.GetCollisionFlags() & BulletXNA.BulletCollision.CollisionFlags.BS_WANTS_COLLISIONS) == 0 &&
(objB.GetCollisionFlags() & BulletXNA.BulletCollision.CollisionFlags.BS_WANTS_COLLISIONS) == 0) (objB.GetCollisionFlags() & BulletXNA.BulletCollision.CollisionFlags.BS_WANTS_COLLISIONS) == 0)
@ -2171,11 +2171,11 @@ private sealed class BulletConstraintXNA : BulletConstraint
if (NotMe is BulletBodyXNA && NotMe.HasPhysicalBody) if (NotMe is BulletBodyXNA && NotMe.HasPhysicalBody)
{ {
CollisionObject AvoidBody = (NotMe as BulletBodyXNA).body; CollisionObject AvoidBody = (NotMe as BulletBodyXNA).body;
IndexedVector3 rOrigin = new IndexedVector3(_RayOrigin.X, _RayOrigin.Y, _RayOrigin.Z); IndexedVector3 rOrigin = new IndexedVector3(_RayOrigin.X, _RayOrigin.Y, _RayOrigin.Z);
IndexedVector3 rEnd = new IndexedVector3(_RayOrigin.X, _RayOrigin.Y, _RayOrigin.Z - pRayHeight); IndexedVector3 rEnd = new IndexedVector3(_RayOrigin.X, _RayOrigin.Y, _RayOrigin.Z - pRayHeight);
using ( using (
ClosestNotMeRayResultCallback rayCallback = ClosestNotMeRayResultCallback rayCallback =
new ClosestNotMeRayResultCallback(rOrigin, rEnd, AvoidBody) new ClosestNotMeRayResultCallback(rOrigin, rEnd, AvoidBody)
) )
{ {
@ -2191,9 +2191,9 @@ private sealed class BulletConstraintXNA : BulletConstraint
return false; return false;
} }
} }
public class SimMotionState : DefaultMotionState public class SimMotionState : DefaultMotionState
{ {
@ -2286,12 +2286,12 @@ private sealed class BulletConstraintXNA : BulletConstraint
m_lastProperties = m_properties; m_lastProperties = m_properties;
if (m_world.LastEntityProperty < m_world.UpdatedObjects.Length) if (m_world.LastEntityProperty < m_world.UpdatedObjects.Length)
m_world.UpdatedObjects[m_world.LastEntityProperty++]=(m_properties); m_world.UpdatedObjects[m_world.LastEntityProperty++]=(m_properties);
//(*m_updatesThisFrame)[m_properties.ID] = &m_properties; //(*m_updatesThisFrame)[m_properties.ID] = &m_properties;
} }
} }
public override void SetRigidBody(RigidBody body) public override void SetRigidBody(RigidBody body)
@ -2314,7 +2314,7 @@ private sealed class BulletConstraintXNA : BulletConstraint
(((v1.Z - nEpsilon) < v2.Z) && (v2.Z < (v1.Z + nEpsilon))) && (((v1.Z - nEpsilon) < v2.Z) && (v2.Z < (v1.Z + nEpsilon))) &&
(((v1.W - nEpsilon) < v2.W) && (v2.W < (v1.W + nEpsilon))); (((v1.W - nEpsilon) < v2.W) && (v2.W < (v1.W + nEpsilon)));
} }
} }
} }

View File

@ -115,7 +115,7 @@ public class BSActorAvatarMove : BSActor
if (m_velocityMotor == null) if (m_velocityMotor == null)
{ {
// Infinite decay and timescale values so motor only changes current to target values. // Infinite decay and timescale values so motor only changes current to target values.
m_velocityMotor = new BSVMotor("BSCharacter.Velocity", m_velocityMotor = new BSVMotor("BSCharacter.Velocity",
0.2f, // time scale 0.2f, // time scale
BSMotor.Infinite, // decay time scale BSMotor.Infinite, // decay time scale
BSMotor.InfiniteVector, // friction timescale BSMotor.InfiniteVector, // friction timescale

View File

@ -63,7 +63,7 @@ public class BSActorLockAxis : BSActor
// BSActor.Refresh() // BSActor.Refresh()
public override void Refresh() public override void Refresh()
{ {
m_physicsScene.DetailLog("{0},BSActorLockAxis,refresh,lockedAxis={1},enabled={2},pActive={3}", m_physicsScene.DetailLog("{0},BSActorLockAxis,refresh,lockedAxis={1},enabled={2},pActive={3}",
m_controllingPrim.LocalID, m_controllingPrim.LockedAxis, Enabled, m_controllingPrim.IsPhysicallyActive); m_controllingPrim.LocalID, m_controllingPrim.LockedAxis, Enabled, m_controllingPrim.IsPhysicallyActive);
// If all the axis are free, we don't need to exist // If all the axis are free, we don't need to exist
if (m_controllingPrim.LockedAxis == m_controllingPrim.LockedAxisFree) if (m_controllingPrim.LockedAxis == m_controllingPrim.LockedAxisFree)

View File

@ -117,7 +117,7 @@ public class BSActorCollection
/// Each physical object can have 'actors' who are pushing the object around. /// Each physical object can have 'actors' who are pushing the object around.
/// This can be used for hover, locking axis, making vehicles, etc. /// This can be used for hover, locking axis, making vehicles, etc.
/// Each physical object can have multiple actors acting on it. /// Each physical object can have multiple actors acting on it.
/// ///
/// An actor usually registers itself with physics scene events (pre-step action) /// An actor usually registers itself with physics scene events (pre-step action)
/// and modifies the parameters on the host physical object. /// and modifies the parameters on the host physical object.
/// </summary> /// </summary>

View File

@ -298,7 +298,7 @@ public abstract class BSAPITemplate
{ {
// Returns the name of the underlying Bullet engine // Returns the name of the underlying Bullet engine
public abstract string BulletEngineName { get; } public abstract string BulletEngineName { get; }
public abstract string BulletEngineVersion { get; protected set;} public abstract string BulletEngineVersion { get; protected set;}
// Initialization and simulation // Initialization and simulation
public abstract BulletWorld Initialize(Vector3 maxPosition, ConfigurationParameters parms, public abstract BulletWorld Initialize(Vector3 maxPosition, ConfigurationParameters parms,
@ -373,7 +373,7 @@ public abstract void DestroyObject(BulletWorld sim, BulletBody obj);
// ===================================================================================== // =====================================================================================
public abstract BulletShape CreateGroundPlaneShape(UInt32 id, float height, float collisionMargin); public abstract BulletShape CreateGroundPlaneShape(UInt32 id, float height, float collisionMargin);
public abstract BulletShape CreateTerrainShape(UInt32 id, Vector3 size, float minHeight, float maxHeight, float[] heightMap, public abstract BulletShape CreateTerrainShape(UInt32 id, Vector3 size, float minHeight, float maxHeight, float[] heightMap,
float scaleFactor, float collisionMargin); float scaleFactor, float collisionMargin);
// ===================================================================================== // =====================================================================================
@ -388,7 +388,7 @@ public abstract BulletConstraint Create6DofConstraintToPoint(BulletWorld world,
bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
public abstract BulletConstraint Create6DofConstraintFixed(BulletWorld world, BulletBody obj1, public abstract BulletConstraint Create6DofConstraintFixed(BulletWorld world, BulletBody obj1,
Vector3 frameInBloc, Quaternion frameInBrot, Vector3 frameInBloc, Quaternion frameInBrot,
bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies); bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies);
public abstract BulletConstraint Create6DofSpringConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, public abstract BulletConstraint Create6DofSpringConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,

View File

@ -371,7 +371,7 @@ public sealed class BSCharacter : BSPhysObject
public override float Mass { get { return _mass; } } public override float Mass { get { return _mass; } }
// used when we only want this prim's mass and not the linkset thing // used when we only want this prim's mass and not the linkset thing
public override float RawMass { public override float RawMass {
get {return _mass; } get {return _mass; }
} }
public override void UpdatePhysicalMassProperties(float physMass, bool inWorld) public override void UpdatePhysicalMassProperties(float physMass, bool inWorld)
@ -586,7 +586,7 @@ public sealed class BSCharacter : BSPhysObject
} }
public override float ForceBuoyancy { public override float ForceBuoyancy {
get { return _buoyancy; } get { return _buoyancy; }
set { set {
PhysScene.AssertInTaintTime("BSCharacter.ForceBuoyancy"); PhysScene.AssertInTaintTime("BSCharacter.ForceBuoyancy");
_buoyancy = value; _buoyancy = value;
@ -647,7 +647,7 @@ public sealed class BSCharacter : BSPhysObject
private OMV.Vector3 ComputeAvatarScale(OMV.Vector3 size) private OMV.Vector3 ComputeAvatarScale(OMV.Vector3 size)
{ {
OMV.Vector3 newScale; OMV.Vector3 newScale;
// Bullet's capsule total height is the "passed height + radius * 2"; // Bullet's capsule total height is the "passed height + radius * 2";
// The base capsule is 1 diameter and 2 height (passed radius=0.5, passed height = 1) // The base capsule is 1 diameter and 2 height (passed radius=0.5, passed height = 1)
// The number we pass in for 'scaling' is the multiplier to get that base // The number we pass in for 'scaling' is the multiplier to get that base

View File

@ -45,7 +45,7 @@ public sealed class BSConstraintHinge : BSConstraint
m_body1 = obj1; m_body1 = obj1;
m_body2 = obj2; m_body2 = obj2;
m_constraint = PhysicsScene.PE.CreateHingeConstraint(world, obj1, obj2, m_constraint = PhysicsScene.PE.CreateHingeConstraint(world, obj1, obj2,
pivotInA, pivotInB, axisInA, axisInB, pivotInA, pivotInB, axisInA, axisInB,
useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies); useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies);
m_enabled = true; m_enabled = true;
} }

View File

@ -1019,7 +1019,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
Vector3 origVelW = VehicleVelocity; // DEBUG DEBUG Vector3 origVelW = VehicleVelocity; // DEBUG DEBUG
VehicleVelocity /= VehicleVelocity.Length(); VehicleVelocity /= VehicleVelocity.Length();
VehicleVelocity *= BSParam.VehicleMaxLinearVelocity; VehicleVelocity *= BSParam.VehicleMaxLinearVelocity;
VDetailLog("{0}, MoveLinear,clampMax,origVelW={1},lenSq={2},maxVelSq={3},,newVelW={4}", VDetailLog("{0}, MoveLinear,clampMax,origVelW={1},lenSq={2},maxVelSq={3},,newVelW={4}",
ControllingPrim.LocalID, origVelW, newVelocityLengthSq, BSParam.VehicleMaxLinearVelocitySquared, VehicleVelocity); ControllingPrim.LocalID, origVelW, newVelocityLengthSq, BSParam.VehicleMaxLinearVelocitySquared, VehicleVelocity);
} }
else if (newVelocityLengthSq < 0.001f) else if (newVelocityLengthSq < 0.001f)
@ -1094,7 +1094,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
if (VehiclePosition.Z > m_VhoverTargetHeight) if (VehiclePosition.Z > m_VhoverTargetHeight)
m_VhoverTargetHeight = VehiclePosition.Z; m_VhoverTargetHeight = VehiclePosition.Z;
} }
if ((m_flags & VehicleFlag.LOCK_HOVER_HEIGHT) != 0) if ((m_flags & VehicleFlag.LOCK_HOVER_HEIGHT) != 0)
{ {
if (Math.Abs(VehiclePosition.Z - m_VhoverTargetHeight) > 0.2f) if (Math.Abs(VehiclePosition.Z - m_VhoverTargetHeight) > 0.2f)
@ -1188,7 +1188,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
// used with conjunction with banking: the strength of the banking will decay when the // used with conjunction with banking: the strength of the banking will decay when the
// vehicle no longer experiences collisions. The decay timescale is the same as // vehicle no longer experiences collisions. The decay timescale is the same as
// VEHICLE_BANKING_TIMESCALE. This is to help prevent ground vehicles from steering // VEHICLE_BANKING_TIMESCALE. This is to help prevent ground vehicles from steering
// when they are in mid jump. // when they are in mid jump.
// TODO: this code is wrong. Also, what should it do for boats (height from water)? // TODO: this code is wrong. Also, what should it do for boats (height from water)?
// This is just using the ground and a general collision check. Should really be using // This is just using the ground and a general collision check. Should really be using
// a downward raycast to find what is below. // a downward raycast to find what is below.
@ -1254,7 +1254,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
VehicleAddForce(appliedGravity); VehicleAddForce(appliedGravity);
VDetailLog("{0}, MoveLinear,applyGravity,vehGrav={1},collid={2},fudge={3},mass={4},appliedForce={3}", VDetailLog("{0}, MoveLinear,applyGravity,vehGrav={1},collid={2},fudge={3},mass={4},appliedForce={3}",
ControllingPrim.LocalID, m_VehicleGravity, ControllingPrim.LocalID, m_VehicleGravity,
ControllingPrim.IsColliding, BSParam.VehicleGroundGravityFudge, m_vehicleMass, appliedGravity); ControllingPrim.IsColliding, BSParam.VehicleGroundGravityFudge, m_vehicleMass, appliedGravity);
} }
@ -1330,7 +1330,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
// From http://wiki.secondlife.com/wiki/LlSetVehicleFlags : // From http://wiki.secondlife.com/wiki/LlSetVehicleFlags :
// This flag prevents linear deflection parallel to world z-axis. This is useful // This flag prevents linear deflection parallel to world z-axis. This is useful
// for preventing ground vehicles with large linear deflection, like bumper cars, // for preventing ground vehicles with large linear deflection, like bumper cars,
// from climbing their linear deflection into the sky. // from climbing their linear deflection into the sky.
// That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement // That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement
// TODO: This is here because this is where ODE put it but documentation says it // TODO: This is here because this is where ODE put it but documentation says it
// is a linear effect. Where should this check go? // is a linear effect. Where should this check go?
@ -1463,7 +1463,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
VehicleRotationalVelocity += (vertContributionV * VehicleOrientation); VehicleRotationalVelocity += (vertContributionV * VehicleOrientation);
VDetailLog("{0}, MoveAngular,verticalAttraction,,origRotVW={1},vertError={2},unscaledV={3},eff={4},ts={5},vertContribV={6}", VDetailLog("{0}, MoveAngular,verticalAttraction,,origRotVW={1},vertError={2},unscaledV={3},eff={4},ts={5},vertContribV={6}",
Prim.LocalID, origRotVelW, verticalError, unscaledContribVerticalErrorV, Prim.LocalID, origRotVelW, verticalError, unscaledContribVerticalErrorV,
m_verticalAttractionEfficiency, m_verticalAttractionTimescale, vertContributionV); m_verticalAttractionEfficiency, m_verticalAttractionTimescale, vertContributionV);
*/ */
} }
@ -1530,13 +1530,13 @@ namespace OpenSim.Region.Physics.BulletSPlugin
// produce a angular velocity around the yaw-axis, causing the vehicle to turn. The magnitude // produce a angular velocity around the yaw-axis, causing the vehicle to turn. The magnitude
// of the yaw effect will be proportional to the // of the yaw effect will be proportional to the
// VEHICLE_BANKING_EFFICIENCY, the angle of the roll rotation, and sometimes the vehicle's // VEHICLE_BANKING_EFFICIENCY, the angle of the roll rotation, and sometimes the vehicle's
// velocity along its preferred axis of motion. // velocity along its preferred axis of motion.
// The VEHICLE_BANKING_EFFICIENCY can vary between -1 and +1. When it is positive then any // The VEHICLE_BANKING_EFFICIENCY can vary between -1 and +1. When it is positive then any
// positive rotation (by the right-hand rule) about the roll-axis will effect a // positive rotation (by the right-hand rule) about the roll-axis will effect a
// (negative) torque around the yaw-axis, making it turn to the right--that is the // (negative) torque around the yaw-axis, making it turn to the right--that is the
// vehicle will lean into the turn, which is how real airplanes and motorcycle's work. // vehicle will lean into the turn, which is how real airplanes and motorcycle's work.
// Negating the banking coefficient will make it so that the vehicle leans to the // Negating the banking coefficient will make it so that the vehicle leans to the
// outside of the turn (not very "physical" but might allow interesting vehicles so why not?). // outside of the turn (not very "physical" but might allow interesting vehicles so why not?).
// The VEHICLE_BANKING_MIX is a fake (i.e. non-physical) parameter that is useful for making // The VEHICLE_BANKING_MIX is a fake (i.e. non-physical) parameter that is useful for making
// banking vehicles do what you want rather than what the laws of physics allow. // banking vehicles do what you want rather than what the laws of physics allow.
// For example, consider a real motorcycle...it must be moving forward in order for // For example, consider a real motorcycle...it must be moving forward in order for
@ -1548,11 +1548,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin
// totally static (0.0) and totally dynamic (1.0). By "static" we mean that the // totally static (0.0) and totally dynamic (1.0). By "static" we mean that the
// banking effect depends only on the vehicle's rotation about its roll-axis compared // banking effect depends only on the vehicle's rotation about its roll-axis compared
// to "dynamic" where the banking is also proportional to its velocity along its // to "dynamic" where the banking is also proportional to its velocity along its
// roll-axis. Finding the best value of the "mixture" will probably require trial and error. // roll-axis. Finding the best value of the "mixture" will probably require trial and error.
// The time it takes for the banking behavior to defeat a preexisting angular velocity about the // The time it takes for the banking behavior to defeat a preexisting angular velocity about the
// world z-axis is determined by the VEHICLE_BANKING_TIMESCALE. So if you want the vehicle to // world z-axis is determined by the VEHICLE_BANKING_TIMESCALE. So if you want the vehicle to
// bank quickly then give it a banking timescale of about a second or less, otherwise you can // bank quickly then give it a banking timescale of about a second or less, otherwise you can
// make a sluggish vehicle by giving it a timescale of several seconds. // make a sluggish vehicle by giving it a timescale of several seconds.
public void ComputeAngularBanking() public void ComputeAngularBanking()
{ {
if (enableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff) if (enableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
@ -1581,7 +1581,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
//VehicleRotationalVelocity += bankingContributionV * VehicleOrientation; //VehicleRotationalVelocity += bankingContributionV * VehicleOrientation;
VehicleRotationalVelocity += bankingContributionV; VehicleRotationalVelocity += bankingContributionV;
VDetailLog("{0}, MoveAngular,Banking,rollComp={1},speed={2},rollComp={3},yAng={4},mYAng={5},ret={6}", VDetailLog("{0}, MoveAngular,Banking,rollComp={1},speed={2},rollComp={3},yAng={4},mYAng={5},ret={6}",
ControllingPrim.LocalID, rollComponents, VehicleForwardSpeed, rollComponents, yawAngle, mixedYawAngle, bankingContributionV); ControllingPrim.LocalID, rollComponents, VehicleForwardSpeed, rollComponents, yawAngle, mixedYawAngle, bankingContributionV);

View File

@ -214,7 +214,7 @@ public abstract class BSLinkset
// I am the root of a linkset and a new child is being added // I am the root of a linkset and a new child is being added
// Called while LinkActivity is locked. // Called while LinkActivity is locked.
protected abstract void AddChildToLinkset(BSPrimLinkable child); protected abstract void AddChildToLinkset(BSPrimLinkable child);
// I am the root of a linkset and one of my children is being removed. // I am the root of a linkset and one of my children is being removed.
// Safe to call even if the child is not really in my linkset. // Safe to call even if the child is not really in my linkset.
protected abstract void RemoveChildFromLinkset(BSPrimLinkable child); protected abstract void RemoveChildFromLinkset(BSPrimLinkable child);

View File

@ -114,7 +114,7 @@ public sealed class BSLinksetCompound : BSLinkset
// Schedule a refresh to happen after all the other taint processing. // Schedule a refresh to happen after all the other taint processing.
private void ScheduleRebuild(BSPrimLinkable requestor) private void ScheduleRebuild(BSPrimLinkable requestor)
{ {
DetailLog("{0},BSLinksetCompound.ScheduleRebuild,,rebuilding={1},hasChildren={2},actuallyScheduling={3}", DetailLog("{0},BSLinksetCompound.ScheduleRebuild,,rebuilding={1},hasChildren={2},actuallyScheduling={3}",
requestor.LocalID, Rebuilding, HasAnyChildren, (!Rebuilding && HasAnyChildren)); requestor.LocalID, Rebuilding, HasAnyChildren, (!Rebuilding && HasAnyChildren));
// When rebuilding, it is possible to set properties that would normally require a rebuild. // When rebuilding, it is possible to set properties that would normally require a rebuild.
// If already rebuilding, don't request another rebuild. // If already rebuilding, don't request another rebuild.
@ -208,7 +208,7 @@ public sealed class BSLinksetCompound : BSLinkset
// and that is caused by us updating the object. // and that is caused by us updating the object.
if ((whichUpdated & ~(UpdatedProperties.Position | UpdatedProperties.Orientation)) == 0) if ((whichUpdated & ~(UpdatedProperties.Position | UpdatedProperties.Orientation)) == 0)
{ {
// Find the physical instance of the child // Find the physical instance of the child
if (LinksetRoot.PhysShape.HasPhysicalShape && m_physicsScene.PE.IsCompound(LinksetRoot.PhysShape.physShapeInfo)) if (LinksetRoot.PhysShape.HasPhysicalShape && m_physicsScene.PE.IsCompound(LinksetRoot.PhysShape.physShapeInfo))
{ {
// It is possible that the linkset is still under construction and the child is not yet // It is possible that the linkset is still under construction and the child is not yet

View File

@ -102,7 +102,7 @@ public class BSVMotor : BSMotor
return ErrorIsZero(LastError); return ErrorIsZero(LastError);
} }
public virtual bool ErrorIsZero(Vector3 err) public virtual bool ErrorIsZero(Vector3 err)
{ {
return (err == Vector3.Zero || err.ApproxEquals(Vector3.Zero, ErrorZeroThreshold)); return (err == Vector3.Zero || err.ApproxEquals(Vector3.Zero, ErrorZeroThreshold));
} }
@ -115,7 +115,7 @@ public class BSVMotor : BSMotor
CurrentValue = TargetValue = Vector3.Zero; CurrentValue = TargetValue = Vector3.Zero;
ErrorZeroThreshold = 0.001f; ErrorZeroThreshold = 0.001f;
} }
public BSVMotor(string useName, float timeScale, float decayTimeScale, Vector3 frictionTimeScale, float efficiency) public BSVMotor(string useName, float timeScale, float decayTimeScale, Vector3 frictionTimeScale, float efficiency)
: this(useName) : this(useName)
{ {
TimeScale = timeScale; TimeScale = timeScale;
@ -237,7 +237,7 @@ public class BSVMotor : BSMotor
MDetailLog("{0},BSVMotor.Test,{1},===================================== BEGIN Test Output", BSScene.DetailLogZero, UseName); MDetailLog("{0},BSVMotor.Test,{1},===================================== BEGIN Test Output", BSScene.DetailLogZero, UseName);
MDetailLog("{0},BSVMotor.Test,{1},timeScale={2},targDlyTS={3},frictTS={4},eff={5},curr={6},tgt={7}", MDetailLog("{0},BSVMotor.Test,{1},timeScale={2},targDlyTS={3},frictTS={4},eff={5},curr={6},tgt={7}",
BSScene.DetailLogZero, UseName, BSScene.DetailLogZero, UseName,
TimeScale, TargetValueDecayTimeScale, FrictionTimescale, Efficiency, TimeScale, TargetValueDecayTimeScale, FrictionTimescale, Efficiency,
CurrentValue, TargetValue); CurrentValue, TargetValue);
LastError = BSMotor.InfiniteVector; LastError = BSMotor.InfiniteVector;
@ -248,7 +248,7 @@ public class BSVMotor : BSMotor
BSScene.DetailLogZero, UseName, CurrentValue, TargetValue, LastError, lastStep); BSScene.DetailLogZero, UseName, CurrentValue, TargetValue, LastError, lastStep);
} }
MDetailLog("{0},BSVMotor.Test,{1},===================================== END Test Output", BSScene.DetailLogZero, UseName); MDetailLog("{0},BSVMotor.Test,{1},===================================== END Test Output", BSScene.DetailLogZero, UseName);
} }
@ -279,7 +279,7 @@ public class BSFMotor : BSMotor
return ErrorIsZero(LastError); return ErrorIsZero(LastError);
} }
public virtual bool ErrorIsZero(float err) public virtual bool ErrorIsZero(float err)
{ {
return (err >= -ErrorZeroThreshold && err <= ErrorZeroThreshold); return (err >= -ErrorZeroThreshold && err <= ErrorZeroThreshold);
} }
@ -410,7 +410,7 @@ public class BSPIDVMotor : BSVMotor
// The factors are vectors for the three dimensions. This is the proportional of each // The factors are vectors for the three dimensions. This is the proportional of each
// that is applied. This could be multiplied through the actual factors but it // that is applied. This could be multiplied through the actual factors but it
// is sometimes easier to manipulate the factors and their mix separately. // is sometimes easier to manipulate the factors and their mix separately.
// to // to
public Vector3 FactorMix; public Vector3 FactorMix;
// Arbritrary factor range. // Arbritrary factor range.

View File

@ -37,7 +37,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
{ {
public static class BSParam public static class BSParam
{ {
private static string LogHeader = "[BULLETSIM PARAMETERS]"; private static string LogHeader = "[BULLETSIM PARAMETERS]";
// Tuning notes: // Tuning notes:
// From: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=6575 // From: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=6575
@ -51,7 +51,7 @@ public static class BSParam
// This is separate/independent from the collision margin. The collision margin increases the object a bit // This is separate/independent from the collision margin. The collision margin increases the object a bit
// to improve collision detection performance and accuracy. // to improve collision detection performance and accuracy.
// =================== // ===================
// From: // From:
// Level of Detail values kept as float because that's what the Meshmerizer wants // Level of Detail values kept as float because that's what the Meshmerizer wants
public static float MeshLOD { get; private set; } public static float MeshLOD { get; private set; }
@ -636,7 +636,7 @@ public static class BSParam
new ParameterDefn<bool>("ShouldDisableContactPoolDynamicAllocation", "Enable to allow large changes in object count", new ParameterDefn<bool>("ShouldDisableContactPoolDynamicAllocation", "Enable to allow large changes in object count",
false, false,
(s) => { return ShouldDisableContactPoolDynamicAllocation; }, (s) => { return ShouldDisableContactPoolDynamicAllocation; },
(s,v) => { ShouldDisableContactPoolDynamicAllocation = v; (s,v) => { ShouldDisableContactPoolDynamicAllocation = v;
s.UnmanagedParams[0].shouldDisableContactPoolDynamicAllocation = NumericBool(v); } ), s.UnmanagedParams[0].shouldDisableContactPoolDynamicAllocation = NumericBool(v); } ),
new ParameterDefn<bool>("ShouldForceUpdateAllAabbs", "Enable to recomputer AABBs every simulator step", new ParameterDefn<bool>("ShouldForceUpdateAllAabbs", "Enable to recomputer AABBs every simulator step",
false, false,

View File

@ -38,7 +38,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
* Class to wrap all objects. * Class to wrap all objects.
* The rest of BulletSim doesn't need to keep checking for avatars or prims * The rest of BulletSim doesn't need to keep checking for avatars or prims
* unless the difference is significant. * unless the difference is significant.
* *
* Variables in the physicsl objects are in three forms: * Variables in the physicsl objects are in three forms:
* VariableName: used by the simulator and performs taint operations, etc * VariableName: used by the simulator and performs taint operations, etc
* RawVariableName: direct reference to the BulletSim storage for the variable value * RawVariableName: direct reference to the BulletSim storage for the variable value
@ -52,7 +52,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
* SOP.ApplyImpulse SOP.ApplyAngularImpulse SOP.SetAngularImpulse SOP.SetForce * SOP.ApplyImpulse SOP.ApplyAngularImpulse SOP.SetAngularImpulse SOP.SetForce
* SOG.ApplyImpulse SOG.ApplyAngularImpulse SOG.SetAngularImpulse * SOG.ApplyImpulse SOG.ApplyAngularImpulse SOG.SetAngularImpulse
* PA.AddForce PA.AddAngularForce PA.Torque = v PA.Force = v * PA.AddForce PA.AddAngularForce PA.Torque = v PA.Force = v
* BS.ApplyCentralForce BS.ApplyTorque * BS.ApplyCentralForce BS.ApplyTorque
*/ */
// Flags used to denote which properties updates when making UpdateProperties calls to linksets, etc. // Flags used to denote which properties updates when making UpdateProperties calls to linksets, etc.
@ -353,7 +353,7 @@ public abstract class BSPhysObject : PhysicsActor
} }
public override bool CollidingObj { public override bool CollidingObj {
get { return (CollidingObjectStep == PhysScene.SimulationStep); } get { return (CollidingObjectStep == PhysScene.SimulationStep); }
set { set {
if (value) if (value)
CollidingObjectStep = PhysScene.SimulationStep; CollidingObjectStep = PhysScene.SimulationStep;
else else
@ -447,7 +447,7 @@ public abstract class BSPhysObject : PhysicsActor
// The CollisionCollection instance is passed around in the simulator. // The CollisionCollection instance is passed around in the simulator.
// Make sure we don't have a handle to that one and that a new one is used for next time. // Make sure we don't have a handle to that one and that a new one is used for next time.
// This fixes an interesting 'gotcha'. If we call CollisionCollection.Clear() here, // This fixes an interesting 'gotcha'. If we call CollisionCollection.Clear() here,
// a race condition is created for the other users of this instance. // a race condition is created for the other users of this instance.
CollisionCollection = new CollisionEventUpdate(); CollisionCollection = new CollisionEventUpdate();
} }

View File

@ -420,7 +420,7 @@ public class BSPrim : BSPhysObject
get { return _mass; } get { return _mass; }
} }
// used when we only want this prim's mass and not the linkset thing // used when we only want this prim's mass and not the linkset thing
public override float RawMass { public override float RawMass {
get { return _mass; } get { return _mass; }
} }
// Set the physical mass to the passed mass. // Set the physical mass to the passed mass.

View File

@ -142,7 +142,7 @@ public abstract class BSShape
// If the shape was successfully created, nothing more to do // If the shape was successfully created, nothing more to do
if (newShape.HasPhysicalShape) if (newShape.HasPhysicalShape)
return newShape; return newShape;
// VerifyMeshCreated is called after trying to create the mesh. If we think the asset had been // VerifyMeshCreated is called after trying to create the mesh. If we think the asset had been
// fetched but we end up here again, the meshing of the asset must have failed. // fetched but we end up here again, the meshing of the asset must have failed.
// Prevent trying to keep fetching the mesh by declaring failure. // Prevent trying to keep fetching the mesh by declaring failure.
@ -155,7 +155,7 @@ public abstract class BSShape
else else
{ {
// If this mesh has an underlying asset and we have not failed getting it before, fetch the asset // If this mesh has an underlying asset and we have not failed getting it before, fetch the asset
if (prim.BaseShape.SculptEntry if (prim.BaseShape.SculptEntry
&& prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Failed && prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Failed
&& prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Waiting && prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Waiting
&& prim.BaseShape.SculptTexture != OMV.UUID.Zero && prim.BaseShape.SculptTexture != OMV.UUID.Zero
@ -164,7 +164,7 @@ public abstract class BSShape
physicsScene.DetailLog("{0},BSShape.VerifyMeshCreated,fetchAsset", prim.LocalID); physicsScene.DetailLog("{0},BSShape.VerifyMeshCreated,fetchAsset", prim.LocalID);
// Multiple requestors will know we're waiting for this asset // Multiple requestors will know we're waiting for this asset
prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Waiting; prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Waiting;
BSPhysObject xprim = prim; BSPhysObject xprim = prim;
Util.FireAndForget(delegate Util.FireAndForget(delegate
{ {
@ -245,8 +245,8 @@ public class BSShapeNative : BSShape
{ {
} }
public static BSShape GetReference(BSScene physicsScene, BSPhysObject prim, public static BSShape GetReference(BSScene physicsScene, BSPhysObject prim,
BSPhysicsShapeType shapeType, FixedShapeKey shapeKey) BSPhysicsShapeType shapeType, FixedShapeKey shapeKey)
{ {
// Native shapes are not shared and are always built anew. // Native shapes are not shared and are always built anew.
return new BSShapeNative(CreatePhysicalNativeShape(physicsScene, prim, shapeType, shapeKey)); return new BSShapeNative(CreatePhysicalNativeShape(physicsScene, prim, shapeType, shapeKey));
@ -379,7 +379,7 @@ public class BSShapeMesh : BSShape
{ {
BulletShape newShape = null; BulletShape newShape = null;
IMesh meshData = physicsScene.mesher.CreateMesh(prim.PhysObjectName, pbs, size, lod, IMesh meshData = physicsScene.mesher.CreateMesh(prim.PhysObjectName, pbs, size, lod,
false, // say it is not physical so a bounding box is not built false, // say it is not physical so a bounding box is not built
false // do not cache the mesh and do not use previously built versions false // do not cache the mesh and do not use previously built versions
); );
@ -671,8 +671,8 @@ public class BSShapeCompound : BSShape
public BSShapeCompound(BulletShape pShape) : base(pShape) public BSShapeCompound(BulletShape pShape) : base(pShape)
{ {
} }
public static BSShape GetReference(BSScene physicsScene, BSPhysObject prim) public static BSShape GetReference(BSScene physicsScene, BSPhysObject prim)
{ {
// Compound shapes are not shared so a new one is created every time. // Compound shapes are not shared so a new one is created every time.
return new BSShapeCompound(CreatePhysicalCompoundShape(physicsScene, prim)); return new BSShapeCompound(CreatePhysicalCompoundShape(physicsScene, prim));
} }
@ -750,8 +750,8 @@ public class BSShapeAvatar : BSShape
public BSShapeAvatar() : base() public BSShapeAvatar() : base()
{ {
} }
public static BSShape GetReference(BSPhysObject prim) public static BSShape GetReference(BSPhysObject prim)
{ {
return new BSShapeNull(); return new BSShapeNull();
} }
public override void Dereference(BSScene physicsScene) { } public override void Dereference(BSScene physicsScene) { }

View File

@ -68,7 +68,7 @@ public sealed class BSTerrainHeightmap : BSTerrainPhys
// This minCoords and maxCoords passed in give the size of the terrain (min and max Z // This minCoords and maxCoords passed in give the size of the terrain (min and max Z
// are the high and low points of the heightmap). // are the high and low points of the heightmap).
public BSTerrainHeightmap(BSScene physicsScene, Vector3 regionBase, uint id, float[] initialMap, public BSTerrainHeightmap(BSScene physicsScene, Vector3 regionBase, uint id, float[] initialMap,
Vector3 minCoords, Vector3 maxCoords) Vector3 minCoords, Vector3 maxCoords)
: base(physicsScene, regionBase, id) : base(physicsScene, regionBase, id)
{ {
@ -92,7 +92,7 @@ public sealed class BSTerrainHeightmap : BSTerrainPhys
private void BuildHeightmapTerrain() private void BuildHeightmapTerrain()
{ {
// Create the terrain shape from the mapInfo // Create the terrain shape from the mapInfo
m_mapInfo.terrainShape = m_physicsScene.PE.CreateTerrainShape( m_mapInfo.ID, m_mapInfo.terrainShape = m_physicsScene.PE.CreateTerrainShape( m_mapInfo.ID,
new Vector3(m_mapInfo.sizeX, m_mapInfo.sizeY, 0), m_mapInfo.minZ, m_mapInfo.maxZ, new Vector3(m_mapInfo.sizeX, m_mapInfo.sizeY, 0), m_mapInfo.minZ, m_mapInfo.maxZ,
m_mapInfo.heightMap, 1f, BSParam.TerrainCollisionMargin); m_mapInfo.heightMap, 1f, BSParam.TerrainCollisionMargin);
@ -103,7 +103,7 @@ public sealed class BSTerrainHeightmap : BSTerrainPhys
centerPos.Y = m_mapInfo.minCoords.Y + (m_mapInfo.sizeY / 2f); centerPos.Y = m_mapInfo.minCoords.Y + (m_mapInfo.sizeY / 2f);
centerPos.Z = m_mapInfo.minZ + ((m_mapInfo.maxZ - m_mapInfo.minZ) / 2f); centerPos.Z = m_mapInfo.minZ + ((m_mapInfo.maxZ - m_mapInfo.minZ) / 2f);
m_mapInfo.terrainBody = m_physicsScene.PE.CreateBodyWithDefaultMotionState(m_mapInfo.terrainShape, m_mapInfo.terrainBody = m_physicsScene.PE.CreateBodyWithDefaultMotionState(m_mapInfo.terrainShape,
m_mapInfo.ID, centerPos, Quaternion.Identity); m_mapInfo.ID, centerPos, Quaternion.Identity);
// Set current terrain attributes // Set current terrain attributes

View File

@ -135,7 +135,7 @@ public sealed class BSTerrainManager : IDisposable
DetailLog("{0},BSTerrainManager.CreateInitialGroundPlaneAndTerrain,region={1}", BSScene.DetailLogZero, m_physicsScene.RegionName); DetailLog("{0},BSTerrainManager.CreateInitialGroundPlaneAndTerrain,region={1}", BSScene.DetailLogZero, m_physicsScene.RegionName);
// The ground plane is here to catch things that are trying to drop to negative infinity // The ground plane is here to catch things that are trying to drop to negative infinity
BulletShape groundPlaneShape = m_physicsScene.PE.CreateGroundPlaneShape(BSScene.GROUNDPLANE_ID, 1f, BSParam.TerrainCollisionMargin); BulletShape groundPlaneShape = m_physicsScene.PE.CreateGroundPlaneShape(BSScene.GROUNDPLANE_ID, 1f, BSParam.TerrainCollisionMargin);
m_groundPlane = m_physicsScene.PE.CreateBodyWithDefaultMotionState(groundPlaneShape, m_groundPlane = m_physicsScene.PE.CreateBodyWithDefaultMotionState(groundPlaneShape,
BSScene.GROUNDPLANE_ID, Vector3.Zero, Quaternion.Identity); BSScene.GROUNDPLANE_ID, Vector3.Zero, Quaternion.Identity);
m_physicsScene.PE.AddObjectToWorld(m_physicsScene.World, m_groundPlane); m_physicsScene.PE.AddObjectToWorld(m_physicsScene.World, m_groundPlane);
@ -318,8 +318,8 @@ public sealed class BSTerrainManager : IDisposable
// TODO: redo terrain implementation selection to allow other base types than heightMap. // TODO: redo terrain implementation selection to allow other base types than heightMap.
private BSTerrainPhys BuildPhysicalTerrain(Vector3 terrainRegionBase, uint id, float[] heightMap, Vector3 minCoords, Vector3 maxCoords) private BSTerrainPhys BuildPhysicalTerrain(Vector3 terrainRegionBase, uint id, float[] heightMap, Vector3 minCoords, Vector3 maxCoords)
{ {
m_physicsScene.Logger.DebugFormat("{0} Terrain for {1}/{2} created with {3}", m_physicsScene.Logger.DebugFormat("{0} Terrain for {1}/{2} created with {3}",
LogHeader, m_physicsScene.RegionName, terrainRegionBase, LogHeader, m_physicsScene.RegionName, terrainRegionBase,
(BSTerrainPhys.TerrainImplementation)BSParam.TerrainImplementation); (BSTerrainPhys.TerrainImplementation)BSParam.TerrainImplementation);
BSTerrainPhys newTerrainPhys = null; BSTerrainPhys newTerrainPhys = null;
switch ((int)BSParam.TerrainImplementation) switch ((int)BSParam.TerrainImplementation)
@ -334,8 +334,8 @@ public sealed class BSTerrainManager : IDisposable
break; break;
default: default:
m_physicsScene.Logger.ErrorFormat("{0} Bad terrain implementation specified. Type={1}/{2},Region={3}/{4}", m_physicsScene.Logger.ErrorFormat("{0} Bad terrain implementation specified. Type={1}/{2},Region={3}/{4}",
LogHeader, LogHeader,
(int)BSParam.TerrainImplementation, (int)BSParam.TerrainImplementation,
BSParam.TerrainImplementation, BSParam.TerrainImplementation,
m_physicsScene.RegionName, terrainRegionBase); m_physicsScene.RegionName, terrainRegionBase);
break; break;

View File

@ -51,7 +51,7 @@ public sealed class BSTerrainMesh : BSTerrainPhys
BulletShape m_terrainShape; BulletShape m_terrainShape;
BulletBody m_terrainBody; BulletBody m_terrainBody;
public BSTerrainMesh(BSScene physicsScene, Vector3 regionBase, uint id, Vector3 regionSize) public BSTerrainMesh(BSScene physicsScene, Vector3 regionBase, uint id, Vector3 regionSize)
: base(physicsScene, regionBase, id) : base(physicsScene, regionBase, id)
{ {
} }
@ -62,7 +62,7 @@ public sealed class BSTerrainMesh : BSTerrainPhys
} }
// Create terrain mesh from a heightmap. // Create terrain mesh from a heightmap.
public BSTerrainMesh(BSScene physicsScene, Vector3 regionBase, uint id, float[] initialMap, public BSTerrainMesh(BSScene physicsScene, Vector3 regionBase, uint id, float[] initialMap,
Vector3 minCoords, Vector3 maxCoords) Vector3 minCoords, Vector3 maxCoords)
: base(physicsScene, regionBase, id) : base(physicsScene, regionBase, id)
{ {
@ -104,7 +104,7 @@ public sealed class BSTerrainMesh : BSTerrainPhys
return; return;
} }
m_physicsScene.DetailLog("{0},BSTerrainMesh.create,meshed,id={1},indices={2},indSz={3},vertices={4},vertSz={5}", m_physicsScene.DetailLog("{0},BSTerrainMesh.create,meshed,id={1},indices={2},indSz={3},vertices={4},vertSz={5}",
BSScene.DetailLogZero, ID, indicesCount, indices.Length, verticesCount, vertices.Length); BSScene.DetailLogZero, ID, indicesCount, indices.Length, verticesCount, vertices.Length);
m_terrainShape = m_physicsScene.PE.CreateMeshShape(m_physicsScene.World, indicesCount, indices, verticesCount, vertices); m_terrainShape = m_physicsScene.PE.CreateMeshShape(m_physicsScene.World, indicesCount, indices, verticesCount, vertices);

View File

@ -224,42 +224,42 @@ public static class BulletSimData
// As mentioned above, don't use the CollisionFilterGroups definitions directly in the code // As mentioned above, don't use the CollisionFilterGroups definitions directly in the code
// but, instead, use references to this dictionary. Finding and debugging // but, instead, use references to this dictionary. Finding and debugging
// collision flag problems will be made easier. // collision flag problems will be made easier.
public static Dictionary<CollisionType, CollisionTypeFilterGroup> CollisionTypeMasks public static Dictionary<CollisionType, CollisionTypeFilterGroup> CollisionTypeMasks
= new Dictionary<CollisionType, CollisionTypeFilterGroup>() = new Dictionary<CollisionType, CollisionTypeFilterGroup>()
{ {
{ CollisionType.Avatar, { CollisionType.Avatar,
new CollisionTypeFilterGroup(CollisionType.Avatar, new CollisionTypeFilterGroup(CollisionType.Avatar,
(uint)CollisionFilterGroups.BCharacterGroup, (uint)CollisionFilterGroups.BCharacterGroup,
(uint)CollisionFilterGroups.BAllGroup) (uint)CollisionFilterGroups.BAllGroup)
}, },
{ CollisionType.Groundplane, { CollisionType.Groundplane,
new CollisionTypeFilterGroup(CollisionType.Groundplane, new CollisionTypeFilterGroup(CollisionType.Groundplane,
(uint)CollisionFilterGroups.BGroundPlaneGroup, (uint)CollisionFilterGroups.BGroundPlaneGroup,
(uint)CollisionFilterGroups.BAllGroup) (uint)CollisionFilterGroups.BAllGroup)
}, },
{ CollisionType.Terrain, { CollisionType.Terrain,
new CollisionTypeFilterGroup(CollisionType.Terrain, new CollisionTypeFilterGroup(CollisionType.Terrain,
(uint)CollisionFilterGroups.BTerrainGroup, (uint)CollisionFilterGroups.BTerrainGroup,
(uint)(CollisionFilterGroups.BAllGroup & ~CollisionFilterGroups.BStaticGroup)) (uint)(CollisionFilterGroups.BAllGroup & ~CollisionFilterGroups.BStaticGroup))
}, },
{ CollisionType.Static, { CollisionType.Static,
new CollisionTypeFilterGroup(CollisionType.Static, new CollisionTypeFilterGroup(CollisionType.Static,
(uint)CollisionFilterGroups.BStaticGroup, (uint)CollisionFilterGroups.BStaticGroup,
(uint)(CollisionFilterGroups.BCharacterGroup | CollisionFilterGroups.BSolidGroup)) (uint)(CollisionFilterGroups.BCharacterGroup | CollisionFilterGroups.BSolidGroup))
}, },
{ CollisionType.Dynamic, { CollisionType.Dynamic,
new CollisionTypeFilterGroup(CollisionType.Dynamic, new CollisionTypeFilterGroup(CollisionType.Dynamic,
(uint)CollisionFilterGroups.BSolidGroup, (uint)CollisionFilterGroups.BSolidGroup,
(uint)(CollisionFilterGroups.BAllGroup)) (uint)(CollisionFilterGroups.BAllGroup))
}, },
{ CollisionType.VolumeDetect, { CollisionType.VolumeDetect,
new CollisionTypeFilterGroup(CollisionType.VolumeDetect, new CollisionTypeFilterGroup(CollisionType.VolumeDetect,
(uint)CollisionFilterGroups.BSensorTrigger, (uint)CollisionFilterGroups.BSensorTrigger,
(uint)(~CollisionFilterGroups.BSensorTrigger)) (uint)(~CollisionFilterGroups.BSensorTrigger))
}, },
{ CollisionType.LinksetChild, { CollisionType.LinksetChild,
new CollisionTypeFilterGroup(CollisionType.LinksetChild, new CollisionTypeFilterGroup(CollisionType.LinksetChild,
(uint)CollisionFilterGroups.BLinksetChildGroup, (uint)CollisionFilterGroups.BLinksetChildGroup,
(uint)(CollisionFilterGroups.BNoneGroup)) (uint)(CollisionFilterGroups.BNoneGroup))
// (uint)(CollisionFilterGroups.BCharacterGroup | CollisionFilterGroups.BSolidGroup)) // (uint)(CollisionFilterGroups.BCharacterGroup | CollisionFilterGroups.BSolidGroup))
}, },