Exemplo n.º 1
0
            public bool Callback(ref ManifoldPoint cp, CollisionObject colObj0, int partId0, int index0, CollisionObject colObj1, int partId1, int index1)
            {
                float friction0    = colObj0.GetFriction();
                float friction1    = colObj1.GetFriction();
                float restitution0 = colObj0.GetRestitution();
                float restitution1 = colObj1.GetRestitution();

                if ((colObj0.GetCollisionFlags() & CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK) != 0)
                {
                    friction0    = 1.0f;                 //partId0,index0
                    restitution0 = 0.0f;
                }
                if ((colObj1.GetCollisionFlags() & CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK) != 0)
                {
                    if ((index1 & 1) != 0)
                    {
                        friction1 = 1.0f;                        //partId1,index1
                    }
                    else
                    {
                        friction1 = 0f;
                    }
                    restitution1 = 0f;
                }

                cp.m_combinedFriction    = CalculateCombinedFriction(friction0, friction1);
                cp.m_combinedRestitution = calculateCombinedRestitution(restitution0, restitution1);

                //this return value is currently ignored, but to be on the safe side: return false if you don't calculate friction
                return(true);
            }
Exemplo n.º 2
0
        public bool Callback(ref ManifoldPoint cp, CollisionObject colObj0, int partId0, int index0, CollisionObject colObj1, int partId1, int index1)
        {
            bool enable = true;

            if (enable)
            {
                InternalEdgeUtility.AdjustInternalEdgeContacts(cp, colObj1, colObj0, partId1, index1, BulletXNA.BulletCollision.CollisionDispatch.InternalEdgeUtility.InternalEdgeAdjustFlags.BT_TRIANGLE_CONVEX_BACKFACE_NONE);
                //btAdjustInternalEdgeContacts(cp,colObj1,colObj0, partId1,index1, BT_TRIANGLE_CONVEX_BACKFACE_MODE);
                //btAdjustInternalEdgeContacts(cp,colObj1,colObj0, partId1,index1, BT_TRIANGLE_CONVEX_DOUBLE_SIDED+BT_TRIANGLE_CONCAVE_DOUBLE_SIDED);
            }

            float friction0    = colObj0.GetFriction();
            float friction1    = colObj1.GetFriction();
            float restitution0 = colObj0.GetRestitution();
            float restitution1 = colObj1.GetRestitution();

            if ((colObj0.GetCollisionFlags() & CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK) != 0)
            {
                friction0    = 1.0f;     //partId0,index0
                restitution0 = 0.0f;
            }
            if ((colObj1.GetCollisionFlags() & CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK) != 0)
            {
                if ((index1 & 1) != 0)
                {
                    friction1 = 1.0f;            //partId1,index1
                }
                else
                {
                    friction1 = 0.0f;
                }
                restitution1 = 0.0f;
            }

            cp.m_combinedFriction    = CalculateCombinedFriction(friction0, friction1);
            cp.m_combinedRestitution = CalculateCombinedRestitution(restitution0, restitution1);

            //this return value is currently ignored, but to be on the safe side: return false if you don't calculate friction
            return(true);
        }