FA::Obstacle* FA::ObstacleFactory::Create(Params& p)
{
	Obstacle* retval = new Obstacle(p.type);

	//create a static body
	b2BodyDef bodyDef;
	bodyDef.position.Set(0.0f, 0.0f);
	b2Body* body = mPhysWorld->CreateBody(&bodyDef);

	switch (p.type)
	{
	case FA::Obstacle::Rect:
		{
			b2PolygonShape box;
			box.SetAsBox(p.size.x/2, p.size.y/2);
			body->CreateFixture(&box, 0);
		}
		break;
	case FA::Obstacle::Circ:
		{
			b2CircleShape circ;
			circ.m_radius = p.size.x;
			body->CreateFixture(&circ, 0);
		}
		break;
	default:
		break;
	}

	retval->SetBody(body);

	//set required values
	retval->SetPosition(p.pos);
	retval->SetRotation(p.rotation);
	retval->SetObsSize(p.size);


	FA::App::Instance().GetScene()->AddObstacle(retval);

	return retval;
}