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); }
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); }