예제 #1
0
    public bool RemoveCollisionObject(BCollisionObject co)
    {
        if (!isDisposed)
        {
            if (co is BRigidBody)
            {
                return(RemoveRigidBody((RigidBody)co.GetCollisionObject()));
            }
            else if (co is BSoftBody)
            {
                return(RemoveSoftBody((SoftBody)co.GetCollisionObject()));
            }

            if (co is BCharacterController && DWorld != null)
            {
                RemoveAction(((BCharacterController)co).GetKinematicCharacterController());
            }

            if (physicWorldParameters.debugType >= BDebug.DebugType.Debug)
            {
                Debug.LogFormat("Removing collisionObject {0} from world", co);
            }

            _world.RemoveCollisionObject(co.GetCollisionObject());
            co.isInWorld = false;

            return(true);
        }

        return(false);
    }
예제 #2
0
    public bool AddCollisionObject(BCollisionObject co)
    {
        if (!isDisposed)
        {
            if (co is BRigidBody)
            {
                return(AddRigidBody((BRigidBody)co));
            }
            else if (co is BSoftBody)
            {
                return(AddSoftBody((BSoftBody)co));
            }

            if (physicWorldParameters.debugType >= BDebug.DebugType.Debug)
            {
                Debug.LogFormat("Adding collision object {0} to world", co);
            }

            if (co._BuildCollisionObject())
            {
                _world.AddCollisionObject(co.GetCollisionObject(), co.groupsIBelongTo, co.collisionMask);
                co.isInWorld = true;

                if (ghostPairCallback == null && co is BGhostObject && DWorld != null)
                {
                    ghostPairCallback = new GhostPairCallback();
                    DWorld.PairCache.SetInternalGhostPairCallback(ghostPairCallback);
                }

                if (co is BCharacterController && DWorld != null)
                {
                    AddAction(((BCharacterController)co).GetKinematicCharacterController());
                }
            }

            return(true);
        }

        return(false);
    }