@@ -185,28 +185,44 @@ void InstancedRenderer3D::set_prefabs_rendered(const godot::PackedStringArray &p
185185 update_configuration_warnings ();
186186}
187187
188- void InstancedRenderer3D::set_lod_levels ( const godot::TypedArray<InstancedRenderer3DLODConfiguration> &p_lod_levels ) {
188+ void InstancedRenderer3D::connect_configuration_change_signals ( ) {
189189 const godot::Callable warnings_callable = callable_mp (static_cast <godot::Node *>(this ), &godot::Node::update_configuration_warnings);
190190
191191 for (int i = 0 ; i < lod_levels.size (); ++i) {
192- godot::Ref<InstancedRenderer3DLODConfiguration> previous_lod_level = lod_levels[i];
193- if (previous_lod_level .is_valid () && previous_lod_level ->is_connected (" changed" , warnings_callable)) {
194- previous_lod_level-> disconnect (" changed" , warnings_callable);
192+ godot::Ref<InstancedRenderer3DLODConfiguration> lod_level = lod_levels[i];
193+ if (lod_level .is_valid () && !lod_level ->is_connected (" changed" , warnings_callable)) {
194+ lod_level-> connect (" changed" , warnings_callable);
195195 }
196196 }
197+ }
197198
198- lod_levels = p_lod_levels;
199+ void InstancedRenderer3D::disconnect_configuration_change_signals () {
200+ const godot::Callable warnings_callable = callable_mp (static_cast <godot::Node *>(this ), &godot::Node::update_configuration_warnings);
199201
200202 for (int i = 0 ; i < lod_levels.size (); ++i) {
201203 godot::Ref<InstancedRenderer3DLODConfiguration> lod_level = lod_levels[i];
202- if (lod_level.is_valid () && ! lod_level->is_connected (" changed" , warnings_callable)) {
203- lod_level->connect (" changed" , warnings_callable);
204+ if (lod_level.is_valid () && lod_level->is_connected (" changed" , warnings_callable)) {
205+ lod_level->disconnect (" changed" , warnings_callable);
204206 }
205207 }
208+ }
209+
210+ void InstancedRenderer3D::set_lod_levels (const godot::TypedArray<InstancedRenderer3DLODConfiguration> &p_lod_levels) {
211+ disconnect_configuration_change_signals ();
212+
213+ lod_levels = p_lod_levels;
214+
215+ connect_configuration_change_signals ();
206216
207217 update_configuration_warnings ();
208218}
209219
220+ void InstancedRenderer3D::_notification (int p_what) {
221+ if (p_what == godot::Node::NOTIFICATION_EXIT_TREE || p_what == godot::Object::NOTIFICATION_PREDELETE ) {
222+ disconnect_configuration_change_signals ();
223+ }
224+ }
225+
210226godot::PackedStringArray InstancedRenderer3D::_get_configuration_warnings () const {
211227 godot::PackedStringArray warnings;
212228
0 commit comments