소스 검색

Fix for assertation error on collisionchain2d

rsredsq 10 년 전
부모
커밋
8fb4bf6f75
2개의 변경된 파일9개의 추가작업 그리고 5개의 파일을 삭제
  1. 3 1
      Source/Atomic/Atomic2D/CollisionChain2D.cpp
  2. 6 4
      Source/Atomic/Atomic2D/CollisionShape2D.cpp

+ 3 - 1
Source/Atomic/Atomic2D/CollisionChain2D.cpp

@@ -33,6 +33,8 @@
 namespace Atomic
 {
 
+extern const char* ATOMIC2D_CATEGORY;
+
 CollisionChain2D::CollisionChain2D(Context* context) :
     CollisionShape2D(context),
     loop_(false)
@@ -46,7 +48,7 @@ CollisionChain2D::~CollisionChain2D()
 
 void CollisionChain2D::RegisterObject(Context* context)
 {
-    context->RegisterFactory<CollisionChain2D>();
+    context->RegisterFactory<CollisionChain2D>(ATOMIC2D_CATEGORY);
 
     ACCESSOR_ATTRIBUTE("Is Enabled", IsEnabled, SetEnabled, bool, true, AM_DEFAULT);
     ACCESSOR_ATTRIBUTE("Loop", GetLoop, SetLoop, bool, false, AM_DEFAULT);

+ 6 - 4
Source/Atomic/Atomic2D/CollisionShape2D.cpp

@@ -35,8 +35,6 @@
 namespace Atomic
 {
 
-extern const char* ATOMIC2D_CATEGORY;
-
 CollisionShape2D::CollisionShape2D(Context* context) :
     Component(context),
     fixture_(0),
@@ -218,8 +216,12 @@ void CollisionShape2D::CreateFixture()
     if (!body)
         return;
 
-    fixture_ = body->CreateFixture(&fixtureDef_);
-    fixture_->SetUserData(this);
+    // Chain shape must have atleast two vertices before creating fixture
+    if (fixtureDef_.shape->m_type != b2Shape::e_chain || static_cast<const b2ChainShape*>(fixtureDef_.shape)->m_count >= 2)
+    {
+        fixture_ = body->CreateFixture(&fixtureDef_);
+        fixture_->SetUserData(this);
+    }
 }
 
 void CollisionShape2D::ReleaseFixture()