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); */ }