Browse Source

Fixed ChainShape:getChildEdge crashing

Alex Szpakowski 12 years ago
parent
commit
4f6e956f85

+ 11 - 8
src/modules/physics/box2d/ChainShape.cpp

@@ -70,16 +70,19 @@ void ChainShape::setPrevVertex(float x, float y)
 EdgeShape *ChainShape::getChildEdge(int index) const
 {
 	b2ChainShape *c = (b2ChainShape *)shape;
-	b2EdgeShape e;
-	c->GetChildEdge(&e, index);
-	EdgeShape *edge = (EdgeShape *)Memoizer::find(&e);
-	if (!edge)
-		return new EdgeShape(&e);
-	else
+	b2EdgeShape *e = new b2EdgeShape;
+
+	try
+	{
+		c->GetChildEdge(e, index);
+	}
+	catch (love::Exception &ex)
 	{
-		edge->retain();
-		return edge;
+		delete e;
+		throw;
 	}
+
+	return new EdgeShape(e, true);
 }
 
 int ChainShape::getChildCount() const

+ 2 - 1
src/modules/physics/box2d/wrap_ChainShape.cpp

@@ -63,7 +63,8 @@ int w_ChainShape_getChildEdge(lua_State *L)
 {
 	ChainShape *c = luax_checkchainshape(L, 1);
 	int index = luaL_checkint(L, 2) - 1; // Convert from 1-based index
-	EdgeShape *e = c->getChildEdge(index);
+	EdgeShape *e = 0;
+	ASSERT_GUARD(e = c->getChildEdge(index);)
 	luax_newtype(L, "EdgeShape", PHYSICS_EDGE_SHAPE_T, e);
 	return 1;
 }