diff options
| author | Ignacio Etcheverry | 2016-03-09 19:52:15 +0100 |
|---|---|---|
| committer | Rémi Verschelde | 2016-04-02 22:04:41 +0200 |
| commit | 6ce273b3291f508e2a822348fde5a12e0b51365b (patch) | |
| tree | ebd93335a787d0146e3d3b7f049b4705acea5c9d | |
| parent | 0635a639e92577948ce61011ee31abedb35c05f6 (diff) | |
| download | godot-6ce273b3291f508e2a822348fde5a12e0b51365b.tar.gz godot-6ce273b3291f508e2a822348fde5a12e0b51365b.tar.zst godot-6ce273b3291f508e2a822348fde5a12e0b51365b.zip | |
Fix crash when resizing ConcavePolygonShape2D segments
(cherry picked from commit 3fc16d402514550206709c87616657ce7c0933ea)
| -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 bd36f4060..8b583dd3c 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]; |
