Browse Source

Merge pull request #27875 from Thource/vehicle_wheel-get_rpm

Added a get_rpm() function to VehicleWheel
Rémi Verschelde 6 years ago
parent
commit
b546591d1b
2 changed files with 13 additions and 4 deletions
  1. 10 4
      scene/3d/vehicle_body.cpp
  2. 3 0
      scene/3d/vehicle_body.h

+ 10 - 4
scene/3d/vehicle_body.cpp

@@ -270,6 +270,8 @@ void VehicleWheel::_bind_methods() {
 
 	ClassDB::bind_method(D_METHOD("get_skidinfo"), &VehicleWheel::get_skidinfo);
 
+	ClassDB::bind_method(D_METHOD("get_rpm"), &VehicleWheel::get_rpm);
+
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_as_traction"), "set_use_as_traction", "is_used_as_traction");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_as_steering"), "set_use_as_steering", "is_used_as_steering");
 	ADD_GROUP("Wheel", "wheel_");
@@ -311,6 +313,11 @@ float VehicleWheel::get_skidinfo() const {
 	return m_skidInfo;
 }
 
+float VehicleWheel::get_rpm() const {
+
+	return m_rpm;
+}
+
 VehicleWheel::VehicleWheel() {
 
 	steers = false;
@@ -865,12 +872,11 @@ void VehicleBody::_direct_state_changed(Object *p_state) {
 			real_t proj2 = fwd.dot(vel);
 
 			wheel.m_deltaRotation = (proj2 * step) / (wheel.m_wheelRadius);
-			wheel.m_rotation += wheel.m_deltaRotation;
-
-		} else {
-			wheel.m_rotation += wheel.m_deltaRotation;
 		}
 
+		wheel.m_rotation += wheel.m_deltaRotation;
+		wheel.m_rpm = ((wheel.m_deltaRotation / step) * 60) / Math_TAU;
+
 		wheel.m_deltaRotation *= real_t(0.99); //damping of rotation when not in contact
 	}
 

+ 3 - 0
scene/3d/vehicle_body.h

@@ -68,6 +68,7 @@ class VehicleWheel : public Spatial {
 	real_t m_steering;
 	real_t m_rotation;
 	real_t m_deltaRotation;
+	real_t m_rpm;
 	real_t m_rollInfluence;
 	//real_t	m_engineForce;
 	real_t m_brake;
@@ -134,6 +135,8 @@ public:
 
 	float get_skidinfo() const;
 
+	float get_rpm() const;
+
 	String get_configuration_warning() const;
 
 	VehicleWheel();