public void RemoveCollisionObject(BCollisionObject co)
 {
     if (co is BRigidBody)
     {
         RemoveRigidBody((RigidBody)co.GetCollisionObject());
         return;
     }
     if (co is BSoftBody)
     {
         RemoveSoftBody((SoftBody)co.GetCollisionObject());
         return;
     }
     if (!_isDisposed)
     {
         if (co is BCharacterController && world is DynamicsWorld)
         {
             RemoveAction(((BCharacterController)co).GetKinematicCharacterController());
         }
         if (debugType >= BDebug.DebugType.Debug)
         {
             Debug.LogFormat("Removing collisionObject {0} from world", co);
         }
         m_world.RemoveCollisionObject(co.GetCollisionObject());
         co.isInWorld = false;
     }
 }
        private IEnumerator TryToGetCollisionObject()
        {
            CollisionObject  collisionObject;
            BCollisionObject co = GetComponent <BCollisionObject>();

            if (co == null)
            {
                Debug.LogError("BCollisionCallbacksDefault must be attached to an object with a BCollisionObject", this);
                yield break;
            }
            collisionObject = co.GetCollisionObject();
            if (collisionObject == null)
            {
                if (BPhysicsWorld.Get().debugType >= BulletUnity.Debugging.BDebug.DebugType.Debug)
                {
                    Debug.Log("Could not recover the collision object from the current BCollisionObject. Will try again.", this);
                }
                float currentTime = Time.time;
                while (collisionObject == null && (Time.time - currentTime) < 5f)
                {
                    collisionObject = co.GetCollisionObject();
                    yield return(null);
                }
            }
            if (collisionObject == null)
            {
                Debug.LogError("Could not recover the collision object from the current BCollisionObject.", this);
                yield break;
            }
            else
            {
                Debug.Log("Finally found the collision object", this);
            }
            myCollisionObject = collisionObject;
        }
        public bool AddCollisionObject(BCollisionObject co)
        {
            if (co is BRigidBody)
            {
                return(AddRigidBody((BRigidBody)co));
            }
            if (co is BSoftBody)
            {
                return(AddSoftBody((BSoftBody)co));
            }

            if (!_isDisposed)
            {
                if (debugType >= BDebug.DebugType.Debug)
                {
                    Debug.LogFormat("Adding collision object {0} to world", co);
                }
                if (co._BuildCollisionObject())
                {
                    m_world.AddCollisionObject(co.GetCollisionObject(), co.groupsIBelongTo, co.collisionMask);
                    co.isInWorld = true;
                    if (ghostPairCallback == null && co is BGhostObject && world is DynamicsWorld)
                    {
                        ghostPairCallback = new GhostPairCallback();
                        ((DynamicsWorld)world).PairCache.SetInternalGhostPairCallback(ghostPairCallback);
                    }
                    if (co is BCharacterController && world is DynamicsWorld)
                    {
                        AddAction(((BCharacterController)co).GetKinematicCharacterController());
                    }
                }
                return(true);
            }
            return(false);
        }
Beispiel #4
0
        public void Start()
        {
            BCollisionObject co = GetComponent <BCollisionObject>();

            if (co == null)
            {
                Debug.LogError("BCollisionCallbacksDefault must be attached to an object with a BCollisionObject.");
                return;
            }
            myCollisionObject = co.GetCollisionObject();
        }
 public bool AddCollisionObject(BCollisionObject co)
 {
     if (!_isDisposed)
     {
         if (debugType >= BDebug.DebugType.Debug) Debug.LogFormat("Adding collision object {0} to world", co);
         if (co._BuildCollisionObject())
         {
             m_world.AddCollisionObject(co.GetCollisionObject(), co.groupsIBelongTo, co.collisionMask);
             co.isInWorld = true;
             if (ghostPairCallback == null && co is BGhostObject && world is DynamicsWorld)
             {
                 ghostPairCallback = new GhostPairCallback();
                 ((DynamicsWorld)world).PairCache.SetInternalGhostPairCallback(ghostPairCallback);
             }
             if (co is BCharacterController && world is DynamicsWorld)
             {
                 AddAction(((BCharacterController)co).GetKinematicCharacterController());
             }
         }
         return true;
     }
     return false;
 }