summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
Diffstat (limited to 'scene')
-rw-r--r--scene/2d/camera_2d.cpp12
-rw-r--r--scene/3d/shape_cast_3d.cpp20
-rw-r--r--scene/3d/shape_cast_3d.h6
3 files changed, 18 insertions, 20 deletions
diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp
index f7d2ae7d2d..2b90a3702f 100644
--- a/scene/2d/camera_2d.cpp
+++ b/scene/2d/camera_2d.cpp
@@ -414,15 +414,19 @@ Camera2D::Camera2DProcessCallback Camera2D::get_process_callback() const {
}
void Camera2D::_make_current(Object *p_which) {
+ if (!viewport || (custom_viewport && !ObjectDB::get_instance(custom_viewport_id))) {
+ return;
+ }
+
if (p_which == this) {
if (is_inside_tree()) {
- get_viewport()->_camera_2d_set(this);
+ viewport->_camera_2d_set(this);
queue_redraw();
}
} else {
if (is_inside_tree()) {
- if (get_viewport()->get_camera_2d() == this) {
- get_viewport()->_camera_2d_set(nullptr);
+ if (viewport->get_camera_2d() == this) {
+ viewport->_camera_2d_set(nullptr);
}
queue_redraw();
}
@@ -449,7 +453,7 @@ void Camera2D::make_current() {
void Camera2D::clear_current() {
ERR_FAIL_COND(!is_current());
- if (viewport && !(custom_viewport && !ObjectDB::get_instance(custom_viewport_id))) {
+ if (viewport && !(custom_viewport && !ObjectDB::get_instance(custom_viewport_id)) && viewport->is_inside_tree()) {
viewport->assign_next_enabled_camera_2d(group_name);
}
}
diff --git a/scene/3d/shape_cast_3d.cpp b/scene/3d/shape_cast_3d.cpp
index 87361d6b38..d880e422f0 100644
--- a/scene/3d/shape_cast_3d.cpp
+++ b/scene/3d/shape_cast_3d.cpp
@@ -437,26 +437,18 @@ void ShapeCast3D::add_exception_rid(const RID &p_rid) {
exclude.insert(p_rid);
}
-void ShapeCast3D::add_exception(const Object *p_object) {
- ERR_FAIL_NULL(p_object);
- const CollisionObject3D *co = Object::cast_to<CollisionObject3D>(p_object);
- if (!co) {
- return;
- }
- add_exception_rid(co->get_rid());
+void ShapeCast3D::add_exception(const CollisionObject3D *p_node) {
+ ERR_FAIL_NULL_MSG(p_node, "The passed Node must be an instance of CollisionObject3D.");
+ add_exception_rid(p_node->get_rid());
}
void ShapeCast3D::remove_exception_rid(const RID &p_rid) {
exclude.erase(p_rid);
}
-void ShapeCast3D::remove_exception(const Object *p_object) {
- ERR_FAIL_NULL(p_object);
- const CollisionObject3D *co = Object::cast_to<CollisionObject3D>(p_object);
- if (!co) {
- return;
- }
- remove_exception_rid(co->get_rid());
+void ShapeCast3D::remove_exception(const CollisionObject3D *p_node) {
+ ERR_FAIL_NULL_MSG(p_node, "The passed Node must be an instance of CollisionObject3D.");
+ remove_exception_rid(p_node->get_rid());
}
void ShapeCast3D::clear_exceptions() {
diff --git a/scene/3d/shape_cast_3d.h b/scene/3d/shape_cast_3d.h
index 344f1d3b8a..98158d3c7c 100644
--- a/scene/3d/shape_cast_3d.h
+++ b/scene/3d/shape_cast_3d.h
@@ -34,6 +34,8 @@
#include "scene/3d/node_3d.h"
#include "scene/resources/shape_3d.h"
+class CollisionObject3D;
+
class ShapeCast3D : public Node3D {
GDCLASS(ShapeCast3D, Node3D);
@@ -133,9 +135,9 @@ public:
bool is_colliding() const;
void add_exception_rid(const RID &p_rid);
- void add_exception(const Object *p_object);
+ void add_exception(const CollisionObject3D *p_node);
void remove_exception_rid(const RID &p_rid);
- void remove_exception(const Object *p_object);
+ void remove_exception(const CollisionObject3D *p_node);
void clear_exceptions();
virtual PackedStringArray get_configuration_warnings() const override;