diff options
author | Robert Adams | 2015-09-08 04:54:16 -0700 |
---|---|---|
committer | Robert Adams | 2015-09-08 04:54:16 -0700 |
commit | e5367d822be9b05e74c859afe2d2956a3e95aa33 (patch) | |
tree | e904050a30715df587aa527d7f313755177726a7 /OpenSim/Region/PhysicsModules/BulletS/BSApiTemplate.cs | |
parent | add lost admin_reset_land method (diff) | |
parent | Deleted access control spec from [LoginService] section of standalone config.... (diff) | |
download | opensim-SC-e5367d822be9b05e74c859afe2d2956a3e95aa33.zip opensim-SC-e5367d822be9b05e74c859afe2d2956a3e95aa33.tar.gz opensim-SC-e5367d822be9b05e74c859afe2d2956a3e95aa33.tar.bz2 opensim-SC-e5367d822be9b05e74c859afe2d2956a3e95aa33.tar.xz |
Merge of ubitworkvarnew with opensim/master as of 20150905.
This integrates the OpenSim refactoring to make physics, etc into modules.
AVN physics hasn't been moved to new location.
Does not compile yet.
Merge branch 'osmaster' into mbworknew1
Diffstat (limited to 'OpenSim/Region/PhysicsModules/BulletS/BSApiTemplate.cs')
-rw-r--r-- | OpenSim/Region/PhysicsModules/BulletS/BSApiTemplate.cs | 763 |
1 files changed, 763 insertions, 0 deletions
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSApiTemplate.cs b/OpenSim/Region/PhysicsModules/BulletS/BSApiTemplate.cs new file mode 100644 index 0000000..7756b10 --- /dev/null +++ b/OpenSim/Region/PhysicsModules/BulletS/BSApiTemplate.cs | |||
@@ -0,0 +1,763 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | using System; | ||
28 | using System.Collections.Generic; | ||
29 | using System.Runtime.InteropServices; | ||
30 | using System.Security; | ||
31 | using System.Text; | ||
32 | using OpenMetaverse; | ||
33 | |||
34 | namespace OpenSim.Region.PhysicsModule.BulletS { | ||
35 | |||
36 | // Constraint type values as defined by Bullet | ||
37 | public enum ConstraintType : int | ||
38 | { | ||
39 | POINT2POINT_CONSTRAINT_TYPE = 3, | ||
40 | HINGE_CONSTRAINT_TYPE, | ||
41 | CONETWIST_CONSTRAINT_TYPE, | ||
42 | D6_CONSTRAINT_TYPE, | ||
43 | SLIDER_CONSTRAINT_TYPE, | ||
44 | CONTACT_CONSTRAINT_TYPE, | ||
45 | D6_SPRING_CONSTRAINT_TYPE, | ||
46 | GEAR_CONSTRAINT_TYPE, // added in Bullet 2.82 | ||
47 | FIXED_CONSTRAINT_TYPE, // added in Bullet 2.82 | ||
48 | MAX_CONSTRAINT_TYPE, // last type defined by Bullet | ||
49 | // | ||
50 | BS_FIXED_CONSTRAINT_TYPE = 1234 // BulletSim constraint that is fixed and unmoving | ||
51 | } | ||
52 | |||
53 | // =============================================================================== | ||
54 | [StructLayout(LayoutKind.Sequential)] | ||
55 | public struct ConvexHull | ||
56 | { | ||
57 | Vector3 Offset; | ||
58 | int VertexCount; | ||
59 | Vector3[] Vertices; | ||
60 | } | ||
61 | public enum BSPhysicsShapeType | ||
62 | { | ||
63 | SHAPE_UNKNOWN = 0, | ||
64 | SHAPE_CAPSULE = 1, | ||
65 | SHAPE_BOX = 2, | ||
66 | SHAPE_CONE = 3, | ||
67 | SHAPE_CYLINDER = 4, | ||
68 | SHAPE_SPHERE = 5, | ||
69 | SHAPE_MESH = 6, | ||
70 | SHAPE_HULL = 7, | ||
71 | // following defined by BulletSim | ||
72 | SHAPE_GROUNDPLANE = 20, | ||
73 | SHAPE_TERRAIN = 21, | ||
74 | SHAPE_COMPOUND = 22, | ||
75 | SHAPE_HEIGHTMAP = 23, | ||
76 | SHAPE_AVATAR = 24, | ||
77 | SHAPE_CONVEXHULL= 25, | ||
78 | SHAPE_GIMPACT = 26, | ||
79 | }; | ||
80 | |||
81 | // The native shapes have predefined shape hash keys | ||
82 | public enum FixedShapeKey : ulong | ||
83 | { | ||
84 | KEY_NONE = 0, | ||
85 | KEY_BOX = 1, | ||
86 | KEY_SPHERE = 2, | ||
87 | KEY_CONE = 3, | ||
88 | KEY_CYLINDER = 4, | ||
89 | KEY_CAPSULE = 5, | ||
90 | KEY_AVATAR = 6, | ||
91 | } | ||
92 | |||
93 | [StructLayout(LayoutKind.Sequential)] | ||
94 | public struct ShapeData | ||
95 | { | ||
96 | public UInt32 ID; | ||
97 | public BSPhysicsShapeType Type; | ||
98 | public Vector3 Position; | ||
99 | public Quaternion Rotation; | ||
100 | public Vector3 Velocity; | ||
101 | public Vector3 Scale; | ||
102 | public float Mass; | ||
103 | public float Buoyancy; | ||
104 | public System.UInt64 HullKey; | ||
105 | public System.UInt64 MeshKey; | ||
106 | public float Friction; | ||
107 | public float Restitution; | ||
108 | public float Collidable; // true of things bump into this | ||
109 | public float Static; // true if a static object. Otherwise gravity, etc. | ||
110 | public float Solid; // true if object cannot be passed through | ||
111 | public Vector3 Size; | ||
112 | |||
113 | // note that bools are passed as floats since bool size changes by language and architecture | ||
114 | public const float numericTrue = 1f; | ||
115 | public const float numericFalse = 0f; | ||
116 | } | ||
117 | [StructLayout(LayoutKind.Sequential)] | ||
118 | public struct SweepHit | ||
119 | { | ||
120 | public UInt32 ID; | ||
121 | public float Fraction; | ||
122 | public Vector3 Normal; | ||
123 | public Vector3 Point; | ||
124 | } | ||
125 | [StructLayout(LayoutKind.Sequential)] | ||
126 | public struct RaycastHit | ||
127 | { | ||
128 | public UInt32 ID; | ||
129 | public float Fraction; | ||
130 | public Vector3 Normal; | ||
131 | } | ||
132 | [StructLayout(LayoutKind.Sequential)] | ||
133 | public struct CollisionDesc | ||
134 | { | ||
135 | public UInt32 aID; | ||
136 | public UInt32 bID; | ||
137 | public Vector3 point; | ||
138 | public Vector3 normal; | ||
139 | public float penetration; | ||
140 | } | ||
141 | [StructLayout(LayoutKind.Sequential)] | ||
142 | public struct EntityProperties | ||
143 | { | ||
144 | public UInt32 ID; | ||
145 | public Vector3 Position; | ||
146 | public Quaternion Rotation; | ||
147 | public Vector3 Velocity; | ||
148 | public Vector3 Acceleration; | ||
149 | public Vector3 RotationalVelocity; | ||
150 | |||
151 | public override string ToString() | ||
152 | { | ||
153 | StringBuilder buff = new StringBuilder(); | ||
154 | buff.Append("<i="); | ||
155 | buff.Append(ID.ToString()); | ||
156 | buff.Append(",p="); | ||
157 | buff.Append(Position.ToString()); | ||
158 | buff.Append(",r="); | ||
159 | buff.Append(Rotation.ToString()); | ||
160 | buff.Append(",v="); | ||
161 | buff.Append(Velocity.ToString()); | ||
162 | buff.Append(",a="); | ||
163 | buff.Append(Acceleration.ToString()); | ||
164 | buff.Append(",rv="); | ||
165 | buff.Append(RotationalVelocity.ToString()); | ||
166 | buff.Append(">"); | ||
167 | return buff.ToString(); | ||
168 | } | ||
169 | } | ||
170 | |||
171 | // Format of this structure must match the definition in the C++ code | ||
172 | // NOTE: adding the X causes compile breaks if used. These are unused symbols | ||
173 | // that can be removed from both here and the unmanaged definition of this structure. | ||
174 | [StructLayout(LayoutKind.Sequential)] | ||
175 | public struct ConfigurationParameters | ||
176 | { | ||
177 | public float defaultFriction; | ||
178 | public float defaultDensity; | ||
179 | public float defaultRestitution; | ||
180 | public float collisionMargin; | ||
181 | public float gravity; | ||
182 | |||
183 | public float maxPersistantManifoldPoolSize; | ||
184 | public float maxCollisionAlgorithmPoolSize; | ||
185 | public float shouldDisableContactPoolDynamicAllocation; | ||
186 | public float shouldForceUpdateAllAabbs; | ||
187 | public float shouldRandomizeSolverOrder; | ||
188 | public float shouldSplitSimulationIslands; | ||
189 | public float shouldEnableFrictionCaching; | ||
190 | public float numberOfSolverIterations; | ||
191 | public float useSingleSidedMeshes; | ||
192 | public float globalContactBreakingThreshold; | ||
193 | |||
194 | public float physicsLoggingFrames; | ||
195 | |||
196 | public const float numericTrue = 1f; | ||
197 | public const float numericFalse = 0f; | ||
198 | } | ||
199 | |||
200 | // Parameters passed for the conversion of a mesh to a hull using Bullet's HACD library. | ||
201 | [StructLayout(LayoutKind.Sequential)] | ||
202 | public struct HACDParams | ||
203 | { | ||
204 | // usual default values | ||
205 | public float maxVerticesPerHull; // 100 | ||
206 | public float minClusters; // 2 | ||
207 | public float compacityWeight; // 0.1 | ||
208 | public float volumeWeight; // 0.0 | ||
209 | public float concavity; // 100 | ||
210 | public float addExtraDistPoints; // false | ||
211 | public float addNeighboursDistPoints; // false | ||
212 | public float addFacesPoints; // false | ||
213 | public float shouldAdjustCollisionMargin; // false | ||
214 | // VHACD | ||
215 | public float whichHACD; // zero if Bullet HACD, non-zero says VHACD | ||
216 | // http://kmamou.blogspot.ca/2014/12/v-hacd-20-parameters-description.html | ||
217 | public float vHACDresolution; // 100,000 max number of voxels generated during voxelization stage | ||
218 | public float vHACDdepth; // 20 max number of clipping stages | ||
219 | public float vHACDconcavity; // 0.0025 maximum concavity | ||
220 | public float vHACDplaneDownsampling; // 4 granularity of search for best clipping plane | ||
221 | public float vHACDconvexHullDownsampling; // 4 precision of hull gen process | ||
222 | public float vHACDalpha; // 0.05 bias toward clipping along symmetry planes | ||
223 | public float vHACDbeta; // 0.05 bias toward clipping along revolution axis | ||
224 | public float vHACDgamma; // 0.00125 max concavity when merging | ||
225 | public float vHACDpca; // 0 on/off normalizing mesh before decomp | ||
226 | public float vHACDmode; // 0 0:voxel based, 1: tetrahedron based | ||
227 | public float vHACDmaxNumVerticesPerCH; // 64 max triangles per convex hull | ||
228 | public float vHACDminVolumePerCH; // 0.0001 sampling of generated convex hulls | ||
229 | } | ||
230 | |||
231 | // The states a bullet collision object can have | ||
232 | public enum ActivationState : uint | ||
233 | { | ||
234 | ACTIVE_TAG = 1, | ||
235 | ISLAND_SLEEPING, | ||
236 | WANTS_DEACTIVATION, | ||
237 | DISABLE_DEACTIVATION, | ||
238 | DISABLE_SIMULATION, | ||
239 | } | ||
240 | |||
241 | public enum CollisionObjectTypes : int | ||
242 | { | ||
243 | CO_COLLISION_OBJECT = 1 << 0, | ||
244 | CO_RIGID_BODY = 1 << 1, | ||
245 | CO_GHOST_OBJECT = 1 << 2, | ||
246 | CO_SOFT_BODY = 1 << 3, | ||
247 | CO_HF_FLUID = 1 << 4, | ||
248 | CO_USER_TYPE = 1 << 5, | ||
249 | } | ||
250 | |||
251 | // Values used by Bullet and BulletSim to control object properties. | ||
252 | // Bullet's "CollisionFlags" has more to do with operations on the | ||
253 | // object (if collisions happen, if gravity effects it, ...). | ||
254 | public enum CollisionFlags : uint | ||
255 | { | ||
256 | CF_STATIC_OBJECT = 1 << 0, | ||
257 | CF_KINEMATIC_OBJECT = 1 << 1, | ||
258 | CF_NO_CONTACT_RESPONSE = 1 << 2, | ||
259 | CF_CUSTOM_MATERIAL_CALLBACK = 1 << 3, | ||
260 | CF_CHARACTER_OBJECT = 1 << 4, | ||
261 | CF_DISABLE_VISUALIZE_OBJECT = 1 << 5, | ||
262 | CF_DISABLE_SPU_COLLISION_PROCESS = 1 << 6, | ||
263 | // Following used by BulletSim to control collisions and updates | ||
264 | BS_SUBSCRIBE_COLLISION_EVENTS = 1 << 10, // return collision events from unmanaged to managed | ||
265 | BS_FLOATS_ON_WATER = 1 << 11, // the object should float at water level | ||
266 | BS_VEHICLE_COLLISIONS = 1 << 12, // return collisions for vehicle ground checking | ||
267 | BS_RETURN_ROOT_COMPOUND_SHAPE = 1 << 13, // return the pos/rot of the root shape in a compound shape | ||
268 | BS_NONE = 0, | ||
269 | BS_ALL = 0x7FFF // collision flags are a signed short | ||
270 | }; | ||
271 | |||
272 | // Values f collisions groups and masks | ||
273 | public enum CollisionFilterGroups : uint | ||
274 | { | ||
275 | // Don't use the bit definitions!! Define the use in a | ||
276 | // filter/mask definition below. This way collision interactions | ||
277 | // are more easily found and debugged. | ||
278 | BNoneGroup = 0, | ||
279 | BDefaultGroup = 1 << 0, // 0001 | ||
280 | BStaticGroup = 1 << 1, // 0002 | ||
281 | BKinematicGroup = 1 << 2, // 0004 | ||
282 | BDebrisGroup = 1 << 3, // 0008 | ||
283 | BSensorTrigger = 1 << 4, // 0010 | ||
284 | BCharacterGroup = 1 << 5, // 0020 | ||
285 | BAllGroup = 0x0007FFF, // collision flags are a signed short | ||
286 | // Filter groups defined by BulletSim | ||
287 | BGroundPlaneGroup = 1 << 8, // 0400 | ||
288 | BTerrainGroup = 1 << 9, // 0800 | ||
289 | BRaycastGroup = 1 << 10, // 1000 | ||
290 | BSolidGroup = 1 << 11, // 2000 | ||
291 | // BLinksetGroup = xx // a linkset proper is either static or dynamic | ||
292 | BLinksetChildGroup = 1 << 12, // 4000 | ||
293 | }; | ||
294 | |||
295 | // CFM controls the 'hardness' of the constraint. 0=fixed, 0..1=violatable. Default=0 | ||
296 | // ERP controls amount of correction per tick. Usable range=0.1..0.8. Default=0.2. | ||
297 | public enum ConstraintParams : int | ||
298 | { | ||
299 | BT_CONSTRAINT_ERP = 1, // this one is not used in Bullet as of 20120730 | ||
300 | BT_CONSTRAINT_STOP_ERP, | ||
301 | BT_CONSTRAINT_CFM, | ||
302 | BT_CONSTRAINT_STOP_CFM, | ||
303 | }; | ||
304 | public enum ConstraintParamAxis : int | ||
305 | { | ||
306 | AXIS_LINEAR_X = 0, | ||
307 | AXIS_LINEAR_Y, | ||
308 | AXIS_LINEAR_Z, | ||
309 | AXIS_ANGULAR_X, | ||
310 | AXIS_ANGULAR_Y, | ||
311 | AXIS_ANGULAR_Z, | ||
312 | AXIS_LINEAR_ALL = 20, // added by BulletSim so we don't have to do zillions of calls | ||
313 | AXIS_ANGULAR_ALL, | ||
314 | AXIS_ALL | ||
315 | }; | ||
316 | |||
317 | public abstract class BSAPITemplate | ||
318 | { | ||
319 | // Returns the name of the underlying Bullet engine | ||
320 | public abstract string BulletEngineName { get; } | ||
321 | public abstract string BulletEngineVersion { get; protected set;} | ||
322 | |||
323 | // Initialization and simulation | ||
324 | public abstract BulletWorld Initialize(Vector3 maxPosition, ConfigurationParameters parms, | ||
325 | int maxCollisions, ref CollisionDesc[] collisionArray, | ||
326 | int maxUpdates, ref EntityProperties[] updateArray | ||
327 | ); | ||
328 | |||
329 | public abstract int PhysicsStep(BulletWorld world, float timeStep, int maxSubSteps, float fixedTimeStep, | ||
330 | out int updatedEntityCount, out int collidersCount); | ||
331 | |||
332 | public abstract bool UpdateParameter(BulletWorld world, UInt32 localID, String parm, float value); | ||
333 | |||
334 | public abstract void Shutdown(BulletWorld sim); | ||
335 | |||
336 | public abstract bool PushUpdate(BulletBody obj); | ||
337 | |||
338 | // ===================================================================================== | ||
339 | // Mesh, hull, shape and body creation helper routines | ||
340 | public abstract BulletShape CreateMeshShape(BulletWorld world, | ||
341 | int indicesCount, int[] indices, | ||
342 | int verticesCount, float[] vertices ); | ||
343 | |||
344 | public abstract BulletShape CreateGImpactShape(BulletWorld world, | ||
345 | int indicesCount, int[] indices, | ||
346 | int verticesCount, float[] vertices ); | ||
347 | |||
348 | public abstract BulletShape CreateHullShape(BulletWorld world, | ||
349 | int hullCount, float[] hulls); | ||
350 | |||
351 | public abstract BulletShape BuildHullShapeFromMesh(BulletWorld world, BulletShape meshShape, HACDParams parms); | ||
352 | |||
353 | public abstract BulletShape BuildConvexHullShapeFromMesh(BulletWorld world, BulletShape meshShape); | ||
354 | |||
355 | public abstract BulletShape CreateConvexHullShape(BulletWorld world, | ||
356 | int indicesCount, int[] indices, | ||
357 | int verticesCount, float[] vertices ); | ||
358 | |||
359 | public abstract BulletShape BuildNativeShape(BulletWorld world, ShapeData shapeData); | ||
360 | |||
361 | public abstract bool IsNativeShape(BulletShape shape); | ||
362 | |||
363 | public abstract void SetShapeCollisionMargin(BulletShape shape, float margin); | ||
364 | |||
365 | public abstract BulletShape BuildCapsuleShape(BulletWorld world, float radius, float height, Vector3 scale); | ||
366 | |||
367 | public abstract BulletShape CreateCompoundShape(BulletWorld sim, bool enableDynamicAabbTree); | ||
368 | |||
369 | public abstract int GetNumberOfCompoundChildren(BulletShape cShape); | ||
370 | |||
371 | public abstract void AddChildShapeToCompoundShape(BulletShape cShape, BulletShape addShape, Vector3 pos, Quaternion rot); | ||
372 | |||
373 | public abstract BulletShape GetChildShapeFromCompoundShapeIndex(BulletShape cShape, int indx); | ||
374 | |||
375 | public abstract BulletShape RemoveChildShapeFromCompoundShapeIndex(BulletShape cShape, int indx); | ||
376 | |||
377 | public abstract void RemoveChildShapeFromCompoundShape(BulletShape cShape, BulletShape removeShape); | ||
378 | |||
379 | public abstract void UpdateChildTransform(BulletShape pShape, int childIndex, Vector3 pos, Quaternion rot, bool shouldRecalculateLocalAabb); | ||
380 | |||
381 | public abstract void RecalculateCompoundShapeLocalAabb(BulletShape cShape); | ||
382 | |||
383 | public abstract BulletShape DuplicateCollisionShape(BulletWorld sim, BulletShape srcShape, UInt32 id); | ||
384 | |||
385 | public abstract bool DeleteCollisionShape(BulletWorld world, BulletShape shape); | ||
386 | |||
387 | public abstract CollisionObjectTypes GetBodyType(BulletBody obj); | ||
388 | |||
389 | public abstract BulletBody CreateBodyFromShape(BulletWorld sim, BulletShape shape, UInt32 id, Vector3 pos, Quaternion rot); | ||
390 | |||
391 | public abstract BulletBody CreateBodyWithDefaultMotionState(BulletShape shape, UInt32 id, Vector3 pos, Quaternion rot); | ||
392 | |||
393 | public abstract BulletBody CreateGhostFromShape(BulletWorld sim, BulletShape shape, UInt32 id, Vector3 pos, Quaternion rot); | ||
394 | |||
395 | public abstract void DestroyObject(BulletWorld sim, BulletBody obj); | ||
396 | |||
397 | // ===================================================================================== | ||
398 | public abstract BulletShape CreateGroundPlaneShape(UInt32 id, float height, float collisionMargin); | ||
399 | |||
400 | public abstract BulletShape CreateTerrainShape(UInt32 id, Vector3 size, float minHeight, float maxHeight, float[] heightMap, | ||
401 | float scaleFactor, float collisionMargin); | ||
402 | |||
403 | // ===================================================================================== | ||
404 | // Constraint creation and helper routines | ||
405 | public abstract BulletConstraint Create6DofConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, | ||
406 | Vector3 frame1loc, Quaternion frame1rot, | ||
407 | Vector3 frame2loc, Quaternion frame2rot, | ||
408 | bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); | ||
409 | |||
410 | public abstract BulletConstraint Create6DofConstraintToPoint(BulletWorld world, BulletBody obj1, BulletBody obj2, | ||
411 | Vector3 joinPoint, | ||
412 | bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); | ||
413 | |||
414 | public abstract BulletConstraint Create6DofConstraintFixed(BulletWorld world, BulletBody obj1, | ||
415 | Vector3 frameInBloc, Quaternion frameInBrot, | ||
416 | bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies); | ||
417 | |||
418 | public abstract BulletConstraint Create6DofSpringConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, | ||
419 | Vector3 frame1loc, Quaternion frame1rot, | ||
420 | Vector3 frame2loc, Quaternion frame2rot, | ||
421 | bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); | ||
422 | |||
423 | public abstract BulletConstraint CreateHingeConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, | ||
424 | Vector3 pivotinA, Vector3 pivotinB, | ||
425 | Vector3 axisInA, Vector3 axisInB, | ||
426 | bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); | ||
427 | |||
428 | public abstract BulletConstraint CreateSliderConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, | ||
429 | Vector3 frameInAloc, Quaternion frameInArot, | ||
430 | Vector3 frameInBloc, Quaternion frameInBrot, | ||
431 | bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); | ||
432 | |||
433 | public abstract BulletConstraint CreateConeTwistConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, | ||
434 | Vector3 frameInAloc, Quaternion frameInArot, | ||
435 | Vector3 frameInBloc, Quaternion frameInBrot, | ||
436 | bool disableCollisionsBetweenLinkedBodies); | ||
437 | |||
438 | public abstract BulletConstraint CreateGearConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, | ||
439 | Vector3 axisInA, Vector3 axisInB, | ||
440 | float ratio, bool disableCollisionsBetweenLinkedBodies); | ||
441 | |||
442 | public abstract BulletConstraint CreatePoint2PointConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, | ||
443 | Vector3 pivotInA, Vector3 pivotInB, | ||
444 | bool disableCollisionsBetweenLinkedBodies); | ||
445 | |||
446 | public abstract void SetConstraintEnable(BulletConstraint constrain, float numericTrueFalse); | ||
447 | |||
448 | public abstract void SetConstraintNumSolverIterations(BulletConstraint constrain, float iterations); | ||
449 | |||
450 | public abstract bool SetFrames(BulletConstraint constrain, | ||
451 | Vector3 frameA, Quaternion frameArot, Vector3 frameB, Quaternion frameBrot); | ||
452 | |||
453 | public abstract bool SetLinearLimits(BulletConstraint constrain, Vector3 low, Vector3 hi); | ||
454 | |||
455 | public abstract bool SetAngularLimits(BulletConstraint constrain, Vector3 low, Vector3 hi); | ||
456 | |||
457 | public abstract bool UseFrameOffset(BulletConstraint constrain, float enable); | ||
458 | |||
459 | public abstract bool TranslationalLimitMotor(BulletConstraint constrain, float enable, float targetVel, float maxMotorForce); | ||
460 | |||
461 | public abstract bool SetBreakingImpulseThreshold(BulletConstraint constrain, float threshold); | ||
462 | |||
463 | public const int HINGE_NOT_SPECIFIED = -1; | ||
464 | public abstract bool HingeSetLimits(BulletConstraint constrain, float low, float high, float softness, float bias, float relaxation); | ||
465 | |||
466 | public abstract bool SpringEnable(BulletConstraint constrain, int index, float numericTrueFalse); | ||
467 | |||
468 | public const int SPRING_NOT_SPECIFIED = -1; | ||
469 | public abstract bool SpringSetEquilibriumPoint(BulletConstraint constrain, int index, float equilibriumPoint); | ||
470 | |||
471 | public abstract bool SpringSetStiffness(BulletConstraint constrain, int index, float stiffnesss); | ||
472 | |||
473 | public abstract bool SpringSetDamping(BulletConstraint constrain, int index, float damping); | ||
474 | |||
475 | public const int SLIDER_LOWER_LIMIT = 0; | ||
476 | public const int SLIDER_UPPER_LIMIT = 1; | ||
477 | public const int SLIDER_LINEAR = 2; | ||
478 | public const int SLIDER_ANGULAR = 3; | ||
479 | public abstract bool SliderSetLimits(BulletConstraint constrain, int lowerUpper, int linAng, float val); | ||
480 | |||
481 | public const int SLIDER_SET_SOFTNESS = 4; | ||
482 | public const int SLIDER_SET_RESTITUTION = 5; | ||
483 | public const int SLIDER_SET_DAMPING = 6; | ||
484 | public const int SLIDER_SET_DIRECTION = 7; | ||
485 | public const int SLIDER_SET_LIMIT = 8; | ||
486 | public const int SLIDER_SET_ORTHO = 9; | ||
487 | public abstract bool SliderSet(BulletConstraint constrain, int softRestDamp, int dirLimOrtho, int linAng, float val); | ||
488 | |||
489 | public abstract bool SliderMotorEnable(BulletConstraint constrain, int linAng, float numericTrueFalse); | ||
490 | |||
491 | public const int SLIDER_MOTOR_VELOCITY = 10; | ||
492 | public const int SLIDER_MAX_MOTOR_FORCE = 11; | ||
493 | public abstract bool SliderMotor(BulletConstraint constrain, int forceVel, int linAng, float val); | ||
494 | |||
495 | public abstract bool CalculateTransforms(BulletConstraint constrain); | ||
496 | |||
497 | public abstract bool SetConstraintParam(BulletConstraint constrain, ConstraintParams paramIndex, float value, ConstraintParamAxis axis); | ||
498 | |||
499 | public abstract bool DestroyConstraint(BulletWorld world, BulletConstraint constrain); | ||
500 | |||
501 | // ===================================================================================== | ||
502 | // btCollisionWorld entries | ||
503 | public abstract void UpdateSingleAabb(BulletWorld world, BulletBody obj); | ||
504 | |||
505 | public abstract void UpdateAabbs(BulletWorld world); | ||
506 | |||
507 | public abstract bool GetForceUpdateAllAabbs(BulletWorld world); | ||
508 | |||
509 | public abstract void SetForceUpdateAllAabbs(BulletWorld world, bool force); | ||
510 | |||
511 | // ===================================================================================== | ||
512 | // btDynamicsWorld entries | ||
513 | // public abstract bool AddObjectToWorld(BulletWorld world, BulletBody obj, Vector3 pos, Quaternion rot); | ||
514 | public abstract bool AddObjectToWorld(BulletWorld world, BulletBody obj); | ||
515 | |||
516 | public abstract bool RemoveObjectFromWorld(BulletWorld world, BulletBody obj); | ||
517 | |||
518 | public abstract bool ClearCollisionProxyCache(BulletWorld world, BulletBody obj); | ||
519 | |||
520 | public abstract bool AddConstraintToWorld(BulletWorld world, BulletConstraint constrain, bool disableCollisionsBetweenLinkedObjects); | ||
521 | |||
522 | public abstract bool RemoveConstraintFromWorld(BulletWorld world, BulletConstraint constrain); | ||
523 | // ===================================================================================== | ||
524 | // btCollisionObject entries | ||
525 | public abstract Vector3 GetAnisotripicFriction(BulletConstraint constrain); | ||
526 | |||
527 | public abstract Vector3 SetAnisotripicFriction(BulletConstraint constrain, Vector3 frict); | ||
528 | |||
529 | public abstract bool HasAnisotripicFriction(BulletConstraint constrain); | ||
530 | |||
531 | public abstract void SetContactProcessingThreshold(BulletBody obj, float val); | ||
532 | |||
533 | public abstract float GetContactProcessingThreshold(BulletBody obj); | ||
534 | |||
535 | public abstract bool IsStaticObject(BulletBody obj); | ||
536 | |||
537 | public abstract bool IsKinematicObject(BulletBody obj); | ||
538 | |||
539 | public abstract bool IsStaticOrKinematicObject(BulletBody obj); | ||
540 | |||
541 | public abstract bool HasContactResponse(BulletBody obj); | ||
542 | |||
543 | public abstract void SetCollisionShape(BulletWorld sim, BulletBody obj, BulletShape shape); | ||
544 | |||
545 | public abstract BulletShape GetCollisionShape(BulletBody obj); | ||
546 | |||
547 | public abstract int GetActivationState(BulletBody obj); | ||
548 | |||
549 | public abstract void SetActivationState(BulletBody obj, int state); | ||
550 | |||
551 | public abstract void SetDeactivationTime(BulletBody obj, float dtime); | ||
552 | |||
553 | public abstract float GetDeactivationTime(BulletBody obj); | ||
554 | |||
555 | public abstract void ForceActivationState(BulletBody obj, ActivationState state); | ||
556 | |||
557 | public abstract void Activate(BulletBody obj, bool forceActivation); | ||
558 | |||
559 | public abstract bool IsActive(BulletBody obj); | ||
560 | |||
561 | public abstract void SetRestitution(BulletBody obj, float val); | ||
562 | |||
563 | public abstract float GetRestitution(BulletBody obj); | ||
564 | |||
565 | public abstract void SetFriction(BulletBody obj, float val); | ||
566 | |||
567 | public abstract float GetFriction(BulletBody obj); | ||
568 | |||
569 | public abstract Vector3 GetPosition(BulletBody obj); | ||
570 | |||
571 | public abstract Quaternion GetOrientation(BulletBody obj); | ||
572 | |||
573 | public abstract void SetTranslation(BulletBody obj, Vector3 position, Quaternion rotation); | ||
574 | |||
575 | // public abstract IntPtr GetBroadphaseHandle(BulletBody obj); | ||
576 | |||
577 | // public abstract void SetBroadphaseHandle(BulletBody obj, IntPtr handle); | ||
578 | |||
579 | public abstract void SetInterpolationLinearVelocity(BulletBody obj, Vector3 vel); | ||
580 | |||
581 | public abstract void SetInterpolationAngularVelocity(BulletBody obj, Vector3 vel); | ||
582 | |||
583 | public abstract void SetInterpolationVelocity(BulletBody obj, Vector3 linearVel, Vector3 angularVel); | ||
584 | |||
585 | public abstract float GetHitFraction(BulletBody obj); | ||
586 | |||
587 | public abstract void SetHitFraction(BulletBody obj, float val); | ||
588 | |||
589 | public abstract CollisionFlags GetCollisionFlags(BulletBody obj); | ||
590 | |||
591 | public abstract CollisionFlags SetCollisionFlags(BulletBody obj, CollisionFlags flags); | ||
592 | |||
593 | public abstract CollisionFlags AddToCollisionFlags(BulletBody obj, CollisionFlags flags); | ||
594 | |||
595 | public abstract CollisionFlags RemoveFromCollisionFlags(BulletBody obj, CollisionFlags flags); | ||
596 | |||
597 | public abstract float GetCcdMotionThreshold(BulletBody obj); | ||
598 | |||
599 | public abstract void SetCcdMotionThreshold(BulletBody obj, float val); | ||
600 | |||
601 | public abstract float GetCcdSweptSphereRadius(BulletBody obj); | ||
602 | |||
603 | public abstract void SetCcdSweptSphereRadius(BulletBody obj, float val); | ||
604 | |||
605 | public abstract IntPtr GetUserPointer(BulletBody obj); | ||
606 | |||
607 | public abstract void SetUserPointer(BulletBody obj, IntPtr val); | ||
608 | |||
609 | // ===================================================================================== | ||
610 | // btRigidBody entries | ||
611 | public abstract void ApplyGravity(BulletBody obj); | ||
612 | |||
613 | public abstract void SetGravity(BulletBody obj, Vector3 val); | ||
614 | |||
615 | public abstract Vector3 GetGravity(BulletBody obj); | ||
616 | |||
617 | public abstract void SetDamping(BulletBody obj, float lin_damping, float ang_damping); | ||
618 | |||
619 | public abstract void SetLinearDamping(BulletBody obj, float lin_damping); | ||
620 | |||
621 | public abstract void SetAngularDamping(BulletBody obj, float ang_damping); | ||
622 | |||
623 | public abstract float GetLinearDamping(BulletBody obj); | ||
624 | |||
625 | public abstract float GetAngularDamping(BulletBody obj); | ||
626 | |||
627 | public abstract float GetLinearSleepingThreshold(BulletBody obj); | ||
628 | |||
629 | public abstract void ApplyDamping(BulletBody obj, float timeStep); | ||
630 | |||
631 | public abstract void SetMassProps(BulletBody obj, float mass, Vector3 inertia); | ||
632 | |||
633 | public abstract Vector3 GetLinearFactor(BulletBody obj); | ||
634 | |||
635 | public abstract void SetLinearFactor(BulletBody obj, Vector3 factor); | ||
636 | |||
637 | public abstract void SetCenterOfMassByPosRot(BulletBody obj, Vector3 pos, Quaternion rot); | ||
638 | |||
639 | // Add a force to the object as if its mass is one. | ||
640 | public abstract void ApplyCentralForce(BulletBody obj, Vector3 force); | ||
641 | |||
642 | // Set the force being applied to the object as if its mass is one. | ||
643 | public abstract void SetObjectForce(BulletBody obj, Vector3 force); | ||
644 | |||
645 | public abstract Vector3 GetTotalForce(BulletBody obj); | ||
646 | |||
647 | public abstract Vector3 GetTotalTorque(BulletBody obj); | ||
648 | |||
649 | public abstract Vector3 GetInvInertiaDiagLocal(BulletBody obj); | ||
650 | |||
651 | public abstract void SetInvInertiaDiagLocal(BulletBody obj, Vector3 inert); | ||
652 | |||
653 | public abstract void SetSleepingThresholds(BulletBody obj, float lin_threshold, float ang_threshold); | ||
654 | |||
655 | public abstract void ApplyTorque(BulletBody obj, Vector3 torque); | ||
656 | |||
657 | // Apply force at the given point. Will add torque to the object. | ||
658 | public abstract void ApplyForce(BulletBody obj, Vector3 force, Vector3 pos); | ||
659 | |||
660 | // Apply impulse to the object. Same as "ApplycentralForce" but force scaled by object's mass. | ||
661 | public abstract void ApplyCentralImpulse(BulletBody obj, Vector3 imp); | ||
662 | |||
663 | // Apply impulse to the object's torque. Force is scaled by object's mass. | ||
664 | public abstract void ApplyTorqueImpulse(BulletBody obj, Vector3 imp); | ||
665 | |||
666 | // Apply impulse at the point given. For is scaled by object's mass and effects both linear and angular forces. | ||
667 | public abstract void ApplyImpulse(BulletBody obj, Vector3 imp, Vector3 pos); | ||
668 | |||
669 | public abstract void ClearForces(BulletBody obj); | ||
670 | |||
671 | public abstract void ClearAllForces(BulletBody obj); | ||
672 | |||
673 | public abstract void UpdateInertiaTensor(BulletBody obj); | ||
674 | |||
675 | public abstract Vector3 GetLinearVelocity(BulletBody obj); | ||
676 | |||
677 | public abstract Vector3 GetAngularVelocity(BulletBody obj); | ||
678 | |||
679 | public abstract void SetLinearVelocity(BulletBody obj, Vector3 val); | ||
680 | |||
681 | public abstract void SetAngularVelocity(BulletBody obj, Vector3 angularVelocity); | ||
682 | |||
683 | public abstract Vector3 GetVelocityInLocalPoint(BulletBody obj, Vector3 pos); | ||
684 | |||
685 | public abstract void Translate(BulletBody obj, Vector3 trans); | ||
686 | |||
687 | public abstract void UpdateDeactivation(BulletBody obj, float timeStep); | ||
688 | |||
689 | public abstract bool WantsSleeping(BulletBody obj); | ||
690 | |||
691 | public abstract void SetAngularFactor(BulletBody obj, float factor); | ||
692 | |||
693 | public abstract void SetAngularFactorV(BulletBody obj, Vector3 factor); | ||
694 | |||
695 | public abstract Vector3 GetAngularFactor(BulletBody obj); | ||
696 | |||
697 | public abstract bool IsInWorld(BulletWorld world, BulletBody obj); | ||
698 | |||
699 | public abstract void AddConstraintRef(BulletBody obj, BulletConstraint constrain); | ||
700 | |||
701 | public abstract void RemoveConstraintRef(BulletBody obj, BulletConstraint constrain); | ||
702 | |||
703 | public abstract BulletConstraint GetConstraintRef(BulletBody obj, int index); | ||
704 | |||
705 | public abstract int GetNumConstraintRefs(BulletBody obj); | ||
706 | |||
707 | public abstract bool SetCollisionGroupMask(BulletBody body, UInt32 filter, UInt32 mask); | ||
708 | |||
709 | // ===================================================================================== | ||
710 | // btCollisionShape entries | ||
711 | |||
712 | public abstract float GetAngularMotionDisc(BulletShape shape); | ||
713 | |||
714 | public abstract float GetContactBreakingThreshold(BulletShape shape, float defaultFactor); | ||
715 | |||
716 | public abstract bool IsPolyhedral(BulletShape shape); | ||
717 | |||
718 | public abstract bool IsConvex2d(BulletShape shape); | ||
719 | |||
720 | public abstract bool IsConvex(BulletShape shape); | ||
721 | |||
722 | public abstract bool IsNonMoving(BulletShape shape); | ||
723 | |||
724 | public abstract bool IsConcave(BulletShape shape); | ||
725 | |||
726 | public abstract bool IsCompound(BulletShape shape); | ||
727 | |||
728 | public abstract bool IsSoftBody(BulletShape shape); | ||
729 | |||
730 | public abstract bool IsInfinite(BulletShape shape); | ||
731 | |||
732 | public abstract void SetLocalScaling(BulletShape shape, Vector3 scale); | ||
733 | |||
734 | public abstract Vector3 GetLocalScaling(BulletShape shape); | ||
735 | |||
736 | public abstract Vector3 CalculateLocalInertia(BulletShape shape, float mass); | ||
737 | |||
738 | public abstract int GetShapeType(BulletShape shape); | ||
739 | |||
740 | public abstract void SetMargin(BulletShape shape, float val); | ||
741 | |||
742 | public abstract float GetMargin(BulletShape shape); | ||
743 | |||
744 | // ===================================================================================== | ||
745 | // Debugging | ||
746 | public virtual void DumpRigidBody(BulletWorld sim, BulletBody collisionObject) { } | ||
747 | |||
748 | public virtual void DumpCollisionShape(BulletWorld sim, BulletShape collisionShape) { } | ||
749 | |||
750 | public virtual void DumpConstraint(BulletWorld sim, BulletConstraint constrain) { } | ||
751 | |||
752 | public virtual void DumpActivationInfo(BulletWorld sim) { } | ||
753 | |||
754 | public virtual void DumpAllInfo(BulletWorld sim) { } | ||
755 | |||
756 | public virtual void DumpPhysicsStatistics(BulletWorld sim) { } | ||
757 | |||
758 | public virtual void ResetBroadphasePool(BulletWorld sim) { } | ||
759 | |||
760 | public virtual void ResetConstraintSolver(BulletWorld sim) { } | ||
761 | |||
762 | }; | ||
763 | } | ||