Skip to content

Commit 40c05c6

Browse files
committed
Physics Interpolation - Add editor configuration warnings
* For physics bodies that are on non-interpolated branches
1 parent 2d3bdca commit 40c05c6

File tree

5 files changed

+26
-0
lines changed

5 files changed

+26
-0
lines changed

scene/2d/physics/physics_body_2d.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,13 @@ void PhysicsBody2D::remove_collision_exception_with(Node *p_node) {
169169
ERR_FAIL_NULL_MSG(physics_body, "Collision exception only works between two nodes that inherit from PhysicsBody2D.");
170170
PhysicsServer2D::get_singleton()->body_remove_collision_exception(get_rid(), physics_body->get_rid());
171171
}
172+
173+
PackedStringArray PhysicsBody2D::get_configuration_warnings() const {
174+
PackedStringArray warnings = CollisionObject2D::get_configuration_warnings();
175+
176+
if (!is_physics_interpolated()) {
177+
warnings.push_back(RTR("PhysicsBody2D will not work correctly on a non-interpolated branch of the SceneTree.\nCheck the node's inherited physics_interpolation_mode."));
178+
}
179+
180+
return warnings;
181+
}

scene/2d/physics/physics_body_2d.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ class PhysicsBody2D : public CollisionObject2D {
4747
Ref<KinematicCollision2D> _move(const Vector2 &p_motion, bool p_test_only = false, real_t p_margin = 0.08, bool p_recovery_as_collision = false);
4848

4949
public:
50+
PackedStringArray get_configuration_warnings() const override;
51+
5052
bool move_and_collide(const PhysicsServer2D::MotionParameters &p_parameters, PhysicsServer2D::MotionResult &r_result, bool p_test_only = false, bool p_cancel_sliding = true);
5153
bool test_move(const Transform2D &p_from, const Vector2 &p_motion, const Ref<KinematicCollision2D> &r_collision = Ref<KinematicCollision2D>(), real_t p_margin = 0.08, bool p_recovery_as_collision = false);
5254
Vector2 get_gravity() const;

scene/3d/physics/physics_body_3d.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,16 @@ real_t PhysicsBody3D::get_inverse_mass() const {
210210
return 0;
211211
}
212212

213+
PackedStringArray PhysicsBody3D::get_configuration_warnings() const {
214+
PackedStringArray warnings = CollisionObject3D::get_configuration_warnings();
215+
216+
if (!is_physics_interpolated()) {
217+
warnings.push_back(RTR("PhysicsBody3D will not work correctly on a non-interpolated branch of the SceneTree.\nCheck the node's inherited physics_interpolation_mode."));
218+
}
219+
220+
return warnings;
221+
}
222+
213223
///////////////////////////////////////
214224

215225
//so, if you pass 45 as limit, avoid numerical precision errors when angle is 45.

scene/3d/physics/physics_body_3d.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ class PhysicsBody3D : public CollisionObject3D {
4949
Ref<KinematicCollision3D> _move(const Vector3 &p_motion, bool p_test_only = false, real_t p_margin = 0.001, bool p_recovery_as_collision = false, int p_max_collisions = 1);
5050

5151
public:
52+
PackedStringArray get_configuration_warnings() const override;
53+
5254
bool move_and_collide(const PhysicsServer3D::MotionParameters &p_parameters, PhysicsServer3D::MotionResult &r_result, bool p_test_only = false, bool p_cancel_sliding = true);
5355
bool test_move(const Transform3D &p_from, const Vector3 &p_motion, const Ref<KinematicCollision3D> &r_collision = Ref<KinematicCollision3D>(), real_t p_margin = 0.001, bool p_recovery_as_collision = false, int p_max_collisions = 1);
5456
Vector3 get_gravity() const;

scene/main/node.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,8 @@ void Node::_propagate_physics_interpolated(bool p_interpolated) {
520520
// Allow a call to the RenderingServer etc. in derived classes.
521521
_physics_interpolated_changed();
522522

523+
update_configuration_warnings();
524+
523525
data.blocked++;
524526
for (KeyValue<StringName, Node *> &K : data.children) {
525527
K.value->_propagate_physics_interpolated(p_interpolated);

0 commit comments

Comments
 (0)