|
@@ -0,0 +1,662 @@
|
|
|
+/*
|
|
|
+ * Copyright (c) Contributors, http://opensimulator.org/
|
|
|
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
|
|
|
+ *
|
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
|
+ * modification, are permitted provided that the following conditions are met:
|
|
|
+ * * Redistributions of source code must retain the above copyright
|
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
|
+ * * Redistributions in binary form must reproduce the above copyrightD
|
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
|
+ * * Neither the name of the OpenSimulator Project nor the
|
|
|
+ * names of its contributors may be used to endorse or promote products
|
|
|
+ * derived from this software without specific prior written permission.
|
|
|
+ *
|
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
|
|
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
|
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
+ */
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Runtime.InteropServices;
|
|
|
+using System.Security;
|
|
|
+using System.Text;
|
|
|
+using OpenMetaverse;
|
|
|
+
|
|
|
+namespace OpenSim.Region.Physics.BulletSPlugin {
|
|
|
+
|
|
|
+ // Constraint type values as defined by Bullet
|
|
|
+public enum ConstraintType : int
|
|
|
+{
|
|
|
+ POINT2POINT_CONSTRAINT_TYPE = 3,
|
|
|
+ HINGE_CONSTRAINT_TYPE,
|
|
|
+ CONETWIST_CONSTRAINT_TYPE,
|
|
|
+ D6_CONSTRAINT_TYPE,
|
|
|
+ SLIDER_CONSTRAINT_TYPE,
|
|
|
+ CONTACT_CONSTRAINT_TYPE,
|
|
|
+ D6_SPRING_CONSTRAINT_TYPE,
|
|
|
+ MAX_CONSTRAINT_TYPE
|
|
|
+}
|
|
|
+
|
|
|
+// ===============================================================================
|
|
|
+[StructLayout(LayoutKind.Sequential)]
|
|
|
+public struct ConvexHull
|
|
|
+{
|
|
|
+ Vector3 Offset;
|
|
|
+ int VertexCount;
|
|
|
+ Vector3[] Vertices;
|
|
|
+}
|
|
|
+public enum BSPhysicsShapeType
|
|
|
+{
|
|
|
+ SHAPE_UNKNOWN = 0,
|
|
|
+ SHAPE_CAPSULE = 1,
|
|
|
+ SHAPE_BOX = 2,
|
|
|
+ SHAPE_CONE = 3,
|
|
|
+ SHAPE_CYLINDER = 4,
|
|
|
+ SHAPE_SPHERE = 5,
|
|
|
+ SHAPE_MESH = 6,
|
|
|
+ SHAPE_HULL = 7,
|
|
|
+ // following defined by BulletSim
|
|
|
+ SHAPE_GROUNDPLANE = 20,
|
|
|
+ SHAPE_TERRAIN = 21,
|
|
|
+ SHAPE_COMPOUND = 22,
|
|
|
+ SHAPE_HEIGHTMAP = 23,
|
|
|
+ SHAPE_AVATAR = 24,
|
|
|
+};
|
|
|
+
|
|
|
+// The native shapes have predefined shape hash keys
|
|
|
+public enum FixedShapeKey : ulong
|
|
|
+{
|
|
|
+ KEY_NONE = 0,
|
|
|
+ KEY_BOX = 1,
|
|
|
+ KEY_SPHERE = 2,
|
|
|
+ KEY_CONE = 3,
|
|
|
+ KEY_CYLINDER = 4,
|
|
|
+ KEY_CAPSULE = 5,
|
|
|
+ KEY_AVATAR = 6,
|
|
|
+}
|
|
|
+
|
|
|
+[StructLayout(LayoutKind.Sequential)]
|
|
|
+public struct ShapeData
|
|
|
+{
|
|
|
+ public uint ID;
|
|
|
+ public BSPhysicsShapeType Type;
|
|
|
+ public Vector3 Position;
|
|
|
+ public Quaternion Rotation;
|
|
|
+ public Vector3 Velocity;
|
|
|
+ public Vector3 Scale;
|
|
|
+ public float Mass;
|
|
|
+ public float Buoyancy;
|
|
|
+ public System.UInt64 HullKey;
|
|
|
+ public System.UInt64 MeshKey;
|
|
|
+ public float Friction;
|
|
|
+ public float Restitution;
|
|
|
+ public float Collidable; // true of things bump into this
|
|
|
+ public float Static; // true if a static object. Otherwise gravity, etc.
|
|
|
+ public float Solid; // true if object cannot be passed through
|
|
|
+ public Vector3 Size;
|
|
|
+
|
|
|
+ // note that bools are passed as floats since bool size changes by language and architecture
|
|
|
+ public const float numericTrue = 1f;
|
|
|
+ public const float numericFalse = 0f;
|
|
|
+}
|
|
|
+[StructLayout(LayoutKind.Sequential)]
|
|
|
+public struct SweepHit
|
|
|
+{
|
|
|
+ public uint ID;
|
|
|
+ public float Fraction;
|
|
|
+ public Vector3 Normal;
|
|
|
+ public Vector3 Point;
|
|
|
+}
|
|
|
+[StructLayout(LayoutKind.Sequential)]
|
|
|
+public struct RaycastHit
|
|
|
+{
|
|
|
+ public uint ID;
|
|
|
+ public float Fraction;
|
|
|
+ public Vector3 Normal;
|
|
|
+}
|
|
|
+[StructLayout(LayoutKind.Sequential)]
|
|
|
+public struct CollisionDesc
|
|
|
+{
|
|
|
+ public uint aID;
|
|
|
+ public uint bID;
|
|
|
+ public Vector3 point;
|
|
|
+ public Vector3 normal;
|
|
|
+}
|
|
|
+[StructLayout(LayoutKind.Sequential)]
|
|
|
+public struct EntityProperties
|
|
|
+{
|
|
|
+ public uint ID;
|
|
|
+ public Vector3 Position;
|
|
|
+ public Quaternion Rotation;
|
|
|
+ public Vector3 Velocity;
|
|
|
+ public Vector3 Acceleration;
|
|
|
+ public Vector3 RotationalVelocity;
|
|
|
+}
|
|
|
+
|
|
|
+// Format of this structure must match the definition in the C++ code
|
|
|
+// NOTE: adding the X causes compile breaks if used. These are unused symbols
|
|
|
+// that can be removed from both here and the unmanaged definition of this structure.
|
|
|
+[StructLayout(LayoutKind.Sequential)]
|
|
|
+public struct ConfigurationParameters
|
|
|
+{
|
|
|
+ public float defaultFriction;
|
|
|
+ public float defaultDensity;
|
|
|
+ public float defaultRestitution;
|
|
|
+ public float collisionMargin;
|
|
|
+ public float gravity;
|
|
|
+
|
|
|
+ public float XlinearDamping;
|
|
|
+ public float XangularDamping;
|
|
|
+ public float XdeactivationTime;
|
|
|
+ public float XlinearSleepingThreshold;
|
|
|
+ public float XangularSleepingThreshold;
|
|
|
+ public float XccdMotionThreshold;
|
|
|
+ public float XccdSweptSphereRadius;
|
|
|
+ public float XcontactProcessingThreshold;
|
|
|
+
|
|
|
+ public float XterrainImplementation;
|
|
|
+ public float XterrainFriction;
|
|
|
+ public float XterrainHitFraction;
|
|
|
+ public float XterrainRestitution;
|
|
|
+ public float XterrainCollisionMargin;
|
|
|
+
|
|
|
+ public float XavatarFriction;
|
|
|
+ public float XavatarStandingFriction;
|
|
|
+ public float XavatarDensity;
|
|
|
+ public float XavatarRestitution;
|
|
|
+ public float XavatarCapsuleWidth;
|
|
|
+ public float XavatarCapsuleDepth;
|
|
|
+ public float XavatarCapsuleHeight;
|
|
|
+ public float XavatarContactProcessingThreshold;
|
|
|
+
|
|
|
+ public float XvehicleAngularDamping;
|
|
|
+
|
|
|
+ public float maxPersistantManifoldPoolSize;
|
|
|
+ public float maxCollisionAlgorithmPoolSize;
|
|
|
+ public float shouldDisableContactPoolDynamicAllocation;
|
|
|
+ public float shouldForceUpdateAllAabbs;
|
|
|
+ public float shouldRandomizeSolverOrder;
|
|
|
+ public float shouldSplitSimulationIslands;
|
|
|
+ public float shouldEnableFrictionCaching;
|
|
|
+ public float numberOfSolverIterations;
|
|
|
+
|
|
|
+ public float XlinksetImplementation;
|
|
|
+ public float XlinkConstraintUseFrameOffset;
|
|
|
+ public float XlinkConstraintEnableTransMotor;
|
|
|
+ public float XlinkConstraintTransMotorMaxVel;
|
|
|
+ public float XlinkConstraintTransMotorMaxForce;
|
|
|
+ public float XlinkConstraintERP;
|
|
|
+ public float XlinkConstraintCFM;
|
|
|
+ public float XlinkConstraintSolverIterations;
|
|
|
+
|
|
|
+ public float physicsLoggingFrames;
|
|
|
+
|
|
|
+ public const float numericTrue = 1f;
|
|
|
+ public const float numericFalse = 0f;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+// The states a bullet collision object can have
|
|
|
+public enum ActivationState : uint
|
|
|
+{
|
|
|
+ ACTIVE_TAG = 1,
|
|
|
+ ISLAND_SLEEPING,
|
|
|
+ WANTS_DEACTIVATION,
|
|
|
+ DISABLE_DEACTIVATION,
|
|
|
+ DISABLE_SIMULATION,
|
|
|
+}
|
|
|
+
|
|
|
+public enum CollisionObjectTypes : int
|
|
|
+{
|
|
|
+ CO_COLLISION_OBJECT = 1 << 0,
|
|
|
+ CO_RIGID_BODY = 1 << 1,
|
|
|
+ CO_GHOST_OBJECT = 1 << 2,
|
|
|
+ CO_SOFT_BODY = 1 << 3,
|
|
|
+ CO_HF_FLUID = 1 << 4,
|
|
|
+ CO_USER_TYPE = 1 << 5,
|
|
|
+}
|
|
|
+
|
|
|
+// Values used by Bullet and BulletSim to control object properties.
|
|
|
+// Bullet's "CollisionFlags" has more to do with operations on the
|
|
|
+// object (if collisions happen, if gravity effects it, ...).
|
|
|
+public enum CollisionFlags : uint
|
|
|
+{
|
|
|
+ CF_STATIC_OBJECT = 1 << 0,
|
|
|
+ CF_KINEMATIC_OBJECT = 1 << 1,
|
|
|
+ CF_NO_CONTACT_RESPONSE = 1 << 2,
|
|
|
+ CF_CUSTOM_MATERIAL_CALLBACK = 1 << 3,
|
|
|
+ CF_CHARACTER_OBJECT = 1 << 4,
|
|
|
+ CF_DISABLE_VISUALIZE_OBJECT = 1 << 5,
|
|
|
+ CF_DISABLE_SPU_COLLISION_PROCESS = 1 << 6,
|
|
|
+ // Following used by BulletSim to control collisions and updates
|
|
|
+ BS_SUBSCRIBE_COLLISION_EVENTS = 1 << 10,
|
|
|
+ BS_FLOATS_ON_WATER = 1 << 11,
|
|
|
+ BS_VEHICLE_COLLISIONS = 1 << 12,
|
|
|
+ BS_NONE = 0,
|
|
|
+ BS_ALL = 0xFFFFFFFF
|
|
|
+};
|
|
|
+
|
|
|
+// Values f collisions groups and masks
|
|
|
+public enum CollisionFilterGroups : uint
|
|
|
+{
|
|
|
+ // Don't use the bit definitions!! Define the use in a
|
|
|
+ // filter/mask definition below. This way collision interactions
|
|
|
+ // are more easily found and debugged.
|
|
|
+ BNoneGroup = 0,
|
|
|
+ BDefaultGroup = 1 << 0, // 0001
|
|
|
+ BStaticGroup = 1 << 1, // 0002
|
|
|
+ BKinematicGroup = 1 << 2, // 0004
|
|
|
+ BDebrisGroup = 1 << 3, // 0008
|
|
|
+ BSensorTrigger = 1 << 4, // 0010
|
|
|
+ BCharacterGroup = 1 << 5, // 0020
|
|
|
+ BAllGroup = 0x000FFFFF,
|
|
|
+ // Filter groups defined by BulletSim
|
|
|
+ BGroundPlaneGroup = 1 << 10, // 0400
|
|
|
+ BTerrainGroup = 1 << 11, // 0800
|
|
|
+ BRaycastGroup = 1 << 12, // 1000
|
|
|
+ BSolidGroup = 1 << 13, // 2000
|
|
|
+ // BLinksetGroup = xx // a linkset proper is either static or dynamic
|
|
|
+ BLinksetChildGroup = 1 << 14, // 4000
|
|
|
+};
|
|
|
+
|
|
|
+// CFM controls the 'hardness' of the constraint. 0=fixed, 0..1=violatable. Default=0
|
|
|
+// ERP controls amount of correction per tick. Usable range=0.1..0.8. Default=0.2.
|
|
|
+public enum ConstraintParams : int
|
|
|
+{
|
|
|
+ BT_CONSTRAINT_ERP = 1, // this one is not used in Bullet as of 20120730
|
|
|
+ BT_CONSTRAINT_STOP_ERP,
|
|
|
+ BT_CONSTRAINT_CFM,
|
|
|
+ BT_CONSTRAINT_STOP_CFM,
|
|
|
+};
|
|
|
+public enum ConstraintParamAxis : int
|
|
|
+{
|
|
|
+ AXIS_LINEAR_X = 0,
|
|
|
+ AXIS_LINEAR_Y,
|
|
|
+ AXIS_LINEAR_Z,
|
|
|
+ AXIS_ANGULAR_X,
|
|
|
+ AXIS_ANGULAR_Y,
|
|
|
+ AXIS_ANGULAR_Z,
|
|
|
+ AXIS_LINEAR_ALL = 20, // these last three added by BulletSim so we don't have to do zillions of calls
|
|
|
+ AXIS_ANGULAR_ALL,
|
|
|
+ AXIS_ALL
|
|
|
+};
|
|
|
+
|
|
|
+public abstract class BSAPITemplate
|
|
|
+{
|
|
|
+// Returns the name of the underlying Bullet engine
|
|
|
+public abstract string BulletEngineName { get; }
|
|
|
+public abstract string BulletEngineVersion { get; protected set;}
|
|
|
+
|
|
|
+// Initialization and simulation
|
|
|
+public abstract BulletWorld Initialize(Vector3 maxPosition, ConfigurationParameters parms,
|
|
|
+ int maxCollisions, ref CollisionDesc[] collisionArray,
|
|
|
+ int maxUpdates, ref EntityProperties[] updateArray
|
|
|
+ );
|
|
|
+
|
|
|
+public abstract int PhysicsStep(BulletWorld world, float timeStep, int maxSubSteps, float fixedTimeStep,
|
|
|
+ out int updatedEntityCount, out int collidersCount);
|
|
|
+
|
|
|
+public abstract bool UpdateParameter(BulletWorld world, uint localID, String parm, float value);
|
|
|
+
|
|
|
+public abstract void Shutdown(BulletWorld sim);
|
|
|
+
|
|
|
+public abstract bool PushUpdate(BulletBody obj);
|
|
|
+
|
|
|
+// =====================================================================================
|
|
|
+// Mesh, hull, shape and body creation helper routines
|
|
|
+public abstract BulletShape CreateMeshShape(BulletWorld world,
|
|
|
+ int indicesCount, int[] indices,
|
|
|
+ int verticesCount, float[] vertices );
|
|
|
+
|
|
|
+public abstract BulletShape CreateHullShape(BulletWorld world,
|
|
|
+ int hullCount, float[] hulls);
|
|
|
+
|
|
|
+public abstract BulletShape BuildHullShapeFromMesh(BulletWorld world, BulletShape meshShape);
|
|
|
+
|
|
|
+public abstract BulletShape BuildNativeShape(BulletWorld world, ShapeData shapeData);
|
|
|
+
|
|
|
+public abstract bool IsNativeShape(BulletShape shape);
|
|
|
+
|
|
|
+public abstract void SetShapeCollisionMargin(BulletShape shape, float margin);
|
|
|
+
|
|
|
+public abstract BulletShape BuildCapsuleShape(BulletWorld world, float radius, float height, Vector3 scale);
|
|
|
+
|
|
|
+public abstract BulletShape CreateCompoundShape(BulletWorld sim, bool enableDynamicAabbTree);
|
|
|
+
|
|
|
+public abstract int GetNumberOfCompoundChildren(BulletShape cShape);
|
|
|
+
|
|
|
+public abstract void AddChildShapeToCompoundShape(BulletShape cShape, BulletShape addShape, Vector3 pos, Quaternion rot);
|
|
|
+
|
|
|
+public abstract BulletShape GetChildShapeFromCompoundShapeIndex(BulletShape cShape, int indx);
|
|
|
+
|
|
|
+public abstract BulletShape RemoveChildShapeFromCompoundShapeIndex(BulletShape cShape, int indx);
|
|
|
+
|
|
|
+public abstract void RemoveChildShapeFromCompoundShape(BulletShape cShape, BulletShape removeShape);
|
|
|
+
|
|
|
+public abstract void RecalculateCompoundShapeLocalAabb(BulletShape cShape);
|
|
|
+
|
|
|
+public abstract BulletShape DuplicateCollisionShape(BulletWorld sim, BulletShape srcShape, uint id);
|
|
|
+
|
|
|
+
|
|
|
+public abstract bool DeleteCollisionShape(BulletWorld world, BulletShape shape);
|
|
|
+
|
|
|
+public abstract int GetBodyType(BulletBody obj);
|
|
|
+
|
|
|
+public abstract BulletBody CreateBodyFromShape(BulletWorld sim, BulletShape shape, uint id, Vector3 pos, Quaternion rot);
|
|
|
+
|
|
|
+public abstract BulletBody CreateBodyWithDefaultMotionState(BulletShape shape, uint id, Vector3 pos, Quaternion rot);
|
|
|
+
|
|
|
+public abstract BulletBody CreateGhostFromShape(BulletWorld sim, BulletShape shape, uint id, Vector3 pos, Quaternion rot);
|
|
|
+
|
|
|
+public abstract void DestroyObject(BulletWorld sim, BulletBody obj);
|
|
|
+
|
|
|
+// =====================================================================================
|
|
|
+public abstract BulletShape CreateGroundPlaneShape(uint id, float height, float collisionMargin);
|
|
|
+
|
|
|
+public abstract BulletShape CreateTerrainShape(uint id, Vector3 size, float minHeight, float maxHeight, float[] heightMap,
|
|
|
+ float scaleFactor, float collisionMargin);
|
|
|
+
|
|
|
+// =====================================================================================
|
|
|
+// Constraint creation and helper routines
|
|
|
+public abstract BulletConstraint Create6DofConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
|
|
|
+ Vector3 frame1loc, Quaternion frame1rot,
|
|
|
+ Vector3 frame2loc, Quaternion frame2rot,
|
|
|
+ bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
|
|
|
+
|
|
|
+public abstract BulletConstraint Create6DofConstraintToPoint(BulletWorld world, BulletBody obj1, BulletBody obj2,
|
|
|
+ Vector3 joinPoint,
|
|
|
+ bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
|
|
|
+
|
|
|
+public abstract BulletConstraint CreateHingeConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
|
|
|
+ Vector3 pivotinA, Vector3 pivotinB,
|
|
|
+ Vector3 axisInA, Vector3 axisInB,
|
|
|
+ bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
|
|
|
+
|
|
|
+public abstract void SetConstraintEnable(BulletConstraint constrain, float numericTrueFalse);
|
|
|
+
|
|
|
+public abstract void SetConstraintNumSolverIterations(BulletConstraint constrain, float iterations);
|
|
|
+
|
|
|
+public abstract bool SetFrames(BulletConstraint constrain,
|
|
|
+ Vector3 frameA, Quaternion frameArot, Vector3 frameB, Quaternion frameBrot);
|
|
|
+
|
|
|
+public abstract bool SetLinearLimits(BulletConstraint constrain, Vector3 low, Vector3 hi);
|
|
|
+
|
|
|
+public abstract bool SetAngularLimits(BulletConstraint constrain, Vector3 low, Vector3 hi);
|
|
|
+
|
|
|
+public abstract bool UseFrameOffset(BulletConstraint constrain, float enable);
|
|
|
+
|
|
|
+public abstract bool TranslationalLimitMotor(BulletConstraint constrain, float enable, float targetVel, float maxMotorForce);
|
|
|
+
|
|
|
+public abstract bool SetBreakingImpulseThreshold(BulletConstraint constrain, float threshold);
|
|
|
+
|
|
|
+public abstract bool CalculateTransforms(BulletConstraint constrain);
|
|
|
+
|
|
|
+public abstract bool SetConstraintParam(BulletConstraint constrain, ConstraintParams paramIndex, float value, ConstraintParamAxis axis);
|
|
|
+
|
|
|
+public abstract bool DestroyConstraint(BulletWorld world, BulletConstraint constrain);
|
|
|
+
|
|
|
+// =====================================================================================
|
|
|
+// btCollisionWorld entries
|
|
|
+public abstract void UpdateSingleAabb(BulletWorld world, BulletBody obj);
|
|
|
+
|
|
|
+public abstract void UpdateAabbs(BulletWorld world);
|
|
|
+
|
|
|
+public abstract bool GetForceUpdateAllAabbs(BulletWorld world);
|
|
|
+
|
|
|
+public abstract void SetForceUpdateAllAabbs(BulletWorld world, bool force);
|
|
|
+
|
|
|
+// =====================================================================================
|
|
|
+// btDynamicsWorld entries
|
|
|
+public abstract bool AddObjectToWorld(BulletWorld world, BulletBody obj);
|
|
|
+
|
|
|
+public abstract bool RemoveObjectFromWorld(BulletWorld world, BulletBody obj);
|
|
|
+
|
|
|
+public abstract bool AddConstraintToWorld(BulletWorld world, BulletConstraint constrain, bool disableCollisionsBetweenLinkedObjects);
|
|
|
+
|
|
|
+public abstract bool RemoveConstraintFromWorld(BulletWorld world, BulletConstraint constrain);
|
|
|
+// =====================================================================================
|
|
|
+// btCollisionObject entries
|
|
|
+public abstract Vector3 GetAnisotripicFriction(BulletConstraint constrain);
|
|
|
+
|
|
|
+public abstract Vector3 SetAnisotripicFriction(BulletConstraint constrain, Vector3 frict);
|
|
|
+
|
|
|
+public abstract bool HasAnisotripicFriction(BulletConstraint constrain);
|
|
|
+
|
|
|
+public abstract void SetContactProcessingThreshold(BulletBody obj, float val);
|
|
|
+
|
|
|
+public abstract float GetContactProcessingThreshold(BulletBody obj);
|
|
|
+
|
|
|
+public abstract bool IsStaticObject(BulletBody obj);
|
|
|
+
|
|
|
+public abstract bool IsKinematicObject(BulletBody obj);
|
|
|
+
|
|
|
+public abstract bool IsStaticOrKinematicObject(BulletBody obj);
|
|
|
+
|
|
|
+public abstract bool HasContactResponse(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetCollisionShape(BulletWorld sim, BulletBody obj, BulletShape shape);
|
|
|
+
|
|
|
+public abstract BulletShape GetCollisionShape(BulletBody obj);
|
|
|
+
|
|
|
+public abstract int GetActivationState(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetActivationState(BulletBody obj, int state);
|
|
|
+
|
|
|
+public abstract void SetDeactivationTime(BulletBody obj, float dtime);
|
|
|
+
|
|
|
+public abstract float GetDeactivationTime(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void ForceActivationState(BulletBody obj, ActivationState state);
|
|
|
+
|
|
|
+public abstract void Activate(BulletBody obj, bool forceActivation);
|
|
|
+
|
|
|
+public abstract bool IsActive(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetRestitution(BulletBody obj, float val);
|
|
|
+
|
|
|
+public abstract float GetRestitution(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetFriction(BulletBody obj, float val);
|
|
|
+
|
|
|
+public abstract float GetFriction(BulletBody obj);
|
|
|
+
|
|
|
+public abstract Vector3 GetPosition(BulletBody obj);
|
|
|
+
|
|
|
+public abstract Quaternion GetOrientation(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetTranslation(BulletBody obj, Vector3 position, Quaternion rotation);
|
|
|
+
|
|
|
+// public abstract IntPtr GetBroadphaseHandle(BulletBody obj);
|
|
|
+
|
|
|
+// public abstract void SetBroadphaseHandle(BulletBody obj, IntPtr handle);
|
|
|
+
|
|
|
+public abstract void SetInterpolationLinearVelocity(BulletBody obj, Vector3 vel);
|
|
|
+
|
|
|
+public abstract void SetInterpolationAngularVelocity(BulletBody obj, Vector3 vel);
|
|
|
+
|
|
|
+public abstract void SetInterpolationVelocity(BulletBody obj, Vector3 linearVel, Vector3 angularVel);
|
|
|
+
|
|
|
+public abstract float GetHitFraction(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetHitFraction(BulletBody obj, float val);
|
|
|
+
|
|
|
+public abstract CollisionFlags GetCollisionFlags(BulletBody obj);
|
|
|
+
|
|
|
+public abstract CollisionFlags SetCollisionFlags(BulletBody obj, CollisionFlags flags);
|
|
|
+
|
|
|
+public abstract CollisionFlags AddToCollisionFlags(BulletBody obj, CollisionFlags flags);
|
|
|
+
|
|
|
+public abstract CollisionFlags RemoveFromCollisionFlags(BulletBody obj, CollisionFlags flags);
|
|
|
+
|
|
|
+public abstract float GetCcdMotionThreshold(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetCcdMotionThreshold(BulletBody obj, float val);
|
|
|
+
|
|
|
+public abstract float GetCcdSweptSphereRadius(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetCcdSweptSphereRadius(BulletBody obj, float val);
|
|
|
+
|
|
|
+public abstract IntPtr GetUserPointer(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetUserPointer(BulletBody obj, IntPtr val);
|
|
|
+
|
|
|
+// =====================================================================================
|
|
|
+// btRigidBody entries
|
|
|
+public abstract void ApplyGravity(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetGravity(BulletBody obj, Vector3 val);
|
|
|
+
|
|
|
+public abstract Vector3 GetGravity(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetDamping(BulletBody obj, float lin_damping, float ang_damping);
|
|
|
+
|
|
|
+public abstract void SetLinearDamping(BulletBody obj, float lin_damping);
|
|
|
+
|
|
|
+public abstract void SetAngularDamping(BulletBody obj, float ang_damping);
|
|
|
+
|
|
|
+public abstract float GetLinearDamping(BulletBody obj);
|
|
|
+
|
|
|
+public abstract float GetAngularDamping(BulletBody obj);
|
|
|
+
|
|
|
+public abstract float GetLinearSleepingThreshold(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void ApplyDamping(BulletBody obj, float timeStep);
|
|
|
+
|
|
|
+public abstract void SetMassProps(BulletBody obj, float mass, Vector3 inertia);
|
|
|
+
|
|
|
+public abstract Vector3 GetLinearFactor(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetLinearFactor(BulletBody obj, Vector3 factor);
|
|
|
+
|
|
|
+public abstract void SetCenterOfMassByPosRot(BulletBody obj, Vector3 pos, Quaternion rot);
|
|
|
+
|
|
|
+// Add a force to the object as if its mass is one.
|
|
|
+public abstract void ApplyCentralForce(BulletBody obj, Vector3 force);
|
|
|
+
|
|
|
+// Set the force being applied to the object as if its mass is one.
|
|
|
+public abstract void SetObjectForce(BulletBody obj, Vector3 force);
|
|
|
+
|
|
|
+public abstract Vector3 GetTotalForce(BulletBody obj);
|
|
|
+
|
|
|
+public abstract Vector3 GetTotalTorque(BulletBody obj);
|
|
|
+
|
|
|
+public abstract Vector3 GetInvInertiaDiagLocal(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetInvInertiaDiagLocal(BulletBody obj, Vector3 inert);
|
|
|
+
|
|
|
+public abstract void SetSleepingThresholds(BulletBody obj, float lin_threshold, float ang_threshold);
|
|
|
+
|
|
|
+public abstract void ApplyTorque(BulletBody obj, Vector3 torque);
|
|
|
+
|
|
|
+// Apply force at the given point. Will add torque to the object.
|
|
|
+public abstract void ApplyForce(BulletBody obj, Vector3 force, Vector3 pos);
|
|
|
+
|
|
|
+// Apply impulse to the object. Same as "ApplycentralForce" but force scaled by object's mass.
|
|
|
+public abstract void ApplyCentralImpulse(BulletBody obj, Vector3 imp);
|
|
|
+
|
|
|
+// Apply impulse to the object's torque. Force is scaled by object's mass.
|
|
|
+public abstract void ApplyTorqueImpulse(BulletBody obj, Vector3 imp);
|
|
|
+
|
|
|
+// Apply impulse at the point given. For is scaled by object's mass and effects both linear and angular forces.
|
|
|
+public abstract void ApplyImpulse(BulletBody obj, Vector3 imp, Vector3 pos);
|
|
|
+
|
|
|
+public abstract void ClearForces(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void ClearAllForces(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void UpdateInertiaTensor(BulletBody obj);
|
|
|
+
|
|
|
+public abstract Vector3 GetLinearVelocity(BulletBody obj);
|
|
|
+
|
|
|
+public abstract Vector3 GetAngularVelocity(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetLinearVelocity(BulletBody obj, Vector3 val);
|
|
|
+
|
|
|
+public abstract void SetAngularVelocity(BulletBody obj, Vector3 angularVelocity);
|
|
|
+
|
|
|
+public abstract Vector3 GetVelocityInLocalPoint(BulletBody obj, Vector3 pos);
|
|
|
+
|
|
|
+public abstract void Translate(BulletBody obj, Vector3 trans);
|
|
|
+
|
|
|
+public abstract void UpdateDeactivation(BulletBody obj, float timeStep);
|
|
|
+
|
|
|
+public abstract bool WantsSleeping(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void SetAngularFactor(BulletBody obj, float factor);
|
|
|
+
|
|
|
+public abstract void SetAngularFactorV(BulletBody obj, Vector3 factor);
|
|
|
+
|
|
|
+public abstract Vector3 GetAngularFactor(BulletBody obj);
|
|
|
+
|
|
|
+public abstract bool IsInWorld(BulletBody obj);
|
|
|
+
|
|
|
+public abstract void AddConstraintRef(BulletBody obj, BulletConstraint constrain);
|
|
|
+
|
|
|
+public abstract void RemoveConstraintRef(BulletBody obj, BulletConstraint constrain);
|
|
|
+
|
|
|
+public abstract BulletConstraint GetConstraintRef(BulletBody obj, int index);
|
|
|
+
|
|
|
+public abstract int GetNumConstraintRefs(BulletBody obj);
|
|
|
+
|
|
|
+public abstract bool SetCollisionGroupMask(BulletBody body, uint filter, uint mask);
|
|
|
+
|
|
|
+// =====================================================================================
|
|
|
+// btCollisionShape entries
|
|
|
+
|
|
|
+public abstract float GetAngularMotionDisc(BulletShape shape);
|
|
|
+
|
|
|
+public abstract float GetContactBreakingThreshold(BulletShape shape, float defaultFactor);
|
|
|
+
|
|
|
+public abstract bool IsPolyhedral(BulletShape shape);
|
|
|
+
|
|
|
+public abstract bool IsConvex2d(BulletShape shape);
|
|
|
+
|
|
|
+public abstract bool IsConvex(BulletShape shape);
|
|
|
+
|
|
|
+public abstract bool IsNonMoving(BulletShape shape);
|
|
|
+
|
|
|
+public abstract bool IsConcave(BulletShape shape);
|
|
|
+
|
|
|
+public abstract bool IsCompound(BulletShape shape);
|
|
|
+
|
|
|
+public abstract bool IsSoftBody(BulletShape shape);
|
|
|
+
|
|
|
+public abstract bool IsInfinite(BulletShape shape);
|
|
|
+
|
|
|
+public abstract void SetLocalScaling(BulletShape shape, Vector3 scale);
|
|
|
+
|
|
|
+public abstract Vector3 GetLocalScaling(BulletShape shape);
|
|
|
+
|
|
|
+public abstract Vector3 CalculateLocalInertia(BulletShape shape, float mass);
|
|
|
+
|
|
|
+public abstract int GetShapeType(BulletShape shape);
|
|
|
+
|
|
|
+public abstract void SetMargin(BulletShape shape, float val);
|
|
|
+
|
|
|
+public abstract float GetMargin(BulletShape shape);
|
|
|
+
|
|
|
+// =====================================================================================
|
|
|
+// Debugging
|
|
|
+public abstract void DumpRigidBody(BulletWorld sim, BulletBody collisionObject);
|
|
|
+
|
|
|
+public abstract void DumpCollisionShape(BulletWorld sim, BulletShape collisionShape);
|
|
|
+
|
|
|
+public abstract void DumpConstraint(BulletWorld sim, BulletConstraint constrain);
|
|
|
+
|
|
|
+public abstract void DumpActivationInfo(BulletWorld sim);
|
|
|
+
|
|
|
+public abstract void DumpAllInfo(BulletWorld sim);
|
|
|
+
|
|
|
+public abstract void DumpPhysicsStatistics(BulletWorld sim);
|
|
|
+
|
|
|
+};
|
|
|
+}
|