use strict;
use warnings;
use Box2D;
use Test::More;

my $vec = Box2D::b2Vec2->new( 0, -10 );
my $world = Box2D::b2World->new( $vec, 1 );

my $body_def = Box2D::b2BodyDef->new();

$body_def->position->Set( 0.0, -10.0 );

my $groundBody = $world->CreateBody($body_def);

my $groundBox = Box2D::b2PolygonShape->new();

$groundBox->SetAsBox( 50.0, 10.0 );

$groundBody->CreateFixture( $groundBox, 0.0 );

my $bodyDef = Box2D::b2BodyDef->new();
$bodyDef->type(Box2D::b2_dynamicBody);
is( $bodyDef->type(), 2, "returning enum" );
$bodyDef->position->Set( 0.0, 4.0 );

my $body = $world->CreateBody($bodyDef);

pass("Create body for world ");

my $dynamicCircle = Box2D::b2CircleShape->new();
my $radius = 1.0;
$dynamicCircle->m_radius($radius);
is ( $dynamicCircle->m_radius(), $radius, "m_radius" );

pass("Create circle");

my $fixtureDef = Box2D::b2FixtureDef->new();
$fixtureDef->shape($dynamicCircle);
$fixtureDef->density(1.0);
$fixtureDef->friction(0.3);

$body->CreateFixtureDef($fixtureDef);

pass("Create fixture Def");

my $timeStep           = 1.0 / 60.0;
my $velocityIterations = 6;
my $positionIterations = 2;

foreach ( 0 .. 60 ) {

    $world->Step( $timeStep, $velocityIterations, $positionIterations );
    $world->ClearForces();

    my $position = $body->GetPosition();
    my $angle    = $body->GetAngle();
    warn( "Position " . $position->x() . ", " . $position->y() . "\n" );
    warn( "Angle " . $angle . "\n" );
}

pass("Run step and clear forces");

pass("Made stuff and survived");

$world->DestroyBody($body);
$body = undef;

pass("Destroyed the body");

done_testing;
