Index: trunk/src/bullet/bullet_world.cc
===================================================================
--- trunk/src/bullet/bullet_world.cc	(revision 527)
+++ trunk/src/bullet/bullet_world.cc	(revision 528)
@@ -140,4 +140,16 @@
 }
 
+void nv::bullet_world::set_local_scaling( collision_shape shape, const vec3& value )
+{
+	btCollisionShape* sh = static_cast<btCollisionShape*>( shape.internal );
+	sh->setLocalScaling( n2b( value ) );
+}
+
+vec3 nv::bullet_world::get_local_scaling( collision_shape shape )
+{
+	btCollisionShape* sh = static_cast<btCollisionShape*>( shape.internal );
+	return b2n( sh->getLocalScaling() );
+}
+
 constraint nv::bullet_world::create_hinge_constraint( rigid_body a, const transform& ta, rigid_body b, const transform& tb, const vec2& low_high, const vec3& params /*= vec3( 0.9f, 0.3f, 1.0f ) */ )
 {
@@ -203,4 +215,17 @@
 	rb->setCcdMotionThreshold( threshold );
 	rb->setCcdSweptSphereRadius( radius );
+}
+
+vec3 nv::bullet_world::get_rigid_body_linear_velocity( rigid_body body )
+{
+	btRigidBody* rb = static_cast<btRigidBody*>( body.internal );
+	return b2n( rb->getLinearVelocity() );
+}
+
+void nv::bullet_world::apply_central_impulse( rigid_body body, const vec3& impulse )
+{
+	btRigidBody* rb = static_cast<btRigidBody*>( body.internal );
+	rb->applyCentralImpulse( n2b( impulse ) );
+	rb->forceActivationState( ACTIVE_TAG );
 }
 
