void BindPhysics() 
{
	using namespace Sqrat;

	Class<CPhysicsSystem, NoConstructor> def;
	def.Func("Scale", &CPhysicsSystem::Scale);

	def.Func("CreateBody", &CPhysicsSystem::CreateBody);
	def.Func("CreateWorldOutline", &CPhysicsSystem::CreateWorldOutline);

	RootTable().Bind("PhysicsSystem", def);

	// Push the singleton to squirrel
	sq_pushroottable( Sqrat::DefaultVM::Get() );
	sq_pushstring( Sqrat::DefaultVM::Get(), "PhysicsSystem", -1 );
	sq_get(  Sqrat::DefaultVM::Get(), -2 );
	sq_pushstring(  Sqrat::DefaultVM::Get(), "Physics", -1 );
	sq_createinstance(  Sqrat::DefaultVM::Get(), -2 );
	sq_setinstanceup(  Sqrat::DefaultVM::Get(), -1, (SQUserPointer)Input() );
	sq_newslot(  Sqrat::DefaultVM::Get(), -4, SQFalse );
	sq_pop(  Sqrat::DefaultVM::Get(), 2 );

	// Box2D

	// b2Vec2
	Class<b2Vec2> vec2;
	vec2.Func("Set", &b2Vec2::Set);
	RootTable().Bind("b2Vec2", vec2);

	// b2ChainShape
	Class<b2ChainShape> chain;
	chain.Func("CreateLoop", &b2ChainShape::CreateLoop );
	RootTable().Bind("b2ChainShape", chain);

	// b2CircleShape
    /*
	Class<b2CircleShape> circle;
	circle.Var("radius", &b2CircleShape::m_radius);
	RootTable().Bind("b2CircleShape", circle);
    */

	// b2BodyDef
	Class<b2BodyDef> bodydef;
	bodydef.Var("position", &b2BodyDef::position);
	bodydef.Var("linearDamping", &b2BodyDef::linearDamping);
	bodydef.Var("type", &b2BodyDef::type);
	RootTable().Bind("b2BodyDef", bodydef);

	// b2BodyType
	Enumeration bodyType;
	bodyType.Const("b2_dynamicBody", (int)b2_dynamicBody);
	ConstTable().Enum( "bodyType", bodyType);

	/*
	ConstTable().Enum("b2_staticBody", (int)b2_staticBody);
	ConstTable().Const("b2_kinematicBody", (int)b2_kinematicBody);
	ConstTable().Const("b2_dynamicBody", (int)b2_dynamicBody);
	*/
}