// Context Pick Manager - GPU accelerated hover effects // Smart glow colors based on element type #include #include #include "fiko/render/context_pick_manager.hpp" #include "fiko/core/mat/vec.hpp" #include "fiko/sahne/sahne.hpp" namespace fiko::render { ContextPickManager::ContextPickManager(Cekirdek& cekirdek, Sahne& sahne) : cekirdek_(cekirdek), sahne_(sahne) {} void ContextPickManager::setHover(Dugum* dugum, f32 intensity) { if (!dugum) return; // Get element type directly from scene node (DugumTip zaten kategoriyi tasir) const DugumTip tip = dugum->tip; // Get context-aware glow color const Vec3f color = getGlowColor(tip); // Update context data for GPU contextData_.hoverPos = {(f32)dugum->donusum.konum.x, (f32)dugum->donusum.konum.y, (f32)dugum->donusum.konum.z, 1.0f}; contextData_.glowIntensity = std::clamp(intensity, 0.3f, 1.0f); // Broadcast to render pipeline cekirdek_.olaylar().yayinla(ContextHoverDegisti{ dugum->kimlik, tip, color, contextData_.glowIntensity }); } void ContextPickManager::updateGlowIntensity(f32 intensity) { contextData_.glowIntensity = std::clamp(intensity, 0.0f, 1.0f); } Vec3f ContextPickManager::getGlowColor(DugumTip tip) const { switch (tip) { case DugumTip::Yuzey: return Vec3f{0.0f, 0.9f, 1.0f}; // Yuzey (surface) glow - teal cyan case DugumTip::Tel: return Vec3f{0.0f, 1.0f, 1.0f}; // Tel (wire) glow - cyan case DugumTip::Duzlem: return Vec3f{0.95f, 0.30f, 0.85f}; // Duzlem (datum plane) glow - purple magenta case DugumTip::Eksen: case DugumTip::EksenSistemi: return Vec3f{1.0f, 0.55f, 0.25f}; // Eksen (axis) glow - orange coral case DugumTip::Nokta: case DugumTip::Cizgi: return Vec3f{0.95f, 0.30f, 0.85f}; // Referans nokta/cizgi - purple magenta case DugumTip::Kutu: case DugumTip::Silindir: case DugumTip::Kure: case DugumTip::Koni: case DugumTip::Birlesim: case DugumTip::Cikarma: case DugumTip::Kesisim: case DugumTip::Ithal: return Vec3f{0.20f, 0.75f, 0.45f}; // Govde (solid body) glow - emerald green default: return Vec3f{0.2f, 0.2f, 0.2f}; // Fallback: dark gray } } } // namespace fiko::render