summaryrefslogtreecommitdiff
path: root/scene/2d/collision_shape_2d.cpp
diff options
context:
space:
mode:
authorPouleyKetchoupp <pouleyketchoup@gmail.com>2021-01-11 09:04:08 -0700
committerPouleyKetchoupp <pouleyketchoup@gmail.com>2021-01-12 10:28:20 -0700
commit4b43cd17c5412f4cc4c67b6bb8de8717e7b2aff4 (patch)
tree47fd00fd44c2c414b0b02a7cbf8cf865994c425e /scene/2d/collision_shape_2d.cpp
parentc26510359acda20834e06e4446905393d165bdf4 (diff)
Fix collision shape update when changing shape properties
This change does two things: 1. Properly update the internal shape data using _update_in_shape_owner when updating a shape (in 2D it was resetting one way collision) 2. Avoid unnecessary updates when calling set_shape with the same shape, which happens each time a shape property is modified (e.g shape.extents.x = ...) Fixes #45090
Diffstat (limited to 'scene/2d/collision_shape_2d.cpp')
-rw-r--r--scene/2d/collision_shape_2d.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/scene/2d/collision_shape_2d.cpp b/scene/2d/collision_shape_2d.cpp
index acdde96df0..37bed577ac 100644
--- a/scene/2d/collision_shape_2d.cpp
+++ b/scene/2d/collision_shape_2d.cpp
@@ -141,6 +141,9 @@ void CollisionShape2D::_notification(int p_what) {
}
void CollisionShape2D::set_shape(const Ref<Shape2D> &p_shape) {
+ if (p_shape == shape) {
+ return;
+ }
if (shape.is_valid()) {
shape->disconnect("changed", callable_mp(this, &CollisionShape2D::_shape_changed));
}
@@ -151,6 +154,7 @@ void CollisionShape2D::set_shape(const Ref<Shape2D> &p_shape) {
if (shape.is_valid()) {
parent->shape_owner_add_shape(owner_id, shape);
}
+ _update_in_shape_owner();
}
if (shape.is_valid()) {