summaryrefslogtreecommitdiff
path: root/servers/physics_2d
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2016-03-10 06:29:20 +0100
committerRémi Verschelde <remi@verschelde.fr>2016-03-10 06:29:20 +0100
commitb5f873c9d132ea80b3f221b3bfd149d02f4f2aac (patch)
tree7e0e5afc42a6979e1b0410fb00f546c6516f4efd /servers/physics_2d
parent6ef3c3b6458f6d3156cdcfc6b906b8dba4c91a2b (diff)
parent3fc16d402514550206709c87616657ce7c0933ea (diff)
Merge pull request #3999 from neikeq/issues_3650_3990
Fix crash when resizing ConcavePolygonShape2D segments
Diffstat (limited to 'servers/physics_2d')
-rw-r--r--servers/physics_2d/shape_2d_sw.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/servers/physics_2d/shape_2d_sw.cpp b/servers/physics_2d/shape_2d_sw.cpp
index bd36f4060b..8b583dd3c6 100644
--- a/servers/physics_2d/shape_2d_sw.cpp
+++ b/servers/physics_2d/shape_2d_sw.cpp
@@ -968,19 +968,25 @@ void ConcavePolygonShape2DSW::set_data(const Variant& p_data) {
ERR_FAIL_COND(p_data.get_type()!=Variant::VECTOR2_ARRAY && p_data.get_type()!=Variant::REAL_ARRAY);
- segments.clear();;
- points.clear();;
- bvh.clear();;
- bvh_depth=1;
-
Rect2 aabb;
if (p_data.get_type()==Variant::VECTOR2_ARRAY) {
DVector<Vector2> p2arr = p_data;
int len = p2arr.size();
- DVector<Vector2>::Read arr = p2arr.read();
+ ERR_FAIL_COND(len%2);
+ segments.clear();
+ points.clear();
+ bvh.clear();
+ bvh_depth=1;
+
+ if (len==0) {
+ configure(aabb);
+ return;
+ }
+
+ DVector<Vector2>::Read arr = p2arr.read();
Map<Point2,int> pointmap;
for(int i=0;i<len;i+=2) {
@@ -988,8 +994,6 @@ void ConcavePolygonShape2DSW::set_data(const Variant& p_data) {
Point2 p1 =arr[i];
Point2 p2 =arr[i+1];
int idx_p1,idx_p2;
- if (p1==p2)
- continue; //don't want it
if (pointmap.has(p1)) {
idx_p1=pointmap[p1];