Browse Source

Add get_linear_velocity() method to VehicleBody class

Doc added also.
Agustin Benavidez 9 years ago
parent
commit
97da9f14ab
3 changed files with 23 additions and 2 deletions
  1. 14 0
      doc/base/classes.xml
  2. 7 1
      scene/3d/vehicle_body.cpp
  3. 2 1
      scene/3d/vehicle_body.h

+ 14 - 0
doc/base/classes.xml

@@ -41501,6 +41501,20 @@ This method controls whether the position between two cached points is interpola
 			<description>
 			</description>
 		</method>
+		<method name="get_linear_velocity" qualifiers="const">
+			<return type="Vector3">
+			</return>
+			<description>
+			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   
+			</description>
+		</method>		
 	</methods>
 	<constants>
 	</constants>

+ 7 - 1
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"));

+ 2 - 1
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();
 };