public virtual SWIGTYPE_p_btPersistentManifold getNewManifold(btCollisionObject b0, btCollisionObject b1)
        {
            IntPtr cPtr = BulletCollisionPINVOKE.btCollisionDispatcher_getNewManifold(swigCPtr, btCollisionObject.getCPtr(b0), btCollisionObject.getCPtr(b1));
            SWIGTYPE_p_btPersistentManifold ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_btPersistentManifold(cPtr, false);

            return(ret);
        }
 public void contactPairTest(btCollisionObject colObjA, btCollisionObject colObjB, SWIGTYPE_p_btCollisionWorld__ContactResultCallback resultCallback)
 {
     BulletCollisionPINVOKE.btCollisionWorld_contactPairTest(swigCPtr, btCollisionObject.getCPtr(colObjA), btCollisionObject.getCPtr(colObjB), SWIGTYPE_p_btCollisionWorld__ContactResultCallback.getCPtr(resultCallback));
     if (BulletCollisionPINVOKE.SWIGPendingException.Pending)
     {
         throw BulletCollisionPINVOKE.SWIGPendingException.Retrieve();
     }
 }
        public virtual float calculateTimeOfImpact(btCollisionObject body0, btCollisionObject body1, SWIGTYPE_p_btDispatcherInfo dispatchInfo, SWIGTYPE_p_btManifoldResult resultOut)
        {
            float ret = BulletCollisionPINVOKE.btSphereSphereCollisionAlgorithm_calculateTimeOfImpact(swigCPtr, btCollisionObject.getCPtr(body0), btCollisionObject.getCPtr(body1), SWIGTYPE_p_btDispatcherInfo.getCPtr(dispatchInfo), SWIGTYPE_p_btManifoldResult.getCPtr(resultOut));

            if (BulletCollisionPINVOKE.SWIGPendingException.Pending)
            {
                throw BulletCollisionPINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
Exemplo n.º 4
0
    public bool OnBulletCreate()
    {
        if( rigidBodyObj != null ) // have created!
        {
            return true;
        }

        if( CollisionShapeObject == null )   // if user not give a collision, search it on itself first!
            CollisionShapeObject = GetComponent<BCollisionShape>();

        if( CollisionShapeObject == null )
        {
            Debug.LogError("Bullet RigidBody need a collision shape!");
            return false;
        }

        bool cResult = CollisionShapeObject.OnBulletCreate();

        if( cResult == false )
        {
            Debug.LogError("Collision Shape Create Error!");
            return false;
        }

        btTransform trans = new btTransform();
        trans.setIdentity();
        btVector3 pos = new btVector3(transform.position.x,transform.position.y,transform.position.z);
        trans.setOrigin(pos);
        trans.setRotation(new btQuaternion(transform.rotation.x,transform.rotation.y,transform.rotation.z,transform.rotation.w));

        //rigidbody is dynamic if and only if mass is non zero, otherwise static
        bool isDynamic = (Mass != 0.0f);

        btVector3 localInertia = new btVector3(0,0,0);
        if (isDynamic)
        {
             CollisionShapeObject.CalculateLocalInertia(Mass,localInertia);
        }

        //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects
        myMotionState = new btDefaultMotionState(trans);
        rbInfo = new btRigidBodyConstructionInfo(Mass,myMotionState.GetSwigPtr(),CollisionShapeObject.GetCollisionShapePtr(),localInertia.GetSwigPtr());
        rigidBodyObj = new btRigidBody(rbInfo);
        collisionObject = btCollisionObject.GetObjectFromSwigPtr(rigidBodyObj.GetCollisionObject());
        collisionObject.setFriction(Friction);
        return true;
    }
Exemplo n.º 5
0
 internal static HandleRef getCPtr(btCollisionObject obj)
 {
     return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
 }
 public virtual void removeCollisionObject(btCollisionObject collisionObject) {
   BulletCollisionPINVOKE.btCollisionWorld_removeCollisionObject(swigCPtr, btCollisionObject.getCPtr(collisionObject));
 }
 public virtual void addCollisionObject(btCollisionObject collisionObject, short collisionFilterGroup) {
   BulletCollisionPINVOKE.btCollisionWorld_addCollisionObject__SWIG_1(swigCPtr, btCollisionObject.getCPtr(collisionObject), collisionFilterGroup);
 }
 public static void rayTestSingle(SWIGTYPE_p_btTransform rayFromTrans, SWIGTYPE_p_btTransform rayToTrans, btCollisionObject collisionObject, SWIGTYPE_p_btCollisionShape collisionShape, SWIGTYPE_p_btTransform colObjWorldTransform, SWIGTYPE_p_btCollisionWorld__RayResultCallback resultCallback) {
   BulletCollisionPINVOKE.btCollisionWorld_rayTestSingle(SWIGTYPE_p_btTransform.getCPtr(rayFromTrans), SWIGTYPE_p_btTransform.getCPtr(rayToTrans), btCollisionObject.getCPtr(collisionObject), SWIGTYPE_p_btCollisionShape.getCPtr(collisionShape), SWIGTYPE_p_btTransform.getCPtr(colObjWorldTransform), SWIGTYPE_p_btCollisionWorld__RayResultCallback.getCPtr(resultCallback));
   if (BulletCollisionPINVOKE.SWIGPendingException.Pending) throw BulletCollisionPINVOKE.SWIGPendingException.Retrieve();
 }
 public virtual bool needsResponse(btCollisionObject body0, btCollisionObject body1)
 {
     bool ret = BulletCollisionPINVOKE.btCollisionDispatcher_needsResponse(swigCPtr, btCollisionObject.getCPtr(body0), btCollisionObject.getCPtr(body1));
     return ret;
 }
Exemplo n.º 10
0
        public bool checkCollideWith(btCollisionObject co)
        {
            bool ret = BulletCollisionPINVOKE.btCollisionObject_checkCollideWith(swigCPtr, btCollisionObject.getCPtr(co));

            return(ret);
        }
Exemplo n.º 11
0
 internal static HandleRef getCPtr(btCollisionObject obj)
 {
     return((obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr);
 }
Exemplo n.º 12
0
    public bool OnBulletCreate(btSoftBodyWorldInfo softBodyWorldInfo)
    {
        if( softBodyType == SoftBodyType.Patch )
        {
            Vector3 c00 = transform.TransformPoint(PatchCorner00);
            Vector3 c01 = transform.TransformPoint(PatchCorner01);
            Vector3 c10 = transform.TransformPoint(PatchCorner10);
            Vector3 c11 = transform.TransformPoint(PatchCorner11);

            btVector3 corner00 = new btVector3(c00.x,c00.y,c00.z);
            btVector3 corner01 = new btVector3(c01.x,c01.y,c01.z);
            btVector3 corner10 = new btVector3(c10.x,c10.y,c10.z);
            btVector3 corner11 = new btVector3(c11.x,c11.y,c11.z);

            int fixFlag = 0;
            if( CornerFix00 )
                fixFlag = 1;
            if ( CornerFix01 )
                fixFlag += 4;
            if( CornerFix10 )
                fixFlag += 2;
            if( CornerFix11 )
                fixFlag += 8;

            softBody = btSoftBodyHelpers.CreatePatch(softBodyWorldInfo,corner00.GetSwigPtr(),corner10.GetSwigPtr(),corner01.GetSwigPtr(),corner11.GetSwigPtr(),
                                                     PatchResolutionX,PatchResolutionY,fixFlag,true);
            collisionObject = btCollisionObject.GetObjectFromSwigPtr(softBody.GetCollisionObject());

            SetParam();
            SpawnMesh();

            return true;
        }
        else if( softBodyType == SoftBodyType.Ellipsoid )
        {
            btVector3 center = new btVector3(transform.position.x,transform.position.y,transform.position.z);
            btVector3 radius = new btVector3(EllipsoidRadius.x*transform.localScale.x,EllipsoidRadius.y*transform.localScale.y,
                                             EllipsoidRadius.z*transform.localScale.z);

            softBody = btSoftBodyHelpers.CreateEllipsoid(softBodyWorldInfo,center.GetSwigPtr(),radius.GetSwigPtr(),MeshResolution);
            SetParam();
            SpawnMesh();
            return true;
        }
        else if( softBodyType == SoftBodyType.Rope )
        {
            int fixFlag = 0;
            if(FixRopeBegin)
                fixFlag += 1;
            if( FixRopeEnd )
                fixFlag += 2;
            Vector3 begin = transform.TransformPoint(RopeFromPos);
            Vector3 end = transform.TransformPoint(RopeToPos);
            btVector3 fromPos = new btVector3(begin.x,begin.y,begin.z);
            btVector3 toPos = new btVector3(end.x,end.y,end.z);
            softBody = btSoftBodyHelpers.CreateRope(softBodyWorldInfo,fromPos.GetSwigPtr(),toPos.GetSwigPtr(),RopeResolution,fixFlag);
            SetParam();
            SpawnLineRender();
            return true;
        }
        else if( softBodyType == SoftBodyType.TriangleMesh )
        {
            if(CheckUnityMesh() == false)
                return false;

            CreateBulletStyleMesh();

            List<float> vertexposList = new List<float>();

            for(int index=0;index<btVectorArray.Length;index++)
            {
                Vector3 vec = btVectorArray[index];
                vec = transform.TransformPoint(vec);
                vertexposList.Add(vec.x);
                vertexposList.Add(vec.y);
                vertexposList.Add(vec.z);
            }

            softBody = btSoftBodyHelpers.CreateFromTriMesh(softBodyWorldInfo,vertexposList.ToArray(),btTriangleArray,btTriangleArray.Length/3);
            SetParam();
            return true;
        }
        return false;
    }
 public virtual float calculateTimeOfImpact(btCollisionObject body0, btCollisionObject body1, SWIGTYPE_p_btDispatcherInfo dispatchInfo, SWIGTYPE_p_btManifoldResult resultOut)
 {
     float ret = BulletCollisionPINVOKE.btSphereSphereCollisionAlgorithm_calculateTimeOfImpact(swigCPtr, btCollisionObject.getCPtr(body0), btCollisionObject.getCPtr(body1), SWIGTYPE_p_btDispatcherInfo.getCPtr(dispatchInfo), SWIGTYPE_p_btManifoldResult.getCPtr(resultOut));
     if (BulletCollisionPINVOKE.SWIGPendingException.Pending) throw BulletCollisionPINVOKE.SWIGPendingException.Retrieve();
     return ret;
 }
Exemplo n.º 14
0
    void CreateSoftDynamicsWorld()
    {
        btVector3 gravityVec = new btVector3(Gravity.x, Gravity.y, Gravity.z);
        btCollisionObject tempObject = new btCollisionObject();
        btConstraintSetting tempObject2 = new btConstraintSetting();

        softBodyWorldInfo = new btSoftBodyWorldInfo();
        ///collision configuration contains default setup for memory, collision setup. Advanced users can create their own configuration.
        softCollisionConfiguration = new btSoftBodyRigidBodyCollisionConfiguration();

        ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded)
        dispatcher = new btCollisionDispatcher(softCollisionConfiguration.GetSwigPtr());
        softBodyWorldInfo.m_dispatcher = dispatcher.GetSwigPtr();

        btVector3 worldAabbMin = new btVector3(-1000,-1000,-1000);
        btVector3 worldAabbMax = new btVector3(1000,1000,1000);

        axisBroadphase = new btAxisSweep3(worldAabbMin.GetSwigPtr(),worldAabbMax.GetSwigPtr(),32766);
        softBodyWorldInfo.m_broadphase = axisBroadphase.GetSwigPtr();
        ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded)
        solver = new btSequentialImpulseConstraintSolver();

        softDynamicsWorld = new btSoftRigidDynamicsWorld(dispatcher.GetSwigPtr(), axisBroadphase.GetSwigPtr(), solver.GetSwigPtr(), softCollisionConfiguration.GetSwigPtr());
        dynamicsWorld = btDiscreteDynamicsWorld.GetObjectFromSwigPtr(softDynamicsWorld.getDiscreteDynamicsWorld());
        SWIGTYPE_p_btCollisionWorld collisionWorldPtr = dynamicsWorld.getCollisionWorld();
        collisionWorld = btCollisionWorld.GetObjectFromSwigPtr(collisionWorldPtr);
        dynamicsWorld.setGravity(gravityVec.GetSwigPtr());
        softBodyWorldInfo.m_gravity = gravityVec.GetSwigPtr();
        btVector3 water_nomalVec = new btVector3(0,0,0);
        softBodyWorldInfo.air_density		=	1.2f;
        softBodyWorldInfo.water_density	    =	0;
        softBodyWorldInfo.water_offset		=	0;
        softBodyWorldInfo.water_normal		=	water_nomalVec.GetSwigPtr();
        sparseSdf = softBodyWorldInfo.m_sparsesdf;
        sparseSdf.Initialize();
        AddBulletObjects();
    }
 public static void rayTestSingle(SWIGTYPE_p_btTransform rayFromTrans, SWIGTYPE_p_btTransform rayToTrans, btCollisionObject collisionObject, SWIGTYPE_p_btCollisionShape collisionShape, SWIGTYPE_p_btTransform colObjWorldTransform, SWIGTYPE_p_btCollisionWorld__RayResultCallback resultCallback)
 {
     BulletCollisionPINVOKE.btCollisionWorld_rayTestSingle(SWIGTYPE_p_btTransform.getCPtr(rayFromTrans), SWIGTYPE_p_btTransform.getCPtr(rayToTrans), btCollisionObject.getCPtr(collisionObject), SWIGTYPE_p_btCollisionShape.getCPtr(collisionShape), SWIGTYPE_p_btTransform.getCPtr(colObjWorldTransform), SWIGTYPE_p_btCollisionWorld__RayResultCallback.getCPtr(resultCallback));
     if (BulletCollisionPINVOKE.SWIGPendingException.Pending)
     {
         throw BulletCollisionPINVOKE.SWIGPendingException.Retrieve();
     }
 }
 public virtual SWIGTYPE_p_btPersistentManifold getNewManifold(btCollisionObject b0, btCollisionObject b1)
 {
     IntPtr cPtr = BulletCollisionPINVOKE.btCollisionDispatcher_getNewManifold(swigCPtr, btCollisionObject.getCPtr(b0), btCollisionObject.getCPtr(b1));
     SWIGTYPE_p_btPersistentManifold ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_btPersistentManifold(cPtr, false);
     return ret;
 }
 public static void objectQuerySingle(SWIGTYPE_p_btConvexShape castShape, SWIGTYPE_p_btTransform rayFromTrans, SWIGTYPE_p_btTransform rayToTrans, btCollisionObject collisionObject, SWIGTYPE_p_btCollisionShape collisionShape, SWIGTYPE_p_btTransform colObjWorldTransform, SWIGTYPE_p_btCollisionWorld__ConvexResultCallback resultCallback, float allowedPenetration)
 {
     BulletCollisionPINVOKE.btCollisionWorld_objectQuerySingle(SWIGTYPE_p_btConvexShape.getCPtr(castShape), SWIGTYPE_p_btTransform.getCPtr(rayFromTrans), SWIGTYPE_p_btTransform.getCPtr(rayToTrans), btCollisionObject.getCPtr(collisionObject), SWIGTYPE_p_btCollisionShape.getCPtr(collisionShape), SWIGTYPE_p_btTransform.getCPtr(colObjWorldTransform), SWIGTYPE_p_btCollisionWorld__ConvexResultCallback.getCPtr(resultCallback), allowedPenetration);
     if (BulletCollisionPINVOKE.SWIGPendingException.Pending)
     {
         throw BulletCollisionPINVOKE.SWIGPendingException.Retrieve();
     }
 }
        public virtual bool needsResponse(btCollisionObject body0, btCollisionObject body1)
        {
            bool ret = BulletCollisionPINVOKE.btCollisionDispatcher_needsResponse(swigCPtr, btCollisionObject.getCPtr(body0), btCollisionObject.getCPtr(body1));

            return(ret);
        }
 public virtual void addCollisionObject(btCollisionObject collisionObject, short collisionFilterGroup)
 {
     BulletCollisionPINVOKE.btCollisionWorld_addCollisionObject__SWIG_1(swigCPtr, btCollisionObject.getCPtr(collisionObject), collisionFilterGroup);
 }
 public void contactPairTest(btCollisionObject colObjA, btCollisionObject colObjB, SWIGTYPE_p_btCollisionWorld__ContactResultCallback resultCallback) {
   BulletCollisionPINVOKE.btCollisionWorld_contactPairTest(swigCPtr, btCollisionObject.getCPtr(colObjA), btCollisionObject.getCPtr(colObjB), SWIGTYPE_p_btCollisionWorld__ContactResultCallback.getCPtr(resultCallback));
   if (BulletCollisionPINVOKE.SWIGPendingException.Pending) throw BulletCollisionPINVOKE.SWIGPendingException.Retrieve();
 }
 public virtual void addCollisionObject(btCollisionObject collisionObject)
 {
     BulletCollisionPINVOKE.btCollisionWorld_addCollisionObject__SWIG_2(swigCPtr, btCollisionObject.getCPtr(collisionObject));
 }
 public static void objectQuerySingle(SWIGTYPE_p_btConvexShape castShape, SWIGTYPE_p_btTransform rayFromTrans, SWIGTYPE_p_btTransform rayToTrans, btCollisionObject collisionObject, SWIGTYPE_p_btCollisionShape collisionShape, SWIGTYPE_p_btTransform colObjWorldTransform, SWIGTYPE_p_btCollisionWorld__ConvexResultCallback resultCallback, float allowedPenetration) {
   BulletCollisionPINVOKE.btCollisionWorld_objectQuerySingle(SWIGTYPE_p_btConvexShape.getCPtr(castShape), SWIGTYPE_p_btTransform.getCPtr(rayFromTrans), SWIGTYPE_p_btTransform.getCPtr(rayToTrans), btCollisionObject.getCPtr(collisionObject), SWIGTYPE_p_btCollisionShape.getCPtr(collisionShape), SWIGTYPE_p_btTransform.getCPtr(colObjWorldTransform), SWIGTYPE_p_btCollisionWorld__ConvexResultCallback.getCPtr(resultCallback), allowedPenetration);
   if (BulletCollisionPINVOKE.SWIGPendingException.Pending) throw BulletCollisionPINVOKE.SWIGPendingException.Retrieve();
 }
 public virtual void removeCollisionObject(btCollisionObject collisionObject)
 {
     BulletCollisionPINVOKE.btCollisionWorld_removeCollisionObject(swigCPtr, btCollisionObject.getCPtr(collisionObject));
 }
 public virtual void addCollisionObject(btCollisionObject collisionObject) {
   BulletCollisionPINVOKE.btCollisionWorld_addCollisionObject__SWIG_2(swigCPtr, btCollisionObject.getCPtr(collisionObject));
 }
 public void updateSingleAabb(btCollisionObject colObj)
 {
     BulletCollisionPINVOKE.btCollisionWorld_updateSingleAabb(swigCPtr, btCollisionObject.getCPtr(colObj));
 }
 public void updateSingleAabb(btCollisionObject colObj) {
   BulletCollisionPINVOKE.btCollisionWorld_updateSingleAabb(swigCPtr, btCollisionObject.getCPtr(colObj));
 }
Exemplo n.º 27
0
 public bool checkCollideWith(btCollisionObject co)
 {
     bool ret = BulletCollisionPINVOKE.btCollisionObject_checkCollideWith(swigCPtr, btCollisionObject.getCPtr(co));
     return ret;
 }