void b2World::DrawParticleSystem(const b2ParticleSystem& system) { int32 particleCount = system.GetParticleCount(); if (particleCount) { float32 radius = system.GetRadius(); const b2Vec2* positionBuffer = system.GetPositionBuffer(); if (system.m_colorBuffer.data) { const b2ParticleColor* colorBuffer = system.GetColorBuffer(); m_debugDraw->DrawParticles(positionBuffer, radius, colorBuffer, particleCount); } else { m_debugDraw->DrawParticles(positionBuffer, radius, NULL, particleCount); } } }
int32 ConfinementTests::TestLeakCount() { for (int32 t = 0; t < NUMBER_OF_STEPS; t++) { m_world->Step(DELTA_T, 1, 1); } int32 bufferIndex = m_particleGroup->GetBufferIndex(); int32 particleCount = m_particleGroup->GetParticleCount(); const b2Vec2 *positionBuffer = m_particleSystem->GetPositionBuffer(); int32 leakCount = 0; for (int32 i = 0; i < particleCount; i++) { b2Vec2 p = positionBuffer[bufferIndex + i]; if (std::abs(p.x) > WIDTH || std::abs(p.y) > HEIGHT) { leakCount++; } } return leakCount; }
// Create the world, ground body and the particle system. void BodyContactTests::SetUp() { // Define the gravity vector. const b2Vec2 gravity(0.0f, -10.0f); // Construct a world object, which will simulate the contacts. m_world = new b2World(gravity); // Define the ground body. b2BodyDef groundBodyDef; groundBodyDef.position.Set(0.0f, 0.0f); // Call the body factory which allocates memory for the ground body // from a pool and creates the ground box shape (also from a pool). // The body is also added to the world. m_groundBody = m_world->CreateBody(&groundBodyDef); // Create the particle system. const b2ParticleSystemDef particleSystemDef; m_particleSystem = m_world->CreateParticleSystem(&particleSystemDef); m_particleDiameter = m_particleSystem->GetRadius() * 2.0f; }