diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs | 220 |
1 files changed, 49 insertions, 171 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs index 07149d8..1e003e6 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs | |||
@@ -88,11 +88,11 @@ public struct BulletShape | |||
88 | public BulletShape(IntPtr xx) | 88 | public BulletShape(IntPtr xx) |
89 | { | 89 | { |
90 | ptr = xx; | 90 | ptr = xx; |
91 | type=ShapeData.PhysicsShapeType.SHAPE_UNKNOWN; | 91 | type=BSPhysicsShapeType.SHAPE_UNKNOWN; |
92 | shapeKey = 0; | 92 | shapeKey = (System.UInt64)FixedShapeKey.KEY_NONE; |
93 | isNativeShape = false; | 93 | isNativeShape = false; |
94 | } | 94 | } |
95 | public BulletShape(IntPtr xx, ShapeData.PhysicsShapeType typ) | 95 | public BulletShape(IntPtr xx, BSPhysicsShapeType typ) |
96 | { | 96 | { |
97 | ptr = xx; | 97 | ptr = xx; |
98 | type = typ; | 98 | type = typ; |
@@ -100,7 +100,7 @@ public struct BulletShape | |||
100 | isNativeShape = false; | 100 | isNativeShape = false; |
101 | } | 101 | } |
102 | public IntPtr ptr; | 102 | public IntPtr ptr; |
103 | public ShapeData.PhysicsShapeType type; | 103 | public BSPhysicsShapeType type; |
104 | public System.UInt64 shapeKey; | 104 | public System.UInt64 shapeKey; |
105 | public bool isNativeShape; | 105 | public bool isNativeShape; |
106 | public override string ToString() | 106 | public override string ToString() |
@@ -152,7 +152,7 @@ public class BulletHeightMapInfo | |||
152 | ID = id; | 152 | ID = id; |
153 | Ptr = xx; | 153 | Ptr = xx; |
154 | heightMap = hm; | 154 | heightMap = hm; |
155 | terrainRegionBase = new Vector2(0f, 0f); | 155 | terrainRegionBase = Vector3.Zero; |
156 | minCoords = new Vector3(100f, 100f, 25f); | 156 | minCoords = new Vector3(100f, 100f, 25f); |
157 | maxCoords = new Vector3(101f, 101f, 26f); | 157 | maxCoords = new Vector3(101f, 101f, 26f); |
158 | minZ = maxZ = 0f; | 158 | minZ = maxZ = 0f; |
@@ -161,7 +161,7 @@ public class BulletHeightMapInfo | |||
161 | public uint ID; | 161 | public uint ID; |
162 | public IntPtr Ptr; | 162 | public IntPtr Ptr; |
163 | public float[] heightMap; | 163 | public float[] heightMap; |
164 | public Vector2 terrainRegionBase; | 164 | public Vector3 terrainRegionBase; |
165 | public Vector3 minCoords; | 165 | public Vector3 minCoords; |
166 | public Vector3 maxCoords; | 166 | public Vector3 maxCoords; |
167 | public float sizeX, sizeY; | 167 | public float sizeX, sizeY; |
@@ -178,26 +178,39 @@ public struct ConvexHull | |||
178 | int VertexCount; | 178 | int VertexCount; |
179 | Vector3[] Vertices; | 179 | Vector3[] Vertices; |
180 | } | 180 | } |
181 | public enum BSPhysicsShapeType | ||
182 | { | ||
183 | SHAPE_UNKNOWN = 0, | ||
184 | SHAPE_CAPSULE = 1, | ||
185 | SHAPE_BOX = 2, | ||
186 | SHAPE_CONE = 3, | ||
187 | SHAPE_CYLINDER = 4, | ||
188 | SHAPE_SPHERE = 5, | ||
189 | SHAPE_MESH = 6, | ||
190 | SHAPE_HULL = 7, | ||
191 | // following defined by BulletSim | ||
192 | SHAPE_GROUNDPLANE = 20, | ||
193 | SHAPE_TERRAIN = 21, | ||
194 | SHAPE_COMPOUND = 22, | ||
195 | SHAPE_HEIGHTMAP = 23, | ||
196 | }; | ||
197 | |||
198 | // The native shapes have predefined shape hash keys | ||
199 | public enum FixedShapeKey : ulong | ||
200 | { | ||
201 | KEY_NONE = 0, | ||
202 | KEY_BOX = 1, | ||
203 | KEY_SPHERE = 2, | ||
204 | KEY_CONE = 3, | ||
205 | KEY_CYLINDER = 4, | ||
206 | KEY_CAPSULE = 5, | ||
207 | } | ||
208 | |||
181 | [StructLayout(LayoutKind.Sequential)] | 209 | [StructLayout(LayoutKind.Sequential)] |
182 | public struct ShapeData | 210 | public struct ShapeData |
183 | { | 211 | { |
184 | public enum PhysicsShapeType | ||
185 | { | ||
186 | SHAPE_UNKNOWN = 0, | ||
187 | SHAPE_AVATAR = 1, | ||
188 | SHAPE_BOX = 2, | ||
189 | SHAPE_CONE = 3, | ||
190 | SHAPE_CYLINDER = 4, | ||
191 | SHAPE_SPHERE = 5, | ||
192 | SHAPE_MESH = 6, | ||
193 | SHAPE_HULL = 7, | ||
194 | // following defined by BulletSim | ||
195 | SHAPE_GROUNDPLANE = 20, | ||
196 | SHAPE_TERRAIN = 21, | ||
197 | SHAPE_COMPOUND = 22, | ||
198 | }; | ||
199 | public uint ID; | 212 | public uint ID; |
200 | public PhysicsShapeType Type; | 213 | public BSPhysicsShapeType Type; |
201 | public Vector3 Position; | 214 | public Vector3 Position; |
202 | public Quaternion Rotation; | 215 | public Quaternion Rotation; |
203 | public Vector3 Velocity; | 216 | public Vector3 Velocity; |
@@ -216,16 +229,6 @@ public struct ShapeData | |||
216 | // note that bools are passed as floats since bool size changes by language and architecture | 229 | // note that bools are passed as floats since bool size changes by language and architecture |
217 | public const float numericTrue = 1f; | 230 | public const float numericTrue = 1f; |
218 | public const float numericFalse = 0f; | 231 | public const float numericFalse = 0f; |
219 | |||
220 | // The native shapes have predefined shape hash keys | ||
221 | public enum FixedShapeKey : ulong | ||
222 | { | ||
223 | KEY_BOX = 1, | ||
224 | KEY_SPHERE = 2, | ||
225 | KEY_CONE = 3, | ||
226 | KEY_CYLINDER = 4, | ||
227 | KEY_CAPSULE = 5, | ||
228 | } | ||
229 | } | 232 | } |
230 | [StructLayout(LayoutKind.Sequential)] | 233 | [StructLayout(LayoutKind.Sequential)] |
231 | public struct SweepHit | 234 | public struct SweepHit |
@@ -280,17 +283,23 @@ public struct ConfigurationParameters | |||
280 | public float ccdSweptSphereRadius; | 283 | public float ccdSweptSphereRadius; |
281 | public float contactProcessingThreshold; | 284 | public float contactProcessingThreshold; |
282 | 285 | ||
286 | public float terrainImplementation; | ||
283 | public float terrainFriction; | 287 | public float terrainFriction; |
284 | public float terrainHitFraction; | 288 | public float terrainHitFraction; |
285 | public float terrainRestitution; | 289 | public float terrainRestitution; |
290 | public float terrainCollisionMargin; | ||
291 | |||
286 | public float avatarFriction; | 292 | public float avatarFriction; |
287 | public float avatarStandingFriction; | 293 | public float avatarStandingFriction; |
288 | public float avatarDensity; | 294 | public float avatarDensity; |
289 | public float avatarRestitution; | 295 | public float avatarRestitution; |
290 | public float avatarCapsuleRadius; | 296 | public float avatarCapsuleWidth; |
297 | public float avatarCapsuleDepth; | ||
291 | public float avatarCapsuleHeight; | 298 | public float avatarCapsuleHeight; |
292 | public float avatarContactProcessingThreshold; | 299 | public float avatarContactProcessingThreshold; |
293 | 300 | ||
301 | public float vehicleAngularDamping; | ||
302 | |||
294 | public float maxPersistantManifoldPoolSize; | 303 | public float maxPersistantManifoldPoolSize; |
295 | public float maxCollisionAlgorithmPoolSize; | 304 | public float maxCollisionAlgorithmPoolSize; |
296 | public float shouldDisableContactPoolDynamicAllocation; | 305 | public float shouldDisableContactPoolDynamicAllocation; |
@@ -348,7 +357,7 @@ public enum CollisionFlags : uint | |||
348 | CF_CHARACTER_OBJECT = 1 << 4, | 357 | CF_CHARACTER_OBJECT = 1 << 4, |
349 | CF_DISABLE_VISUALIZE_OBJECT = 1 << 5, | 358 | CF_DISABLE_VISUALIZE_OBJECT = 1 << 5, |
350 | CF_DISABLE_SPU_COLLISION_PROCESS = 1 << 6, | 359 | CF_DISABLE_SPU_COLLISION_PROCESS = 1 << 6, |
351 | // Following used by BulletSim to control collisions | 360 | // Following used by BulletSim to control collisions and updates |
352 | BS_SUBSCRIBE_COLLISION_EVENTS = 1 << 10, | 361 | BS_SUBSCRIBE_COLLISION_EVENTS = 1 << 10, |
353 | BS_FLOATS_ON_WATER = 1 << 11, | 362 | BS_FLOATS_ON_WATER = 1 << 11, |
354 | BS_NONE = 0, | 363 | BS_NONE = 0, |
@@ -388,13 +397,13 @@ public enum CollisionFilterGroups : uint | |||
388 | ObjectFilter = BSolidFilter, | 397 | ObjectFilter = BSolidFilter, |
389 | ObjectMask = BAllFilter, | 398 | ObjectMask = BAllFilter, |
390 | StaticObjectFilter = BStaticFilter, | 399 | StaticObjectFilter = BStaticFilter, |
391 | StaticObjectMask = BAllFilter, | 400 | StaticObjectMask = BAllFilter & ~BStaticFilter, // static objects don't collide with each other |
392 | LinksetFilter = BLinksetFilter, | 401 | LinksetFilter = BLinksetFilter, |
393 | LinksetMask = BAllFilter & ~BLinksetFilter, | 402 | LinksetMask = BAllFilter & ~BLinksetFilter, // linkset objects don't collide with each other |
394 | VolumeDetectFilter = BSensorTrigger, | 403 | VolumeDetectFilter = BSensorTrigger, |
395 | VolumeDetectMask = ~BSensorTrigger, | 404 | VolumeDetectMask = ~BSensorTrigger, |
396 | TerrainFilter = BTerrainFilter, | 405 | TerrainFilter = BTerrainFilter, |
397 | TerrainMask = BAllFilter & ~BStaticFilter, | 406 | TerrainMask = BAllFilter & ~BStaticFilter, // static objects on the ground don't collide |
398 | GroundPlaneFilter = BGroundPlaneFilter, | 407 | GroundPlaneFilter = BGroundPlaneFilter, |
399 | GroundPlaneMask = BAllFilter | 408 | GroundPlaneMask = BAllFilter |
400 | 409 | ||
@@ -429,140 +438,6 @@ static class BulletSimAPI { | |||
429 | [UnmanagedFunctionPointer(CallingConvention.Cdecl)] | 438 | [UnmanagedFunctionPointer(CallingConvention.Cdecl)] |
430 | public delegate void DebugLogCallback([MarshalAs(UnmanagedType.LPStr)]string msg); | 439 | public delegate void DebugLogCallback([MarshalAs(UnmanagedType.LPStr)]string msg); |
431 | 440 | ||
432 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
433 | [return: MarshalAs(UnmanagedType.LPStr)] | ||
434 | public static extern string GetVersion(); | ||
435 | |||
436 | /* Remove the linkage to the old api methods | ||
437 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
438 | public static extern uint Initialize(Vector3 maxPosition, IntPtr parms, | ||
439 | int maxCollisions, IntPtr collisionArray, | ||
440 | int maxUpdates, IntPtr updateArray, | ||
441 | DebugLogCallback logRoutine); | ||
442 | |||
443 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
444 | public static extern void CreateInitialGroundPlaneAndTerrain(uint worldID); | ||
445 | |||
446 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
447 | public static extern void SetHeightmap(uint worldID, [MarshalAs(UnmanagedType.LPArray)] float[] heightMap); | ||
448 | |||
449 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
450 | public static extern void Shutdown(uint worldID); | ||
451 | |||
452 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
453 | public static extern bool UpdateParameter(uint worldID, uint localID, | ||
454 | [MarshalAs(UnmanagedType.LPStr)]string paramCode, float value); | ||
455 | |||
456 | // =============================================================================== | ||
457 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
458 | public static extern int PhysicsStep(uint worldID, float timeStep, int maxSubSteps, float fixedTimeStep, | ||
459 | out int updatedEntityCount, | ||
460 | out IntPtr updatedEntitiesPtr, | ||
461 | out int collidersCount, | ||
462 | out IntPtr collidersPtr); | ||
463 | |||
464 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
465 | public static extern bool CreateHull(uint worldID, System.UInt64 meshKey, | ||
466 | int hullCount, [MarshalAs(UnmanagedType.LPArray)] float[] hulls | ||
467 | ); | ||
468 | |||
469 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
470 | public static extern bool CreateMesh(uint worldID, System.UInt64 meshKey, | ||
471 | int indexCount, [MarshalAs(UnmanagedType.LPArray)] int[] indices, | ||
472 | int verticesCount, [MarshalAs(UnmanagedType.LPArray)] float[] vertices | ||
473 | ); | ||
474 | |||
475 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
476 | public static extern bool DestroyHull(uint worldID, System.UInt64 meshKey); | ||
477 | |||
478 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
479 | public static extern bool DestroyMesh(uint worldID, System.UInt64 meshKey); | ||
480 | |||
481 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
482 | public static extern bool CreateObject(uint worldID, ShapeData shapeData); | ||
483 | |||
484 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
485 | public static extern Vector3 GetObjectPosition(uint WorldID, uint id); | ||
486 | |||
487 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
488 | public static extern Quaternion GetObjectOrientation(uint WorldID, uint id); | ||
489 | |||
490 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
491 | public static extern bool SetObjectTranslation(uint worldID, uint id, Vector3 position, Quaternion rotation); | ||
492 | |||
493 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
494 | public static extern bool SetObjectVelocity(uint worldID, uint id, Vector3 velocity); | ||
495 | |||
496 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
497 | public static extern bool SetObjectAngularVelocity(uint worldID, uint id, Vector3 angularVelocity); | ||
498 | |||
499 | // Set the current force acting on the object | ||
500 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
501 | public static extern bool SetObjectForce(uint worldID, uint id, Vector3 force); | ||
502 | |||
503 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
504 | public static extern bool SetObjectScaleMass(uint worldID, uint id, Vector3 scale, float mass, bool isDynamic); | ||
505 | |||
506 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
507 | public static extern bool SetObjectCollidable(uint worldID, uint id, bool phantom); | ||
508 | |||
509 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
510 | public static extern bool SetObjectDynamic(uint worldID, uint id, bool isDynamic, float mass); | ||
511 | |||
512 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
513 | public static extern bool SetObjectGhost(uint worldID, uint id, bool ghostly); | ||
514 | |||
515 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
516 | public static extern bool SetObjectProperties(uint worldID, uint id, bool isStatic, bool isSolid, bool genCollisions, float mass); | ||
517 | |||
518 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
519 | public static extern bool SetObjectBuoyancy(uint worldID, uint id, float buoyancy); | ||
520 | |||
521 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
522 | public static extern bool HasObject(uint worldID, uint id); | ||
523 | |||
524 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
525 | public static extern bool DestroyObject(uint worldID, uint id); | ||
526 | |||
527 | // =============================================================================== | ||
528 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
529 | public static extern SweepHit ConvexSweepTest(uint worldID, uint id, Vector3 to, float extraMargin); | ||
530 | |||
531 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
532 | public static extern RaycastHit RayTest(uint worldID, uint id, Vector3 from, Vector3 to); | ||
533 | |||
534 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
535 | public static extern Vector3 RecoverFromPenetration(uint worldID, uint id); | ||
536 | |||
537 | // =============================================================================== | ||
538 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
539 | public static extern void DumpBulletStatistics(); | ||
540 | */ | ||
541 | // Log a debug message | ||
542 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
543 | public static extern void SetDebugLogCallback(DebugLogCallback callback); | ||
544 | |||
545 | // =============================================================================== | ||
546 | // =============================================================================== | ||
547 | // =============================================================================== | ||
548 | // A new version of the API that enables moving all the logic out of the C++ code and into | ||
549 | // the C# code. This will make modifications easier for the next person. | ||
550 | // This interface passes the actual pointers to the objects in the unmanaged | ||
551 | // address space. All the management (calls for creation/destruction/lookup) | ||
552 | // is done in the C# code. | ||
553 | // The names have a "2" tacked on. This will be removed as the C# code gets rebuilt | ||
554 | // and the old code is removed. | ||
555 | |||
556 | // Functions use while converting from API1 to API2. Can be removed when totally converted. | ||
557 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
558 | public static extern IntPtr GetSimHandle2(uint worldID); | ||
559 | |||
560 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
561 | public static extern IntPtr GetBodyHandleWorldID2(uint worldID, uint id); | ||
562 | |||
563 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
564 | public static extern IntPtr GetBodyHandle2(IntPtr world, uint id); | ||
565 | |||
566 | // =============================================================================== | 441 | // =============================================================================== |
567 | // Initialization and simulation | 442 | // Initialization and simulation |
568 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 443 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
@@ -611,6 +486,9 @@ public static extern IntPtr BuildNativeShape2(IntPtr world, ShapeData shapeData) | |||
611 | public static extern bool IsNativeShape2(IntPtr shape); | 486 | public static extern bool IsNativeShape2(IntPtr shape); |
612 | 487 | ||
613 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 488 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
489 | public static extern void SetShapeCollisionMargin(IntPtr shape, float margin); | ||
490 | |||
491 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
614 | public static extern IntPtr BuildCapsuleShape2(IntPtr world, float radius, float height, Vector3 scale); | 492 | public static extern IntPtr BuildCapsuleShape2(IntPtr world, float radius, float height, Vector3 scale); |
615 | 493 | ||
616 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 494 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |