From bdbbc78da4f1df10e38b32c05d89efd0c213a431 Mon Sep 17 00:00:00 2001 From: kobewi Date: Sun, 8 May 2022 00:31:40 +0200 Subject: [PATCH] Mention that Area2D doesn't support one_way_collision (cherry picked from commit c836bdf5b117c0262ca0794443da80fc3aba7ed3) --- doc/classes/CollisionPolygon2D.xml | 1 + doc/classes/CollisionShape2D.xml | 1 + scene/2d/collision_polygon_2d.cpp | 5 +++++ scene/2d/collision_shape_2d.cpp | 5 +++++ 4 files changed, 12 insertions(+) diff --git a/doc/classes/CollisionPolygon2D.xml b/doc/classes/CollisionPolygon2D.xml index 2f42aff7fa5..4b28480ceba 100644 --- a/doc/classes/CollisionPolygon2D.xml +++ b/doc/classes/CollisionPolygon2D.xml @@ -19,6 +19,7 @@ If [code]true[/code], only edges that face up, relative to [CollisionPolygon2D]'s rotation, will collide with other objects. + [b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a child of an [Area2D] node. The margin used for one-way collision (in pixels). Higher values will make the shape thicker, and work better for colliders that enter the polygon at a high velocity. diff --git a/doc/classes/CollisionShape2D.xml b/doc/classes/CollisionShape2D.xml index 19d93f6452b..ca12e0fc318 100644 --- a/doc/classes/CollisionShape2D.xml +++ b/doc/classes/CollisionShape2D.xml @@ -20,6 +20,7 @@ Sets whether this collision shape should only detect collision on one side (top or bottom). + [b]Note:[/b] This property has no effect if this [CollisionShape2D] is a child of an [Area2D] node. The margin used for one-way collision (in pixels). Higher values will make the shape thicker, and work better for colliders that enter the shape at a high velocity. diff --git a/scene/2d/collision_polygon_2d.cpp b/scene/2d/collision_polygon_2d.cpp index ab1cfedc535..23ff5074a95 100644 --- a/scene/2d/collision_polygon_2d.cpp +++ b/scene/2d/collision_polygon_2d.cpp @@ -32,6 +32,7 @@ #include "collision_object_2d.h" #include "core/engine.h" +#include "scene/2d/area_2d.h" #include "scene/resources/concave_polygon_shape_2d.h" #include "scene/resources/convex_polygon_shape_2d.h" @@ -273,6 +274,9 @@ String CollisionPolygon2D::get_configuration_warning() const { warning += TTR("Invalid polygon. At least 2 points are needed in 'Segments' build mode."); } } + if (one_way_collision && Object::cast_to(get_parent())) { + warning += TTR("The One Way Collision property will be ignored when the parent is an Area2D."); + } return warning; } @@ -295,6 +299,7 @@ void CollisionPolygon2D::set_one_way_collision(bool p_enable) { if (parent) { parent->shape_owner_set_one_way_collision(owner_id, p_enable); } + update_configuration_warning(); } bool CollisionPolygon2D::is_one_way_collision_enabled() const { diff --git a/scene/2d/collision_shape_2d.cpp b/scene/2d/collision_shape_2d.cpp index ef867ff9f07..5bd8e3db952 100644 --- a/scene/2d/collision_shape_2d.cpp +++ b/scene/2d/collision_shape_2d.cpp @@ -32,6 +32,7 @@ #include "collision_object_2d.h" #include "core/engine.h" +#include "scene/2d/area_2d.h" #include "scene/resources/capsule_shape_2d.h" #include "scene/resources/circle_shape_2d.h" #include "scene/resources/concave_polygon_shape_2d.h" @@ -204,6 +205,9 @@ String CollisionShape2D::get_configuration_warning() const { warning += TTR("Polygon-based shapes are not meant be used nor edited directly through the CollisionShape2D node. Please use the CollisionPolygon2D node instead."); } } + if (one_way_collision && Object::cast_to(get_parent())) { + warning += TTR("The One Way Collision property will be ignored when the parent is an Area2D."); + } return warning; } @@ -226,6 +230,7 @@ void CollisionShape2D::set_one_way_collision(bool p_enable) { if (parent) { parent->shape_owner_set_one_way_collision(owner_id, p_enable); } + update_configuration_warning(); } bool CollisionShape2D::is_one_way_collision_enabled() const {