void CollisionEdge2D::RecreateFixture() { ReleaseFixture(); Vector2 worldScale(cachedWorldScale_.x_, cachedWorldScale_.y_); edgeShape_.Set(ToB2Vec2(vertex1_ * worldScale), ToB2Vec2(vertex2_ * worldScale)); 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(); }
void SceneGraphNode::update(const UpdateData& data) { if (_ephemeris) { if (data.doPerformanceMeasurement) { glFinish(); auto start = std::chrono::high_resolution_clock::now(); _ephemeris->update(data); glFinish(); auto end = std::chrono::high_resolution_clock::now(); _performanceRecord.updateTimeEphemeris = (end - start).count(); } else _ephemeris->update(data); } if (_rotation) { if (data.doPerformanceMeasurement) { glFinish(); auto start = std::chrono::high_resolution_clock::now(); _rotation->update(data); glFinish(); auto end = std::chrono::high_resolution_clock::now(); _performanceRecord.updateTimeEphemeris = (end - start).count(); } else _rotation->update(data); } if (_scale) { if (data.doPerformanceMeasurement) { glFinish(); auto start = std::chrono::high_resolution_clock::now(); _scale->update(data); glFinish(); auto end = std::chrono::high_resolution_clock::now(); _performanceRecord.updateTimeEphemeris = (end - start).count(); } else _scale->update(data); } UpdateData newUpdateData = data; _worldRotationCached = calculateWorldRotation(); _worldScaleCached = calculateWorldScale(); // Assumes _worldRotationCached and _worldScaleCached have been calculated for parent _worldPositionCached = calculateWorldPosition(); newUpdateData.modelTransform.translation = worldPosition(); newUpdateData.modelTransform.rotation = worldRotationMatrix(); newUpdateData.modelTransform .scale = worldScale(); if (_renderable && _renderable->isReady()) { if (data.doPerformanceMeasurement) { glFinish(); auto start = std::chrono::high_resolution_clock::now(); _renderable->update(newUpdateData); glFinish(); auto end = std::chrono::high_resolution_clock::now(); _performanceRecord.updateTimeRenderable = (end - start).count(); } else _renderable->update(newUpdateData); } }