소스 검색

🐛 enforce bodies damping recomputation on mode switch at runtime

opsocket 8 달 전
부모
커밋
0dd072b460
2개의 변경된 파일22개의 추가작업 그리고 2개의 파일을 삭제
  1. 20 0
      modules/jolt_physics/objects/jolt_body_3d.cpp
  2. 2 2
      modules/jolt_physics/objects/jolt_body_3d.h

+ 20 - 0
modules/jolt_physics/objects/jolt_body_3d.cpp

@@ -1404,6 +1404,26 @@ void JoltBody3D::set_angular_damp(float p_damp) {
 	_update_damp();
 }
 
+void JoltBody3D::set_linear_damp_mode(DampMode p_mode) {
+	if (p_mode == linear_damp_mode) {
+		return;
+	}
+
+	linear_damp_mode = p_mode;
+
+	_update_damp();
+}
+
+void JoltBody3D::set_angular_damp_mode(DampMode p_mode) {
+	if (p_mode == angular_damp_mode) {
+		return;
+	}
+
+	angular_damp_mode = p_mode;
+
+	_update_damp();
+}
+
 bool JoltBody3D::is_axis_locked(PhysicsServer3D::BodyAxis p_axis) const {
 	return (locked_axes & (uint32_t)p_axis) != 0;
 }

+ 2 - 2
modules/jolt_physics/objects/jolt_body_3d.h

@@ -287,10 +287,10 @@ public:
 	void set_collision_priority(float p_priority) { collision_priority = p_priority; }
 
 	DampMode get_linear_damp_mode() const { return linear_damp_mode; }
-	void set_linear_damp_mode(DampMode p_mode) { linear_damp_mode = p_mode; }
+	void set_linear_damp_mode(DampMode p_mode);
 
 	DampMode get_angular_damp_mode() const { return angular_damp_mode; }
-	void set_angular_damp_mode(DampMode p_mode) { angular_damp_mode = p_mode; }
+	void set_angular_damp_mode(DampMode p_mode);
 
 	bool is_axis_locked(PhysicsServer3D::BodyAxis p_axis) const;
 	void set_axis_lock(PhysicsServer3D::BodyAxis p_axis, bool p_enabled);