Merge pull request #68409 from Jasuse/shapecast3d_dbg_shape_fix

Fix debug shape of `ShapeCast3D` not updating on `Shape` change
This commit is contained in:
Rémi Verschelde 2023-01-12 17:19:20 +01:00
commit d20ebe98c4
No known key found for this signature in database
GPG Key ID: C3336907360768E1
2 changed files with 14 additions and 2 deletions

View File

@ -30,6 +30,7 @@
#include "shape_cast_3d.h"
#include "core/core_string_names.h"
#include "collision_object_3d.h"
#include "mesh_instance_3d.h"
#include "scene/resources/concave_polygon_shape_3d.h"
@ -318,25 +319,35 @@ void ShapeCast3D::resource_changed(Ref<Resource> p_res) {
update_gizmos();
}
void ShapeCast3D::_shape_changed() {
update_gizmos();
bool is_editor = Engine::get_singleton()->is_editor_hint();
if (is_inside_tree() && (is_editor || get_tree()->is_debugging_collisions_hint())) {
_update_debug_shape();
}
}
void ShapeCast3D::set_shape(const Ref<Shape3D> &p_shape) {
if (p_shape == shape) {
return;
}
if (!shape.is_null()) {
shape->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &ShapeCast3D::_shape_changed));
shape->unregister_owner(this);
}
shape = p_shape;
if (!shape.is_null()) {
shape->register_owner(this);
shape->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &ShapeCast3D::_shape_changed));
}
if (p_shape.is_valid()) {
shape_rid = shape->get_rid();
}
if (is_inside_tree() && get_tree()->is_debugging_collisions_hint()) {
bool is_editor = Engine::get_singleton()->is_editor_hint();
if (is_inside_tree() && (is_editor || get_tree()->is_debugging_collisions_hint())) {
_update_debug_shape();
}
update_gizmos();
update_configuration_warnings();
}

View File

@ -77,6 +77,7 @@ class ShapeCast3D : public Node3D {
protected:
void _notification(int p_what);
void _update_shapecast_state();
void _shape_changed();
static void _bind_methods();
public: