diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs | 272 |
1 files changed, 260 insertions, 12 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs index 086f0dc..0ffbc94 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs | |||
@@ -32,6 +32,28 @@ using OpenMetaverse; | |||
32 | 32 | ||
33 | namespace OpenSim.Region.Physics.BulletSPlugin { | 33 | namespace OpenSim.Region.Physics.BulletSPlugin { |
34 | 34 | ||
35 | // Classes to allow some type checking for the API | ||
36 | public struct BulletSim | ||
37 | { | ||
38 | public BulletSim(uint id, IntPtr xx) { ID = id; Ptr = xx; } | ||
39 | public IntPtr Ptr; | ||
40 | public uint ID; | ||
41 | } | ||
42 | |||
43 | public struct BulletBody | ||
44 | { | ||
45 | public BulletBody(uint id, IntPtr xx) { ID = id; Ptr = xx; } | ||
46 | public IntPtr Ptr; | ||
47 | public uint ID; | ||
48 | } | ||
49 | |||
50 | public struct BulletConstraint | ||
51 | { | ||
52 | public BulletConstraint(IntPtr xx) { Ptr = xx; } | ||
53 | public IntPtr Ptr; | ||
54 | } | ||
55 | |||
56 | // =============================================================================== | ||
35 | [StructLayout(LayoutKind.Sequential)] | 57 | [StructLayout(LayoutKind.Sequential)] |
36 | public struct ConvexHull | 58 | public struct ConvexHull |
37 | { | 59 | { |
@@ -44,13 +66,14 @@ public struct ShapeData | |||
44 | { | 66 | { |
45 | public enum PhysicsShapeType | 67 | public enum PhysicsShapeType |
46 | { | 68 | { |
47 | SHAPE_AVATAR = 0, | 69 | SHAPE_UNKNOWN = 0, |
48 | SHAPE_BOX = 1, | 70 | SHAPE_AVATAR = 1, |
49 | SHAPE_CONE = 2, | 71 | SHAPE_BOX = 2, |
50 | SHAPE_CYLINDER = 3, | 72 | SHAPE_CONE = 3, |
51 | SHAPE_SPHERE = 4, | 73 | SHAPE_CYLINDER = 4, |
52 | SHAPE_MESH = 5, | 74 | SHAPE_SPHERE = 5, |
53 | SHAPE_HULL = 6 | 75 | SHAPE_MESH = 6, |
76 | SHAPE_HULL = 7 | ||
54 | }; | 77 | }; |
55 | public uint ID; | 78 | public uint ID; |
56 | public PhysicsShapeType Type; | 79 | public PhysicsShapeType Type; |
@@ -64,12 +87,12 @@ public struct ShapeData | |||
64 | public System.UInt64 MeshKey; | 87 | public System.UInt64 MeshKey; |
65 | public float Friction; | 88 | public float Friction; |
66 | public float Restitution; | 89 | public float Restitution; |
67 | public int Collidable; | 90 | public float Collidable; // true of things bump into this |
68 | public int Static; // true if a static object. Otherwise gravity, etc. | 91 | public float Static; // true if a static object. Otherwise gravity, etc. |
69 | 92 | ||
70 | // note that bools are passed as ints since bool size changes by language and architecture | 93 | // note that bools are passed as floats since bool size changes by language and architecture |
71 | public const int numericTrue = 1; | 94 | public const float numericTrue = 1f; |
72 | public const int numericFalse = 0; | 95 | public const float numericFalse = 0f; |
73 | } | 96 | } |
74 | [StructLayout(LayoutKind.Sequential)] | 97 | [StructLayout(LayoutKind.Sequential)] |
75 | public struct SweepHit | 98 | public struct SweepHit |
@@ -142,10 +165,56 @@ public struct ConfigurationParameters | |||
142 | public float shouldEnableFrictionCaching; | 165 | public float shouldEnableFrictionCaching; |
143 | public float numberOfSolverIterations; | 166 | public float numberOfSolverIterations; |
144 | 167 | ||
168 | public float linkConstraintUseFrameOffset; | ||
169 | public float linkConstraintEnableTransMotor; | ||
170 | public float linkConstraintTransMotorMaxVel; | ||
171 | public float linkConstraintTransMotorMaxForce; | ||
172 | public float linkConstraintERP; | ||
173 | public float linkConstraintCFM; | ||
174 | |||
145 | public const float numericTrue = 1f; | 175 | public const float numericTrue = 1f; |
146 | public const float numericFalse = 0f; | 176 | public const float numericFalse = 0f; |
147 | } | 177 | } |
148 | 178 | ||
179 | // Values used by Bullet and BulletSim to control collisions | ||
180 | public enum CollisionFlags : uint | ||
181 | { | ||
182 | STATIC_OBJECT = 1 << 0, | ||
183 | KINEMATIC_OBJECT = 1 << 1, | ||
184 | NO_CONTACT_RESPONSE = 1 << 2, | ||
185 | CUSTOM_MATERIAL_CALLBACK = 1 << 3, | ||
186 | CHARACTER_OBJECT = 1 << 4, | ||
187 | DISABLE_VISUALIZE_OBJECT = 1 << 5, | ||
188 | DISABLE_SPU_COLLISION_PROCESS = 1 << 6, | ||
189 | // Following used by BulletSim to control collisions | ||
190 | VOLUME_DETECT_OBJECT = 1 << 10, | ||
191 | PHANTOM_OBJECT = 1 << 11, | ||
192 | PHYSICAL_OBJECT = 1 << 12, | ||
193 | }; | ||
194 | |||
195 | // CFM controls the 'hardness' of the constraint. 0=fixed, 0..1=violatable. Default=0 | ||
196 | // ERP controls amount of correction per tick. Usable range=0.1..0.8. Default=0.2. | ||
197 | public enum ConstraintParams : int | ||
198 | { | ||
199 | BT_CONSTRAINT_ERP = 1, // this one is not used in Bullet as of 20120730 | ||
200 | BT_CONSTRAINT_STOP_ERP, | ||
201 | BT_CONSTRAINT_CFM, | ||
202 | BT_CONSTRAINT_STOP_CFM, | ||
203 | }; | ||
204 | public enum ConstraintParamAxis : int | ||
205 | { | ||
206 | AXIS_LINEAR_X = 0, | ||
207 | AXIS_LINEAR_Y, | ||
208 | AXIS_LINEAR_Z, | ||
209 | AXIS_ANGULAR_X, | ||
210 | AXIS_ANGULAR_Y, | ||
211 | AXIS_ANGULAR_Z, | ||
212 | AXIS_LINEAR_ALL = 20, // these last three added by BulletSim so we don't have to do zillions of calls | ||
213 | AXIS_ANGULAR_ALL, | ||
214 | AXIS_ALL | ||
215 | }; | ||
216 | |||
217 | // =============================================================================== | ||
149 | static class BulletSimAPI { | 218 | static class BulletSimAPI { |
150 | 219 | ||
151 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 220 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
@@ -195,6 +264,7 @@ public static extern bool DestroyMesh(uint worldID, System.UInt64 meshKey); | |||
195 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 264 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
196 | public static extern bool CreateObject(uint worldID, ShapeData shapeData); | 265 | public static extern bool CreateObject(uint worldID, ShapeData shapeData); |
197 | 266 | ||
267 | /* Remove old functionality | ||
198 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 268 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
199 | public static extern void CreateLinkset(uint worldID, int objectCount, ShapeData[] shapeDatas); | 269 | public static extern void CreateLinkset(uint worldID, int objectCount, ShapeData[] shapeDatas); |
200 | 270 | ||
@@ -209,11 +279,15 @@ public static extern bool RemoveConstraintByID(uint worldID, uint id1); | |||
209 | 279 | ||
210 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 280 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
211 | public static extern bool RemoveConstraint(uint worldID, uint id1, uint id2); | 281 | public static extern bool RemoveConstraint(uint worldID, uint id1, uint id2); |
282 | */ | ||
212 | 283 | ||
213 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 284 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
214 | public static extern Vector3 GetObjectPosition(uint WorldID, uint id); | 285 | public static extern Vector3 GetObjectPosition(uint WorldID, uint id); |
215 | 286 | ||
216 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 287 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
288 | public static extern Quaternion GetObjectOrientation(uint WorldID, uint id); | ||
289 | |||
290 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
217 | public static extern bool SetObjectTranslation(uint worldID, uint id, Vector3 position, Quaternion rotation); | 291 | public static extern bool SetObjectTranslation(uint worldID, uint id, Vector3 position, Quaternion rotation); |
218 | 292 | ||
219 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 293 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
@@ -268,5 +342,179 @@ public static extern void DumpBulletStatistics(); | |||
268 | public delegate void DebugLogCallback([MarshalAs(UnmanagedType.LPStr)]string msg); | 342 | public delegate void DebugLogCallback([MarshalAs(UnmanagedType.LPStr)]string msg); |
269 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 343 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
270 | public static extern void SetDebugLogCallback(DebugLogCallback callback); | 344 | public static extern void SetDebugLogCallback(DebugLogCallback callback); |
345 | |||
346 | // =============================================================================== | ||
347 | // =============================================================================== | ||
348 | // =============================================================================== | ||
349 | // A new version of the API that enables moving all the logic out of the C++ code and into | ||
350 | // the C# code. This will make modifications easier for the next person. | ||
351 | // This interface passes the actual pointers to the objects in the unmanaged | ||
352 | // address space. All the management (calls for creation/destruction/lookup) | ||
353 | // is done in the C# code. | ||
354 | // The names have a "2" tacked on. This will be removed as the C# code gets rebuilt | ||
355 | // and the old code is removed. | ||
356 | |||
357 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
358 | public static extern IntPtr GetSimHandle2(uint worldID); | ||
359 | |||
360 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
361 | public static extern IntPtr GetBodyHandleWorldID2(uint worldID, uint id); | ||
362 | |||
363 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
364 | public static extern IntPtr GetBodyHandle2(IntPtr sim, uint id); | ||
365 | |||
366 | // =============================================================================== | ||
367 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
368 | public static extern IntPtr Initialize2(Vector3 maxPosition, IntPtr parms, | ||
369 | int maxCollisions, IntPtr collisionArray, | ||
370 | int maxUpdates, IntPtr updateArray); | ||
371 | |||
372 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
373 | public static extern bool UpdateParameter2(IntPtr sim, uint localID, String parm, float value); | ||
374 | |||
375 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
376 | public static extern void SetHeightmap2(IntPtr sim, float[] heightmap); | ||
377 | |||
378 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
379 | public static extern void Shutdown2(IntPtr sim); | ||
380 | |||
381 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
382 | public static extern int PhysicsStep2(IntPtr sim, float timeStep, int maxSubSteps, float fixedTimeStep, | ||
383 | out int updatedEntityCount, | ||
384 | out IntPtr updatedEntitiesPtr, | ||
385 | out int collidersCount, | ||
386 | out IntPtr collidersPtr); | ||
387 | |||
388 | /* | ||
389 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
390 | public static extern IntPtr CreateMesh2(IntPtr sim, int indicesCount, int* indices, int verticesCount, float* vertices ); | ||
391 | |||
392 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
393 | public static extern bool BuildHull2(IntPtr sim, IntPtr mesh); | ||
394 | |||
395 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
396 | public static extern bool ReleaseHull2(IntPtr sim, IntPtr mesh); | ||
397 | |||
398 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
399 | public static extern bool DestroyMesh2(IntPtr sim, IntPtr mesh); | ||
400 | |||
401 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
402 | public static extern IntPtr CreateObject2(IntPtr sim, ShapeData shapeData); | ||
403 | */ | ||
404 | |||
405 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
406 | public static extern IntPtr CreateConstraint2(IntPtr sim, IntPtr obj1, IntPtr obj2, | ||
407 | Vector3 frame1loc, Quaternion frame1rot, | ||
408 | Vector3 frame2loc, Quaternion frame2rot, | ||
409 | bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); | ||
410 | |||
411 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
412 | public static extern bool SetLinearLimits2(IntPtr constrain, Vector3 low, Vector3 hi); | ||
413 | |||
414 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
415 | public static extern bool SetAngularLimits2(IntPtr constrain, Vector3 low, Vector3 hi); | ||
416 | |||
417 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
418 | public static extern bool UseFrameOffset2(IntPtr constrain, float enable); | ||
419 | |||
420 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
421 | public static extern bool TranslationalLimitMotor2(IntPtr constrain, float enable, float targetVel, float maxMotorForce); | ||
422 | |||
423 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
424 | public static extern bool CalculateTransforms2(IntPtr constrain); | ||
425 | |||
426 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
427 | public static extern bool SetConstraintParam2(IntPtr constrain, ConstraintParams paramIndex, float value, ConstraintParamAxis axis); | ||
428 | |||
429 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
430 | public static extern bool DestroyConstraint2(IntPtr sim, IntPtr constrain); | ||
431 | |||
432 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
433 | public static extern Vector3 GetPosition2(IntPtr obj); | ||
434 | |||
435 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
436 | public static extern Quaternion GetOrientation2(IntPtr obj); | ||
437 | |||
438 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
439 | public static extern bool SetTranslation2(IntPtr obj, Vector3 position, Quaternion rotation); | ||
440 | |||
441 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
442 | public static extern bool SetVelocity2(IntPtr obj, Vector3 velocity); | ||
443 | |||
444 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
445 | public static extern bool SetAngularVelocity2(IntPtr obj, Vector3 angularVelocity); | ||
446 | |||
447 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
448 | public static extern bool SetObjectForce2(IntPtr obj, Vector3 force); | ||
449 | |||
450 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
451 | public static extern bool SetCcdMotionThreshold2(IntPtr obj, float val); | ||
452 | |||
453 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
454 | public static extern bool SetCcdSweepSphereRadius2(IntPtr obj, float val); | ||
455 | |||
456 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
457 | public static extern bool SetDamping2(IntPtr obj, float lin_damping, float ang_damping); | ||
458 | |||
459 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
460 | public static extern bool SetDeactivationTime2(IntPtr obj, float val); | ||
461 | |||
462 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
463 | public static extern bool SetSleepingThresholds2(IntPtr obj, float lin_threshold, float ang_threshold); | ||
464 | |||
465 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
466 | public static extern bool SetContactProcessingThreshold2(IntPtr obj, float val); | ||
467 | |||
468 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
469 | public static extern bool SetFriction2(IntPtr obj, float val); | ||
470 | |||
471 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
472 | public static extern bool SetRestitution2(IntPtr obj, float val); | ||
473 | |||
474 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
475 | public static extern bool SetLinearVelocity2(IntPtr obj, Vector3 val); | ||
476 | |||
477 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
478 | public static extern bool SetInterpolation2(IntPtr obj, Vector3 lin, Vector3 ang); | ||
479 | |||
480 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
481 | public static extern IntPtr SetCollisionFlags2(IntPtr obj, uint flags); | ||
482 | |||
483 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
484 | public static extern IntPtr AddToCollisionFlags2(IntPtr obj, uint flags); | ||
485 | |||
486 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
487 | public static extern IntPtr RemoveFromCollisionFlags2(IntPtr obj, uint flags); | ||
488 | |||
489 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
490 | public static extern bool SetMassProps2(IntPtr obj, float mass, Vector3 inertia); | ||
491 | |||
492 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
493 | public static extern bool UpdateInertiaTensor2(IntPtr obj); | ||
494 | |||
495 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
496 | public static extern bool SetGravity2(IntPtr obj, Vector3 val); | ||
497 | |||
498 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
499 | public static extern IntPtr ClearForces2(IntPtr obj); | ||
500 | |||
501 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
502 | public static extern bool SetMargin2(IntPtr obj, float val); | ||
503 | |||
504 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
505 | public static extern bool UpdateSingleAabb2(IntPtr world, IntPtr obj); | ||
506 | |||
507 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
508 | public static extern bool AddObjectToWorld2(IntPtr world, IntPtr obj); | ||
509 | |||
510 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
511 | public static extern bool RemoveObjectFromWorld2(IntPtr world, IntPtr obj); | ||
512 | |||
513 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
514 | public static extern bool DestroyObject2(IntPtr world, uint id); | ||
515 | |||
516 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
517 | public static extern void DumpPhysicsStatistics2(IntPtr sim); | ||
518 | |||
271 | } | 519 | } |
272 | } | 520 | } |