diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2016-03-10 06:29:20 +0100 |
---|---|---|
committer | Rémi Verschelde <remi@verschelde.fr> | 2016-03-10 06:29:20 +0100 |
commit | b5f873c9d132ea80b3f221b3bfd149d02f4f2aac (patch) | |
tree | 7e0e5afc42a6979e1b0410fb00f546c6516f4efd /servers/physics_2d | |
parent | 6ef3c3b6458f6d3156cdcfc6b906b8dba4c91a2b (diff) | |
parent | 3fc16d402514550206709c87616657ce7c0933ea (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.cpp | 20 |
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]; |