#include "box2d/box2d.h"
#include "doctest.h"
#include <stdio.h>
static bool begin_contact = false;
class MyContactListener : public b2ContactListener
{
public:
void BeginContact(b2Contact* contact)
{
begin_contact = true;
}
};
DOCTEST_TEST_CASE("begin contact")
{
b2World world = b2World(b2Vec2(0.0f, -10.0f));
MyContactListener listener;
world.SetContactListener(&listener);
b2CircleShape circle;
circle.m_radius = 5.f;
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
b2Body* bodyA = world.CreateBody(&bodyDef);
b2Body* bodyB = world.CreateBody(&bodyDef);
bodyA->CreateFixture(&circle, 0.0f);
bodyB->CreateFixture(&circle, 0.0f);
bodyA->SetTransform(b2Vec2(0.f, 0.f), 0.f);
bodyB->SetTransform(b2Vec2(100.f, 0.f), 0.f);
const float timeStep = 1.f / 60.f;
const int32 velocityIterations = 6;
const int32 positionIterations = 2;
world.Step(timeStep, velocityIterations, positionIterations);
CHECK(world.GetContactList() == nullptr);
CHECK(begin_contact == false);
bodyB->SetTransform(b2Vec2(1.f, 0.f), 0.f);
world.Step(timeStep, velocityIterations, positionIterations);
CHECK(world.GetContactList() != nullptr);
CHECK(begin_contact == true);
}