Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
        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);
        }