public void RemoveActiveRigid(MyRigidBody rbo) { if (rbo == null) { return; } if (!rbo.ReadFlag(RigidBodyFlag.RBF_ACTIVE)) { return; } //if (rbo.RigidBodyEventHandler != null) //{ // rbo.RigidBodyEventHandler.OnDeactivated(); //} rbo.ClearFlag(RigidBodyFlag.RBF_ACTIVE); if (rbo.ReadFlag(RigidBodyFlag.RBF_KINEMATIC)) { List <MyRigidBodyIsland> islands = MyPhysics.physicsSystem.GetRigidBodyModule().GetRigidBodyIslandGeneration().GetIslands(); for (int i = 0; i < islands.Count; i++) { MyRigidBodyIsland island = islands[i]; //MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().StartProfilingBlock("Loop Rigids"); for (int j = 0; j < island.GetRigids().Count; j++) { MyRigidBody rboi = island.GetRigids()[j]; if (rbo == rboi) { island.RemoveRigidBody(rbo); break; } } } } bool found = m_ActiveRigids.Remove(rbo); //RBO wasnt in the list Debug.Assert(found); }
public void Remove(MyRigidBody rbo) { //Debug.Assert(!MyPhysics.physicsSystem.GetSensorInteractionModule().IsCheckInteractionsActive(), "You can't deactivate rigid body when check sensor's interactions is active!"); if (rbo == null) { return; } for (int i = 0; i < rbo.GetRBElementList().Count; i++) { MyRBElement elem = rbo.GetRBElementList()[i]; m_BroadPhase.DestroyVolume(elem); } RemoveActiveRigid(rbo); rbo.DeactivateNotification(); // m_Rigids.Remove(rbo); rbo.ClearFlag(RigidBodyFlag.RBF_INSERTED); }
public void RemoveActiveRigid(MyRigidBody rbo) { if (rbo == null) return; if (!rbo.ReadFlag(RigidBodyFlag.RBF_ACTIVE)) return; //if (rbo.RigidBodyEventHandler != null) //{ // rbo.RigidBodyEventHandler.OnDeactivated(); //} rbo.ClearFlag(RigidBodyFlag.RBF_ACTIVE); if (rbo.ReadFlag(RigidBodyFlag.RBF_KINEMATIC)) { List<MyRigidBodyIsland> islands = MyPhysics.physicsSystem.GetRigidBodyModule().GetRigidBodyIslandGeneration().GetIslands(); for (int i = 0; i < islands.Count; i++) { MyRigidBodyIsland island = islands[i]; //MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().StartProfilingBlock("Loop Rigids"); for (int j = 0; j < island.GetRigids().Count; j++) { MyRigidBody rboi = island.GetRigids()[j]; if (rbo == rboi) { island.RemoveRigidBody(rbo); break; } } } } bool found = m_ActiveRigids.Remove(rbo); //RBO wasnt in the list Debug.Assert(found); }