Skip to content

Commit acb8cfb

Browse files
committed
Revert "Prevent crashes on extension reload by ensuring signal teardown"
This reverts commit 92e0a04.
1 parent 92e0a04 commit acb8cfb

4 files changed

Lines changed: 7 additions & 89 deletions

File tree

stagehand/nodes/instanced_renderer_3d.cpp

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -185,44 +185,28 @@ void InstancedRenderer3D::set_prefabs_rendered(const godot::PackedStringArray &p
185185
update_configuration_warnings();
186186
}
187187

188-
void InstancedRenderer3D::connect_configuration_change_signals() {
188+
void InstancedRenderer3D::set_lod_levels(const godot::TypedArray<InstancedRenderer3DLODConfiguration> &p_lod_levels) {
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> 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);
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);
195195
}
196196
}
197-
}
198197

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);
198+
lod_levels = p_lod_levels;
201199

202200
for (int i = 0; i < lod_levels.size(); ++i) {
203201
godot::Ref<InstancedRenderer3DLODConfiguration> lod_level = lod_levels[i];
204-
if (lod_level.is_valid() && lod_level->is_connected("changed", warnings_callable)) {
205-
lod_level->disconnect("changed", warnings_callable);
202+
if (lod_level.is_valid() && !lod_level->is_connected("changed", warnings_callable)) {
203+
lod_level->connect("changed", warnings_callable);
206204
}
207205
}
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();
216206

217207
update_configuration_warnings();
218208
}
219209

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-
226210
godot::PackedStringArray InstancedRenderer3D::_get_configuration_warnings() const {
227211
godot::PackedStringArray warnings;
228212

stagehand/nodes/instanced_renderer_3d.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,8 @@ class InstancedRenderer3D : public godot::Node3D {
9292

9393
protected:
9494
static void _bind_methods();
95-
void _notification(int p_what);
9695

9796
private:
98-
void connect_configuration_change_signals();
99-
void disconnect_configuration_change_signals();
100-
10197
godot::PackedStringArray prefabs_rendered;
10298
godot::TypedArray<InstancedRenderer3DLODConfiguration> lod_levels;
10399
godot::Ref<godot::Material> material;

tests/integration/tests/instanced_renderer_lod_cleanup/instanced_renderer_lod_cleanup.gd

Lines changed: 0 additions & 46 deletions
This file was deleted.

tests/integration/tests/instanced_renderer_lod_cleanup/instanced_renderer_lod_cleanup.tscn

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)