From 97da9f14abfbbfd8a27f12afef0cd7c46fa425a6 Mon Sep 17 00:00:00 2001 From: Agustin Benavidez Date: Sat, 21 May 2016 06:35:55 -0300 Subject: [PATCH] Add get_linear_velocity() method to VehicleBody class Doc added also. --- doc/base/classes.xml | 14 ++++++++++++++ scene/3d/vehicle_body.cpp | 8 +++++++- scene/3d/vehicle_body.h | 3 ++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index 653fa44d99c..64d4100ced4 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -41501,6 +41501,20 @@ This method controls whether the position between two cached points is interpola + + + + + Returns the vehicle body speed or velocity in a 3D vector, to get the speed in scalar value + get the length of the return vector, the scalar value is in Godot units/seconds, if you + assume 1.0 is a meter, then it is in meters/sec + Example: + # vehicle is an instance of VehicleBody, 1.0 asumed as 1 meter: + var speed_ms = vehicle.get_linear_velocity().length() + # Lets convert it to Km/h: + var speed_kms = speed_ms * 3.6 + + diff --git a/scene/3d/vehicle_body.cpp b/scene/3d/vehicle_body.cpp index ba30c118f0a..6eadc71d63d 100644 --- a/scene/3d/vehicle_body.cpp +++ b/scene/3d/vehicle_body.cpp @@ -936,7 +936,7 @@ void VehicleBody::_direct_state_changed(Object *p_state) { wheel.m_deltaRotation *= real_t(0.99);//damping of rotation when not in contact } - + linear_velocity = s->get_linear_velocity(); } void VehicleBody::set_mass(real_t p_mass) { @@ -990,6 +990,10 @@ float VehicleBody::get_steering() const{ return m_steeringValue; } +Vector3 VehicleBody::get_linear_velocity() +{ + return linear_velocity; +} void VehicleBody::_bind_methods(){ @@ -1008,6 +1012,8 @@ void VehicleBody::_bind_methods(){ ObjectTypeDB::bind_method(_MD("set_steering","steering"),&VehicleBody::set_steering); ObjectTypeDB::bind_method(_MD("get_steering"),&VehicleBody::get_steering); + ObjectTypeDB::bind_method(_MD("get_linear_velocity"),&VehicleBody::get_linear_velocity); + ObjectTypeDB::bind_method(_MD("_direct_state_changed"),&VehicleBody::_direct_state_changed); ADD_PROPERTY( PropertyInfo(Variant::REAL,"motion/engine_force",PROPERTY_HINT_RANGE,"0.00,1024.0,0.01"),_SCS("set_engine_force"),_SCS("get_engine_force")); diff --git a/scene/3d/vehicle_body.h b/scene/3d/vehicle_body.h index 285cca142d9..a026a10dff3 100644 --- a/scene/3d/vehicle_body.h +++ b/scene/3d/vehicle_body.h @@ -177,7 +177,8 @@ public: void set_steering(float p_steering); float get_steering() const; - + + Vector3 get_linear_velocity(); VehicleBody(); };