Universe.Physics.BulletSPlugin.BSAPIXNA.PhysicsStepint C# (CSharp) Method

PhysicsStepint() private method

private PhysicsStepint ( BulletWorld pWorld, float timeStep, int m_maxSubSteps, float m_fixedTimeStep, int &updatedEntityCount, EntityProperties &updatedEntities, int &collidersCount, CollisionDesc &colliders, int maxCollisions, int maxUpdates ) : int
pWorld BulletWorld
timeStep float
m_maxSubSteps int
m_fixedTimeStep float
updatedEntityCount int
updatedEntities EntityProperties
collidersCount int
colliders CollisionDesc
maxCollisions int
maxUpdates int
return int
        int PhysicsStepint(BulletWorld pWorld, float timeStep, int m_maxSubSteps, float m_fixedTimeStep,
            out int updatedEntityCount,
            out EntityProperties[] updatedEntities, out int collidersCount, out CollisionDesc[] colliders,
            int maxCollisions, int maxUpdates)
        {
            int numSimSteps = 0;
            Array.Clear(UpdatedObjects, 0, UpdatedObjects.Length);
            Array.Clear(UpdatedCollisions, 0, UpdatedCollisions.Length);
            LastEntityProperty = 0;


            LastCollisionDesc = 0;

            updatedEntityCount = 0;
            collidersCount = 0;


            if (pWorld is BulletWorldXNA)
            {
                DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world;

                world.LastCollisionDesc = 0;
                world.LastEntityProperty = 0;
                numSimSteps = world.StepSimulation(timeStep, m_maxSubSteps, m_fixedTimeStep);

                PersistentManifold contactManifold;
                CollisionObject objA;
                CollisionObject objB;
                ManifoldPoint manifoldPoint;
                PairCachingGhostObject pairCachingGhostObject;

                m_collisionsThisFrame = 0;
                int numManifolds = world.GetDispatcher().GetNumManifolds();
                for (int j = 0; j < numManifolds; j++)
                {
                    contactManifold = world.GetDispatcher().GetManifoldByIndexInternal(j);
                    int numContacts = contactManifold.GetNumContacts();
                    if (numContacts == 0)
                        continue;

                    objA = contactManifold.GetBody0() as CollisionObject;
                    objB = contactManifold.GetBody1() as CollisionObject;

                    manifoldPoint = contactManifold.GetContactPoint(0);
                    //IndexedVector3 contactPoint = manifoldPoint.GetPositionWorldOnB();
                    // IndexedVector3 contactNormal = -manifoldPoint.m_normalWorldOnB; // make relative to A

                    RecordCollision(this, objA, objB, manifoldPoint.GetPositionWorldOnB(),
                        -manifoldPoint.m_normalWorldOnB, manifoldPoint.GetDistance());
                    m_collisionsThisFrame++;
                    if (m_collisionsThisFrame >= 9999999)
                        break;
                }

                foreach (GhostObject ghostObject in specialCollisionObjects.Values)
                {
                    pairCachingGhostObject = ghostObject as PairCachingGhostObject;
                    if (pairCachingGhostObject != null)
                    {
                        RecordGhostCollisions(pairCachingGhostObject);
                    }
                }


                updatedEntityCount = LastEntityProperty;
                updatedEntities = UpdatedObjects;

                collidersCount = LastCollisionDesc;
                colliders = UpdatedCollisions;
            }
            else
            {
                //if (updatedEntities is null)
                //updatedEntities = new List<BulletXNA.EntityProperties>();
                //updatedEntityCount = 0;


                //collidersCount = 0;

                updatedEntities = new EntityProperties[0];


                colliders = new CollisionDesc[0];
            }
            return numSimSteps;
        }
BSAPIXNA