CollisionShape2D::~CollisionShape2D() { if (rigidBody_) rigidBody_->RemoveCollisionShape2D(this); ReleaseFixture(); }
void CollisionEdge2D::RecreateFixture() { ReleaseFixture(); Vector2 worldScale(cachedWorldScale_.x_, cachedWorldScale_.y_); edgeShape_.Set(ToB2Vec2(vertex1_ * worldScale), ToB2Vec2(vertex2_ * worldScale)); CreateFixture(); }
void CollisionCircle2D::RecreateFixture() { ReleaseFixture(); // Only use scale in x axis for circle float worldScale = cachedWorldScale_.x_; circleShape_.m_radius = radius_ * worldScale; circleShape_.m_p = ToB2Vec2(center_ * worldScale); CreateFixture(); }
void CollisionShape2D::OnSetEnabled() { if (IsEnabledEffective()) { CreateFixture(); if (rigidBody_) rigidBody_->AddCollisionShape2D(this); } else { if (rigidBody_) rigidBody_->RemoveCollisionShape2D(this); ReleaseFixture(); } }
void CollisionBox2D::RecreateFixture() { ReleaseFixture(); float worlsScaleX = cachedWorldScale_.x_; float worldScaleY = cachedWorldScale_.y_; float halfWidth = size_.x_ * 0.5f * worlsScaleX; float halfHeight = size_.y_ * 0.5f * worldScaleY; Vector2 scaledCenter = center_ * Vector2(worlsScaleX, worldScaleY); if (scaledCenter == Vector2::ZERO && angle_ == 0.0f) boxShape_.SetAsBox(halfWidth, halfHeight); else boxShape_.SetAsBox(halfWidth, halfHeight, ToB2Vec2(scaledCenter), angle_ * M_DEGTORAD); CreateFixture(); }
void CollisionChain2D::RecreateFixture() { ReleaseFixture(); PODVector<b2Vec2> b2Vertices; unsigned count = vertices_.Size(); b2Vertices.Resize(count); Vector2 worldScale(cachedWorldScale_.x_, cachedWorldScale_.y_); for (unsigned i = 0; i < count; ++i) b2Vertices[i] = ToB2Vec2(vertices_[i] * worldScale); if (loop_) chainShape_.CreateLoop(&b2Vertices[0], count); else chainShape_.CreateChain(&b2Vertices[0], count); CreateFixture(); }
void CollisionPolygon2D::RecreateFixture() { ReleaseFixture(); if (vertices_.Size() < 3) return; PODVector<b2Vec2> b2Vertices; unsigned count = vertices_.Size(); b2Vertices.Resize(count); Vector2 worldScale(cachedWorldScale_.x_, cachedWorldScale_.y_); for (unsigned i = 0; i < count; ++i) b2Vertices[i] = ToB2Vec2(vertices_[i] * worldScale); polygonShape_.Set(&b2Vertices[0], count); CreateFixture(); }
void CollisionChain2D::RecreateFixture() { ReleaseFixture(); std::vector<b2Vec2> b2Vertices; size_t count = vertices_.size(); b2Vertices.resize(count); Vector2 worldScale(cachedWorldScale_.x_, cachedWorldScale_.y_); for (size_t i = 0; i < count; ++i) b2Vertices[i] = ToB2Vec2(vertices_[i] * worldScale); chainShape_.Clear(); if (loop_) chainShape_.CreateLoop(&b2Vertices[0], count); else chainShape_.CreateChain(&b2Vertices[0], count); CreateFixture(); }