//---------------------------------------------------------------------------------- // //---------------------------------------------------------------------------------- void CoreLayer2D_Imp::EndUpdating(bool isUpdated) { if (isUpdated) { m_renderer->GetEffectManager()->Update(core->GetDeltaTime() / (1.0f / 60.0f)); m_renderer->GetEffectManager()->Flip(); } #if __CULLING_2D__ //グリッド更新処理 { for (auto x : transformedObjects) { auto userData = (Culling2DUserData*)(x->GetUserData()); if (userData->IsObject) { auto impObj = CoreObject2DToImp(userData->Object); impObj->CalculateBoundingCircle(); auto newCircle = impObj->GetBoundingCircle(); x->SetCircle(newCircle); } else { auto impObj = CoreObject2DToImp(userData->Object); auto chip = (CoreChip2D_Imp*)userData->Chip; auto newCircle = chip->GetBoundingCircle(); x->SetCircle(newCircle); } } world->Update(); transformedObjects.clear(); } #endif }
void CoreGeometryObject2D_Imp::CalculateBoundingCircle() { auto shape_Imp = CoreShape2DToImp(m_shape); if (shape_Imp == nullptr) { m_boundingCircle = culling2d::Circle(culling2d::Vector2DF(), 0); return; } m_boundingCircle = shape_Imp->GetBoundingCircle(); std::array<Vector2DF, 4> position; auto p1 = m_boundingCircle.Position - culling2d::Vector2DF(m_boundingCircle.Radius, 0); position[0] = Vector2DF(p1.X, p1.Y); auto p2 = m_boundingCircle.Position + culling2d::Vector2DF(m_boundingCircle.Radius, 0); position[1] = Vector2DF(p2.X, p2.Y); auto p3 = m_boundingCircle.Position - culling2d::Vector2DF(0, m_boundingCircle.Radius); position[2] = Vector2DF(p3.X, p3.Y); auto p4 = m_boundingCircle.Position + culling2d::Vector2DF(0, m_boundingCircle.Radius); position[3] = Vector2DF(p4.X, p4.Y); auto parentMatrix = GetParentsMatrix(); auto matrix = GetMatrixToTransform(); Vector2DF sum = Vector2DF(); for (auto& pos : position) { pos -= centerPosition; auto v3 = Vector3DF(pos.X, pos.Y, 1); auto result = parentMatrix * matrix * v3; pos = Vector2DF(result.X, result.Y); sum += pos; } auto c = sum / 4.0f; auto r = 0.0f; for (auto& pos : position) { r = Max(r, (pos - c).GetLength()); } m_boundingCircle = culling2d::Circle(culling2d::Vector2DF(c.X, c.Y), r); }