Browse Source

better Fixture Shape management

--HG--
branch : box2d-update
Bill Meltsner 14 years ago
parent
commit
06820210eb
1 changed files with 4 additions and 3 deletions
  1. 4 3
      src/modules/physics/box2d/Fixture.cpp

+ 4 - 3
src/modules/physics/box2d/Fixture.cpp

@@ -37,10 +37,9 @@ namespace physics
 namespace box2d
 namespace box2d
 {
 {
 	Fixture::Fixture(Body * body, Shape * shape, float density)
 	Fixture::Fixture(Body * body, Shape * shape, float density)
-		: body(body), shape(shape), fixture(NULL)
+		: body(body), fixture(NULL)
 	{
 	{
 		body->retain();
 		body->retain();
-		shape->retain();
 		data = new fixtureudata();
 		data = new fixtureudata();
 		data->ref = 0;
 		data->ref = 0;
 		b2FixtureDef def;
 		b2FixtureDef def;
@@ -48,6 +47,7 @@ namespace box2d
 		def.userData = (void *)data;
 		def.userData = (void *)data;
 		def.density = density;
 		def.density = density;
 		fixture = body->body->CreateFixture(&def);
 		fixture = body->body->CreateFixture(&def);
+		shape = new Shape(fixture->GetShape());
 		Memoizer::add(fixture, this);
 		Memoizer::add(fixture, this);
 	}
 	}
 	
 	
@@ -60,7 +60,7 @@ namespace box2d
 		body->retain();
 		body->retain();
 		shape = (Shape *)Memoizer::find(f->GetShape());
 		shape = (Shape *)Memoizer::find(f->GetShape());
 		if (!shape) shape = new Shape(f->GetShape());
 		if (!shape) shape = new Shape(f->GetShape());
-		shape->retain();
+		else shape->retain();
 		Memoizer::add(fixture, this);
 		Memoizer::add(fixture, this);
 	}
 	}
 
 
@@ -77,6 +77,7 @@ namespace box2d
 		fixture = 0;
 		fixture = 0;
 
 
 		body->release();
 		body->release();
+		shape->release();
 	}
 	}
 
 
 	Shape::Type Fixture::getType() const
 	Shape::Type Fixture::getType() const