#include "isik_penceresi.hpp" #include #include "fiko/ui/pencere_cerceve.hpp" #include "fiko/ui/tema.hpp" #include "imgui.h" #include "isik_durum.hpp" #include "uygulama_baglam.hpp" namespace fiko { namespace { // Bir yönsel ışığın ayar bloğu (renk + şiddet + yön/headlight + aç-kapa). void yonselAyar(const char* etiket, YonselIsik& y) { const ImVec4 BASLIK = ui::tema().uyari; const ImVec4 SOLUK = ui::tema().metinSoluk; ImGui::PushID(etiket); ImGui::Checkbox("Açık", &y.aktif); ImGui::SameLine(); ImGui::TextColored(BASLIK, "%s", etiket); ImGui::BeginDisabled(!y.aktif); ImGui::ColorEdit3("Renk", &y.renk.x, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_Float); ImGui::SetNextItemWidth(-1); ImGui::SliderFloat("##siddet", &y.siddet, 0.0f, 3.0f, "Şiddet %.2f"); ImGui::Checkbox("Kamerayı Takip Et (headlight)", &y.kameraTakip); if (!y.kameraTakip) { ImGui::SetNextItemWidth(-1); if (ImGui::DragFloat3("##yon", &y.yon.x, 0.02f, -1.0f, 1.0f, "%.2f")) { const f32 u = std::sqrt(y.yon.x * y.yon.x + y.yon.y * y.yon.y + y.yon.z * y.yon.z); if (u > 1e-4f) { y.yon.x /= u; y.yon.y /= u; y.yon.z /= u; } } ImGui::TextColored(SOLUK, "Yön (dünya) — normalize edilir"); } else { ImGui::TextColored(SOLUK, "Işık kamerayla birlikte döner"); } ImGui::EndDisabled(); ImGui::PopID(); } } // namespace void isikPenceresiCiz(UygulamaBaglam& b) { if (!b.panelIsik) return; const ImVec4 SOLUK = ui::tema().metinSoluk; IsikDurum& isik = b.isik; ui::Pencere pen{"💡 Işıklar", &b.panelIsik, {.boyut = {274, 0}, .pinDurum = &b.isikUstte}}; if (pen) { // Ortam (ambient) — CATIA "Ambient" ışığı: yönsüz taban aydınlatma. if (ImGui::CollapsingHeader("Ortam Işığı (Ambient)", ImGuiTreeNodeFlags_DefaultOpen)) { ImGui::ColorEdit3("Renk##ortam", &isik.ortamRenk.x, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_Float); ImGui::SetNextItemWidth(-1); ImGui::SliderFloat("##ortamsiddet", &isik.ortamSiddet, 0.0f, 1.0f, "Şiddet %.2f"); } ImGui::Separator(); if (ImGui::CollapsingHeader("Yönsel Işık 1 (Ana / Key)", ImGuiTreeNodeFlags_DefaultOpen)) yonselAyar("Işık 1", isik.isik1); ImGui::Separator(); if (ImGui::CollapsingHeader("Yönsel Işık 2 (Dolgu / Fill)")) yonselAyar("Işık 2", isik.isik2); ImGui::Separator(); if (ImGui::Button("↻ Varsayılan Aydınlatma", {-1, 0})) isik = IsikDurum{}; ImGui::TextColored(SOLUK, "Değişiklikler sahneye anında yansır."); } } } // namespace fiko