summaryrefslogtreecommitdiff
path: root/scene/2d/ray_cast_2d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/2d/ray_cast_2d.cpp')
-rw-r--r--scene/2d/ray_cast_2d.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/scene/2d/ray_cast_2d.cpp b/scene/2d/ray_cast_2d.cpp
index 6cda52fa4e..b5d62adfb4 100644
--- a/scene/2d/ray_cast_2d.cpp
+++ b/scene/2d/ray_cast_2d.cpp
@@ -29,6 +29,7 @@
#include "ray_cast_2d.h"
#include "servers/physics_2d_server.h"
#include "collision_object_2d.h"
+#include "physics_body_2d.h"
void RayCast2D::set_cast_to(const Vector2& p_point) {
@@ -106,6 +107,30 @@ bool RayCast2D::is_enabled() const {
return enabled;
}
+void RayCast2D::set_exclude_parent_body(bool p_exclude_parent_body) {
+
+ if (exclude_parent_body==p_exclude_parent_body)
+ return;
+
+ exclude_parent_body=p_exclude_parent_body;
+
+ if (!is_inside_tree())
+ return;
+
+
+
+ if (get_parent()->cast_to<PhysicsBody2D>()) {
+ if (exclude_parent_body)
+ exclude.insert( get_parent()->cast_to<PhysicsBody2D>()->get_rid() );
+ else
+ exclude.erase( get_parent()->cast_to<PhysicsBody2D>()->get_rid() );
+ }
+}
+
+bool RayCast2D::get_exclude_parent_body() const{
+
+ return exclude_parent_body;
+}
void RayCast2D::_notification(int p_what) {
@@ -118,6 +143,12 @@ void RayCast2D::_notification(int p_what) {
else
set_fixed_process(false);
+ if (get_parent()->cast_to<PhysicsBody2D>()) {
+ if (exclude_parent_body)
+ exclude.insert( get_parent()->cast_to<PhysicsBody2D>()->get_rid() );
+ else
+ exclude.erase( get_parent()->cast_to<PhysicsBody2D>()->get_rid() );
+ }
} break;
case NOTIFICATION_EXIT_TREE: {
@@ -254,7 +285,11 @@ void RayCast2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_type_mask","mask"),&RayCast2D::set_type_mask);
ObjectTypeDB::bind_method(_MD("get_type_mask"),&RayCast2D::get_type_mask);
+ ObjectTypeDB::bind_method(_MD("set_exclude_parent_body","mask"),&RayCast2D::set_exclude_parent_body);
+ ObjectTypeDB::bind_method(_MD("get_exclude_parent_body"),&RayCast2D::get_exclude_parent_body);
+
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"enabled"),_SCS("set_enabled"),_SCS("is_enabled"));
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL,"exclude_parent"),_SCS("set_exclude_parent_body"),_SCS("get_exclude_parent_body"));
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2,"cast_to"),_SCS("set_cast_to"),_SCS("get_cast_to"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"layer_mask",PROPERTY_HINT_ALL_FLAGS),_SCS("set_layer_mask"),_SCS("get_layer_mask"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"type_mask",PROPERTY_HINT_FLAGS,"Static,Kinematic,Rigid,Character,Area"),_SCS("set_type_mask"),_SCS("get_type_mask"));
@@ -269,4 +304,5 @@ RayCast2D::RayCast2D() {
layer_mask=1;
type_mask=Physics2DDirectSpaceState::TYPE_MASK_COLLISION;
cast_to=Vector2(0,50);
+ exclude_parent_body=true;
}