示例#1
0
        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();
            }
        }
示例#2
0
 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);
     }
 }
示例#3
0
        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);
        }