protected override void Dispose() { if (rigidBody != IntPtr.Zero) { int numRefs = btRigidBody_getNumConstraintRefs(rigidBody); List <TypedConstraintElement> constraints = new List <TypedConstraintElement>(numRefs); //Gather up all constraints for (int i = 0; i < numRefs; ++i) { IntPtr typedConstraint = btRigidBody_getConstraintRef(rigidBody, i); TypedConstraintElement element = TypedConstraintManager.getElement(typedConstraint); if (element != null) { constraints.Add(element); } } //Set all constraints to inactive foreach (TypedConstraintElement constraint in constraints) { constraint.setInactive(); } if (Owner.Enabled) { scene.removeRigidBody(this); } RigidBodyManager.remove(rigidBody); btRigidBody_Delete(rigidBody); rigidBody = IntPtr.Zero; motionState.Dispose(); } }
private void contactContinuesCallbackFunc(IntPtr contact, IntPtr sourceBody, IntPtr otherBody, bool isBodyA) { if (m_contactContinues != null) { contactInfo.setInfo(contact); m_contactContinues.Invoke(contactInfo, RigidBodyManager.get(sourceBody), RigidBodyManager.get(otherBody), isBodyA); } }
public unsafe RigidBody(RigidBodyDefinition description, BulletScene scene, btCollisionShape collisionShape, Vector3 initialTrans, Quaternion initialRot) : base(description.Name) { this.scene = scene; shapeName = description.ShapeName; collisionFilterMask = description.CollisionFilterMask; collisionFilterGroup = description.CollisionFilterGroup; StayLocalTransform = description.StayLocalTransform; motionState = scene.createMotionState(this, description.MaxContactDistance, ref initialTrans, ref initialRot); rigidBody = btRigidBody_Create(ref description.constructionInfo, motionState.motionState, collisionShape.BulletShape); setLinearVelocity(description.LinearVelocity); setAngularVelocity(description.AngularVelocity); forceActivationState(description.CurrentActivationState); setAnisotropicFriction(description.AnisotropicFriction); setDeactivationTime(description.DeactivationTime); setCollisionFlags(description.Flags); setHitFraction(description.HitFraction); LinearFactor = description.LinearFactor; AngularFactor = description.AngularFactor; RigidBodyManager.add(rigidBody, this); }