Merge pull request #45511 from KoBeWi/apocalypse_(world_crash)

Cache world in VisibilityNotifier3D to avoid crash
This commit is contained in:
Rémi Verschelde 2021-01-27 21:19:25 +01:00 committed by GitHub
commit 1ea133b6b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 3 deletions

View File

@ -80,13 +80,16 @@ AABB VisibilityNotifier3D::get_aabb() const {
void VisibilityNotifier3D::_notification(int p_what) { void VisibilityNotifier3D::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_ENTER_WORLD: { case NOTIFICATION_ENTER_WORLD: {
get_world_3d()->_register_notifier(this, get_global_transform().xform(aabb)); world = get_world_3d();
ERR_FAIL_COND(!world.is_valid());
world->_register_notifier(this, get_global_transform().xform(aabb));
} break; } break;
case NOTIFICATION_TRANSFORM_CHANGED: { case NOTIFICATION_TRANSFORM_CHANGED: {
get_world_3d()->_update_notifier(this, get_global_transform().xform(aabb)); world->_update_notifier(this, get_global_transform().xform(aabb));
} break; } break;
case NOTIFICATION_EXIT_WORLD: { case NOTIFICATION_EXIT_WORLD: {
get_world_3d()->_remove_notifier(this); ERR_FAIL_COND(!world.is_valid());
world->_remove_notifier(this);
} break; } break;
} }
} }

View File

@ -33,10 +33,12 @@
#include "scene/3d/node_3d.h" #include "scene/3d/node_3d.h"
class World3D;
class Camera3D; class Camera3D;
class VisibilityNotifier3D : public Node3D { class VisibilityNotifier3D : public Node3D {
GDCLASS(VisibilityNotifier3D, Node3D); GDCLASS(VisibilityNotifier3D, Node3D);
Ref<World3D> world;
Set<Camera3D *> cameras; Set<Camera3D *> cameras;
AABB aabb; AABB aabb;