{"version":3,"file":"fikoyt-shared-fiko-director-mode.component-1ebuuBjw.mjs","sources":["../../../projects/shared/src/lib/service/fikoyt-ui/src/lib/fiko-three-js/IFikoThreeJS/fiko-director-mode/fiko-director-mode.component.html","../../../projects/shared/src/lib/service/fikoyt-ui/src/lib/fiko-three-js/IFikoThreeJS/fiko-director-mode/fiko-director-mode.component.ts"],"sourcesContent":["\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {{sureFormatla(kayitSuresi)}}\r\n \r\n \r\n {{KAMERA_ACILARI[suankiAci].isim}}\r\n \r\n
\r\n\r\n \r\n
\r\n
KAMERA
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n Hız\r\n \r\n {{kameraHizi}}%\r\n
\r\n
\r\n Zoom\r\n \r\n {{zoomSiddeti}}%\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n
MÜZİK
\r\n \r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
0 ? (muzikPozisyon / muzikSure) * 100 : 0\">
\r\n
\r\n {{sureFormatla(muzikPozisyon)}}\r\n
\r\n
\r\n\r\n \r\n
\r\n Ses\r\n \r\n {{muzikSes}}%\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n Beat\r\n \r\n {{ritimSiddeti}}%\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
BEAT
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n Orbit\r\n \r\n {{beatOrbitHizi}}%\r\n
\r\n
\r\n Zoom\r\n \r\n {{beatZoomEfekti}}%\r\n
\r\n
\r\n Shake\r\n \r\n {{beatShakeEfekti}}%\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n
KAYIT
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {{muzikIsim}}\r\n
\r\n\r\n \r\n
\r\n \r\n Beat modu için müzik yükle ve oynat\r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n
GELİŞMİŞ
\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n
Beat Algılama
\r\n
\r\n Hassas\r\n \r\n {{beatHassasiyet}}%\r\n
\r\n
\r\n Cooldown\r\n \r\n {{beatCooldownAyar}}ms\r\n
\r\n
\r\n Bass\r\n \r\n {{beatBassAgirlik}}%\r\n
\r\n
\r\n Mid\r\n \r\n {{beatMidAgirlik}}%\r\n
\r\n
\r\n\r\n \r\n
\r\n
Beat Tepki Şiddetleri
\r\n
\r\n Zoom\r\n \r\n {{beatZoomTepki}}%\r\n
\r\n
\r\n Orbit\r\n \r\n {{beatOrbitTepki}}%\r\n
\r\n
\r\n Mesafe\r\n \r\n {{beatMesafeTepki}}%\r\n
\r\n
\r\n Yüks.\r\n \r\n {{beatYukseklikTepki}}%\r\n
\r\n
\r\n Shake\r\n \r\n {{beatShakeTepki}}%\r\n
\r\n
\r\n Target\r\n \r\n {{beatTargetTepki}}%\r\n
\r\n
\r\n\r\n \r\n
\r\n
Genel Ayarlar
\r\n
\r\n Hız\r\n \r\n {{beatTepkiHizi}}%\r\n
\r\n
\r\n Enerji\r\n \r\n {{beatEnerjiCarpani}}%\r\n
\r\n
\r\n Geri Dön\r\n \r\n {{beatZoomGeriDonus}}%\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n \r\n Beat Aktif\r\n \r\n \r\n Director Aktif\r\n \r\n \r\n HD {{kayitKalitesi >= 5000000 ? '4K' : kayitKalitesi >= 2500000 ? '1080p' : '720p'}} WebM\r\n \r\n
\r\n
\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectorRef, OnDestroy, ElementRef, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport * as THREE from 'three';\r\n\r\n/** Kamera açısı tipleri */\r\nexport type KameraAcisi = 'drone' | 'yakin' | 'profil' | 'ust' | 'takim' | 'epik' | 'beat';\r\n\r\n/** Director Mode durumu */\r\nexport interface DirectorDurum {\r\n aktif: boolean;\r\n kayitYapiliyor: boolean;\r\n muzikYuklendi: boolean;\r\n suankiAci: KameraAcisi;\r\n}\r\n\r\n@Component({\r\n selector: 'fiko-director-mode',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './fiko-director-mode.component.html',\r\n styleUrls: ['./fiko-director-mode.component.less']\r\n})\r\nexport class FikoDirectorModeComponent implements OnDestroy {\r\n\r\n @ViewChild('muzikInput') muzikInputRef: ElementRef;\r\n\r\n /** FikoDialogCore pencere referansi */\r\n private _pencere: any;\r\n @Input() set pencere(v: any) {\r\n this._pencere = v?.instance || v;\r\n }\r\n get pencere(): any { return this._pencere; }\r\n\r\n /** Ana sahne referansı (anaGosterim içeren) */\r\n @Input() sahne: any;\r\n\r\n /** Simülasyon noktaları (takım yolu) */\r\n @Input() noktalar: any[] = [];\r\n\r\n /** Aktif simülasyon pozisyonu (poz index) */\r\n @Input() poz: number = 0;\r\n\r\n /** Aktif nokta bilgisi */\r\n @Input() aktifNokta: any;\r\n\r\n /** Simülasyon oynatılıyor mu */\r\n @Input() oynatiliyor: boolean = false;\r\n\r\n /** Simülasyon component referansı (canlı veri için) */\r\n @Input() simComponent: any;\r\n\r\n @Output() durumDegisti = new EventEmitter();\r\n @Output() kameraDegisti = new EventEmitter();\r\n @Output() kayitBitti = new EventEmitter();\r\n\r\n // === Temel Durum ===\r\n aktif: boolean = false;\r\n suankiAci: KameraAcisi = 'drone';\r\n otomatikAciDegisimi: boolean = true;\r\n dramatikZoom: boolean = true;\r\n\r\n // === Kamera Ayarları ===\r\n kameraHizi: number = 50;\r\n zoomSiddeti: number = 60;\r\n aciDegisimSikligi: number = 50;\r\n\r\n // === Kayıt Sistemi ===\r\n kayitYapiliyor: boolean = false;\r\n kayitSuresi: number = 0;\r\n kayitBaslamaZamani: number = 0;\r\n private mediaRecorder: MediaRecorder;\r\n private kayitChunks: Blob[] = [];\r\n kayitKalitesi: number = 2500000;\r\n\r\n // === Müzik Sistemi ===\r\n muzikYuklendi: boolean = false;\r\n muzikOynatiliyor: boolean = false;\r\n muzikIsim: string = '';\r\n muzikSure: number = 0;\r\n muzikPozisyon: number = 0;\r\n muzikSes: number = 70;\r\n private audioCtx: AudioContext;\r\n private audioSource: AudioBufferSourceNode;\r\n private audioGain: GainNode;\r\n private audioBuffer: AudioBuffer;\r\n private muzikBaslangicZamani: number = 0;\r\n\r\n // === Beat Detection & Ritim Senkron ===\r\n ritimSenkron: boolean = true; // Ritim senkronizasyonu açık/kapalı\r\n ritimSiddeti: number = 70; // Ritim efekt şiddeti (0-100)\r\n private audioAnalyser: AnalyserNode;\r\n private analyserData: Uint8Array;\r\n private sonBeatZamani: number = 0;\r\n private beatEnerji: number = 0; // Anlık beat enerjisi (0-1)\r\n private beatEnerjiSmooth: number = 0; // Yumuşatılmış enerji\r\n private oncekiEnerji: number = 0;\r\n private enerjiGecmisi: number[] = []; // Son N frame enerji (ortalama için)\r\n private beatZoomPulse: number = 0; // Zoom pulse efekti (0-1)\r\n private beatShakeOffset = new THREE.Vector3(); // Kamera shake offset\r\n\r\n // === Beat Modu Ayarları (UI'dan kontrol edilir) ===\r\n beatTakimTakip: boolean = true; // Takımı takip et (kapalıysa workpiece merkezi)\r\n beatOrbitHizi: number = 50; // Orbit (döndürme) hızı (0-100)\r\n beatZoomEfekti: number = 60; // Zoom pulse şiddeti (0-100)\r\n beatShakeEfekti: number = 50; // Kamera sarsıntı şiddeti (0-100)\r\n beatAciAtlama: boolean = true; // Beat'te açı atlama\r\n beatOrbitYonu: number = 1; // Orbit yönü: 1=saat yönü, -1=ters\r\n beatHareketTipi: 'smooth' | 'aggressive' | 'pulse' = 'smooth'; // Hareket stili\r\n\r\n // Beat modu için özel değişkenler\r\n private beatModAci: number = 0; // Beat modunda orbit açısı\r\n private beatModMesafe: number = 150; // Beat modunda kamera mesafesi\r\n private beatModYukseklik: number = 100; // Beat modunda kamera yüksekliği\r\n private beatModHedefAci: number = 0; // Beat anında hedef açı\r\n private beatModSonPozisyon: number = 0; // Beat modunda son pozisyon (0-3 kadran)\r\n private beatModIntensity: number = 0; // Beat yoğunluğu (yumuşatılmış)\r\n private beatModMevcutTarget = new THREE.Vector3(); // Mevcut hedef (takım veya merkez)\r\n\r\n // === Beat Modu - Sabit Kamera Seçeneği ===\r\n beatSabitKamera: boolean = false; // Sabit kamera - sadece zoom efekti (hareket yok)\r\n beatSabitTakimIzle: boolean = true; // Sabit modda takımı izle (target takımı takip eder)\r\n\r\n // === SERBEST KAMERA & DEMO BEAT ===\r\n serbestKamera: boolean = false; // Serbest mod - kullanıcı manuel zoom/pan yapabilir\r\n demoBeat: boolean = false; // Demo beat - müzik yokken simüle beat (test için)\r\n private demoBeatZamani: number = 0;\r\n private demoBeatInterval: number = 500; // Demo beat aralığı (ms)\r\n\r\n // === GELİŞMİŞ AYARLAR (TAM ÖZELLEŞTİRME) ===\r\n\r\n // Beat Algılama Ayarları\r\n beatHassasiyet: number = 65; // Beat algılama hassasiyeti (0-100, yüksek = daha hassas)\r\n beatCooldownAyar: number = 150; // Beat arası minimum süre (ms)\r\n beatBassAgirlik: number = 70; // Bass frekans ağırlığı (0-100)\r\n beatMidAgirlik: number = 30; // Mid frekans ağırlığı (0-100)\r\n\r\n // === BEAT TEPKİ ŞİDDETLERİ (Ritme göre ne kadar etki edecek) ===\r\n // Zoom/FOV Tepkisi\r\n beatZoomTepki: number = 60; // Beat'te zoom in şiddeti (0-100)\r\n beatZoomGeriDonus: number = 40; // Zoom'un geri dönüş hızı (0-100, düşük = yavaş)\r\n\r\n // Hareket Tepkisi\r\n beatOrbitTepki: number = 50; // Beat'te orbit hız artışı (0-100)\r\n beatMesafeTepki: number = 40; // Beat'te kamera yaklaşma şiddeti (0-100)\r\n beatYukseklikTepki: number = 50; // Beat'te kamera yükselme şiddeti (0-100)\r\n\r\n // Efekt Tepkileri\r\n beatShakeTepki: number = 50; // Beat'te kamera sarsıntı şiddeti (0-100)\r\n beatTargetTepki: number = 40; // Beat'te bakış noktası salınım şiddeti (0-100)\r\n\r\n // Genel Tepki Ayarları\r\n beatTepkiHizi: number = 50; // Beat tepkilerinin uygulanma hızı (0-100, yüksek = hızlı/keskin)\r\n beatEnerjiCarpani: number = 50; // Beat enerjisinin çarpan etkisi (0-100, yüksek = güçlü beat'lere daha fazla tepki)\r\n\r\n // Gelişmiş ayarlar paneli açık/kapalı\r\n gelismisAyarlarAcik: boolean = false;\r\n\r\n // === Sinematik Kamera Sistemi ===\r\n private animFrameId: number;\r\n private kameraGecisProgress: number = 1;\r\n private sonAciDegisimZamani: number = 0;\r\n private oncekiHareketTuru: string = '';\r\n\r\n // Takım takibi için\r\n private takimPoz = new THREE.Vector3();\r\n private takimPozOnceki = new THREE.Vector3();\r\n private takimHiz = new THREE.Vector3(); // Anlık hız vektörü\r\n private takimYonu = new THREE.Vector3(0, 0, 1); // Takım ekseni yönü (spindle yukarı = Z+)\r\n private hareketYonu = new THREE.Vector3(1, 0, 0); // Hareket yönü (normalize edilmiş)\r\n private hareketYonuSmooth = new THREE.Vector3(1, 0, 0); // Yumuşatılmış hareket yönü\r\n\r\n // Kamera geçiş vektörleri\r\n private kameraMevcutPoz = new THREE.Vector3();\r\n private kameraMevcutTarget = new THREE.Vector3();\r\n private kameraHedefPoz = new THREE.Vector3();\r\n private kameraHedefTarget = new THREE.Vector3();\r\n\r\n // Drone orbit state\r\n private droneAci: number = 0;\r\n private droneYukseklik: number = 0;\r\n private droneMesafe: number = 0;\r\n\r\n // Workpiece bounds (for framing)\r\n private workpieceMerkez = new THREE.Vector3();\r\n private workpieceBoyut = new THREE.Vector3(100, 100, 50);\r\n private workpieceMinZ: number = 0; // Workpiece alt yüzeyi\r\n private workpieceMaxZ: number = 50; // Workpiece üst yüzeyi\r\n private minKameraZ: number = 60; // Kamera minimum yüksekliği\r\n\r\n // Cinematic timing\r\n private modBaslangicZamani: number = 0;\r\n private kesimAnindaZoom: boolean = false;\r\n\r\n // === Preset Kamera Açıları ===\r\n readonly KAMERA_ACILARI: { [key in KameraAcisi]: { isim: string, ikon: string, aciklama: string } } = {\r\n 'drone': { isim: 'Drone', ikon: 'video', aciklama: 'Orbital takip - takımın etrafında döner' },\r\n 'yakin': { isim: 'Close-up', ikon: 'search plus', aciklama: 'Dramatik yakın çekim - kesim noktasına odaklanır' },\r\n 'profil': { isim: 'Profil', ikon: 'arrows alternate horizontal', aciklama: 'Yandan takip - takımla birlikte hareket' },\r\n 'ust': { isim: 'Top-Down', ikon: 'arrow down', aciklama: 'Kuş bakışı - işleme yolunu gösterir' },\r\n 'takim': { isim: 'Tool POV', ikon: 'eye', aciklama: 'Takım perspektifi - takımın arkasından bakış' },\r\n 'epik': { isim: 'Epic', ikon: 'film', aciklama: 'Sinematik geniş çekim - yavaş dolly hareketi' },\r\n 'beat': { isim: 'Beat', ikon: 'music', aciklama: 'Müzik ritmine göre hareket - beat\\'e senkronize kamera' }\r\n };\r\n\r\n constructor(private cd: ChangeDetectorRef) {}\r\n\r\n ngOnDestroy() {\r\n this.durdur();\r\n this.muzikDurdur();\r\n this.kayitDurdur();\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // ANA KONTROLLER\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n baslat() {\r\n if (this.aktif) return;\r\n this.aktif = true;\r\n this.sonAciDegisimZamani = performance.now();\r\n this.modBaslangicZamani = performance.now();\r\n this.workpieceBoundsHesapla();\r\n this.takimPozGuncelle();\r\n this.kameraBaslangicAyarla();\r\n this.animasyonDongusuBaslat();\r\n this.durumYayinla();\r\n this.cd.detectChanges();\r\n }\r\n\r\n durdur() {\r\n this.aktif = false;\r\n if (this.animFrameId) {\r\n cancelAnimationFrame(this.animFrameId);\r\n this.animFrameId = null;\r\n }\r\n this.durumYayinla();\r\n this.cd.detectChanges();\r\n }\r\n\r\n toggle() {\r\n this.aktif ? this.durdur() : this.baslat();\r\n }\r\n\r\n /** Pencereyi kapat */\r\n kapa() {\r\n this.durdur();\r\n this.muzikDurdur();\r\n this.kayitDurdur();\r\n this._pencere?.kapa?.();\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // WORKPIECE & TAKİM HESAPLAMALARI\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n private workpieceBoundsHesapla() {\r\n const noktalar = this.simComponent?.noktalar || this.noktalar;\r\n if (!noktalar?.length) return;\r\n\r\n const min = new THREE.Vector3(Infinity, Infinity, Infinity);\r\n const max = new THREE.Vector3(-Infinity, -Infinity, -Infinity);\r\n\r\n for (const n of noktalar) {\r\n min.x = Math.min(min.x, n.x);\r\n min.y = Math.min(min.y, n.y);\r\n min.z = Math.min(min.z, n.z);\r\n max.x = Math.max(max.x, n.x);\r\n max.y = Math.max(max.y, n.y);\r\n max.z = Math.max(max.z, n.z);\r\n }\r\n\r\n this.workpieceMerkez.addVectors(min, max).multiplyScalar(0.5);\r\n this.workpieceBoyut.subVectors(max, min);\r\n\r\n // Z sınırları\r\n this.workpieceMinZ = min.z;\r\n this.workpieceMaxZ = max.z;\r\n\r\n // Minimum kamera yüksekliği: workpiece üstü + biraz margin\r\n const maxXY = Math.max(this.workpieceBoyut.x, this.workpieceBoyut.y);\r\n this.minKameraZ = this.workpieceMaxZ + maxXY * 0.15;\r\n }\r\n\r\n /** Kamerayı takım yönü boyunca konumlandır\r\n * Z ekseni yerine takım yönü (takimYonu) kullanır.\r\n * Spindle yönü yukarı (workpiece'ten uzağa) olduğundan kamera da o yönden bakar.\r\n */\r\n private kameraYukseklikAyarla(hedefPoz: THREE.Vector3): THREE.Vector3 {\r\n // Takım yönü spindle'ın baktığı yön (genellikle yukarı = workpiece'ten uzağa)\r\n // Kamera bu yönden bakmalı (takımın arkasından)\r\n const ustYon = this.takimYonu.clone().normalize();\r\n\r\n // Mevcut Z offset'i takım yönüne dönüştür\r\n // hedefPoz.z - takimPoz.z = istenen yükseklik farkı\r\n const yukseklikOffset = hedefPoz.z - this.takimPoz.z;\r\n\r\n // Z'yi takım pozisyonuna eşitle, sonra takım yönünde offset ekle\r\n hedefPoz.z = this.takimPoz.z;\r\n hedefPoz.addScaledVector(ustYon, yukseklikOffset);\r\n\r\n return hedefPoz;\r\n }\r\n\r\n private takimPozGuncelle() {\r\n const aktifNokta = this.simComponent?.aktifNokta || this.aktifNokta;\r\n if (!aktifNokta) return;\r\n\r\n this.takimPozOnceki.copy(this.takimPoz);\r\n this.takimPoz.set(aktifNokta.x, aktifNokta.y, aktifNokta.z);\r\n\r\n // Hız hesapla (frame-independent)\r\n this.takimHiz.subVectors(this.takimPoz, this.takimPozOnceki);\r\n\r\n // Hareket yönü hesapla (XY düzleminde - Z'yi görmezden gel sinematik için)\r\n const hizXY = new THREE.Vector2(this.takimHiz.x, this.takimHiz.y);\r\n if (hizXY.lengthSq() > 0.0001) {\r\n // Anlamlı hareket var\r\n this.hareketYonu.set(this.takimHiz.x, this.takimHiz.y, 0).normalize();\r\n // Yumuşatılmış hareket yönü (sinematik geçişler için)\r\n this.hareketYonuSmooth.lerp(this.hareketYonu, 0.05);\r\n this.hareketYonuSmooth.normalize();\r\n }\r\n\r\n // Takım ekseni yönü (spindle direction)\r\n if (aktifNokta.takimYonu) {\r\n this.takimYonu.copy(aktifNokta.takimYonu).normalize();\r\n }\r\n }\r\n\r\n private kameraBaslangicAyarla() {\r\n const kamera = this.sahne?.anaGosterim?.aktifKamera;\r\n const kontrol = this.sahne?.anaGosterim?.aktifKontrol;\r\n if (!kamera || !kontrol) return;\r\n\r\n this.kameraMevcutPoz.copy(kamera.position);\r\n this.kameraMevcutTarget.copy(kontrol.target);\r\n\r\n // Drone başlangıç değerleri\r\n const maxBoyut = Math.max(this.workpieceBoyut.x, this.workpieceBoyut.y, this.workpieceBoyut.z);\r\n this.droneMesafe = maxBoyut * 1.5;\r\n this.droneYukseklik = maxBoyut * 0.8;\r\n this.droneAci = Math.atan2(kamera.position.y - this.takimPoz.y, kamera.position.x - this.takimPoz.x);\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // ANİMASYON DÖNGÜSÜ\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n private animasyonDongusuBaslat() {\r\n const dongu = () => {\r\n if (!this.aktif) return;\r\n\r\n const simdi = performance.now();\r\n\r\n // Simülasyondan canlı veri al\r\n this.takimPozGuncelle();\r\n\r\n // Beat detection (müzik analizi) veya demo beat\r\n this.beatDetectionGuncelle(simdi);\r\n\r\n // Demo beat modu (müzik yokken simüle beat)\r\n if (this.demoBeat && !this.muzikOynatiliyor) {\r\n this.demoBeatGuncelle(simdi);\r\n }\r\n\r\n // Otomatik açı değişimi (serbest modda kapalı)\r\n if (this.otomatikAciDegisimi && !this.serbestKamera) {\r\n this.otomatikAciKontrol(simdi);\r\n }\r\n\r\n // Kamera güncelle (serbest modda atla - kullanıcı kontrolünde)\r\n if (!this.serbestKamera) {\r\n if (this.kameraGecisProgress < 1) {\r\n this.kameraGecisUygula();\r\n } else {\r\n this.kameraSinematikGuncelle(simdi);\r\n }\r\n } else {\r\n // Serbest modda sadece efektleri uygula (FOV/zoom)\r\n this.serbestModEfektUygula(simdi);\r\n }\r\n\r\n // Ritim senkronlu kamera efektleri\r\n const kamera = this.sahne?.anaGosterim?.aktifKamera;\r\n if (kamera) {\r\n this.ritimEfektleriniUygula(kamera);\r\n }\r\n\r\n // Kayıt süresi\r\n if (this.kayitYapiliyor) {\r\n this.kayitSuresi = (simdi - this.kayitBaslamaZamani) / 1000;\r\n }\r\n\r\n // Müzik pozisyonu\r\n if (this.muzikOynatiliyor && this.audioCtx) {\r\n this.muzikPozisyon = this.audioCtx.currentTime - this.muzikBaslangicZamani;\r\n }\r\n\r\n this.animFrameId = requestAnimationFrame(dongu);\r\n };\r\n\r\n this.animFrameId = requestAnimationFrame(dongu);\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // OTOMATİK AÇI DEĞİŞİMİ\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n private otomatikAciKontrol(simdi: number) {\r\n const aktifNokta = this.simComponent?.aktifNokta || this.aktifNokta;\r\n if (!aktifNokta) return;\r\n\r\n const oynatiliyor = this.simComponent?.simOynatiliyor ?? this.oynatiliyor;\r\n if (!oynatiliyor) return;\r\n\r\n const hareketTuru = aktifNokta.hareketTuru || '';\r\n const isleme = hareketTuru === 'İşleme' || hareketTuru === 'Isleme' || hareketTuru === 'ISLEME';\r\n\r\n // Hareket türü değiştiğinde açı değiştir\r\n if (hareketTuru !== this.oncekiHareketTuru) {\r\n this.oncekiHareketTuru = hareketTuru;\r\n\r\n if (isleme) {\r\n // Kesim başladı - dramatik yakın çekim veya drone\r\n const acilar: KameraAcisi[] = ['yakin', 'drone', 'takim'];\r\n this.aciDegistir(acilar[Math.floor(Math.random() * acilar.length)]);\r\n this.kesimAnindaZoom = true;\r\n } else {\r\n // Rapid hareket - geniş çekim\r\n const acilar: KameraAcisi[] = ['epik', 'ust', 'profil'];\r\n this.aciDegistir(acilar[Math.floor(Math.random() * acilar.length)]);\r\n this.kesimAnindaZoom = false;\r\n }\r\n this.sonAciDegisimZamani = simdi;\r\n return;\r\n }\r\n\r\n // Periyodik açı değişimi (sadece kesim sırasında)\r\n const minAralik = 4000 + (100 - this.aciDegisimSikligi) * 80;\r\n if (simdi - this.sonAciDegisimZamani > minAralik && isleme) {\r\n const acilar: KameraAcisi[] = ['drone', 'yakin', 'profil', 'takim', 'ust'];\r\n let yeniAci = acilar[Math.floor(Math.random() * acilar.length)];\r\n // Aynı açıyı seçmemeye çalış\r\n if (yeniAci === this.suankiAci && acilar.length > 1) {\r\n yeniAci = acilar[(acilar.indexOf(yeniAci) + 1) % acilar.length];\r\n }\r\n this.aciDegistir(yeniAci);\r\n this.sonAciDegisimZamani = simdi;\r\n }\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // KAMERA AÇISI KONTROLÜ\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n aciDegistir(yeniAci: KameraAcisi) {\r\n if (yeniAci === this.suankiAci && this.kameraGecisProgress >= 1) return;\r\n\r\n this.suankiAci = yeniAci;\r\n this.kameraGecisProgress = 0;\r\n this.modBaslangicZamani = performance.now();\r\n this.kameraHedefHesapla();\r\n this.kameraDegisti.emit(yeniAci);\r\n this.cd.detectChanges();\r\n }\r\n\r\n private kameraHedefHesapla() {\r\n const kamera = this.sahne?.anaGosterim?.aktifKamera;\r\n const kontrol = this.sahne?.anaGosterim?.aktifKontrol;\r\n if (!kamera || !kontrol) return;\r\n\r\n this.kameraMevcutPoz.copy(kamera.position);\r\n this.kameraMevcutTarget.copy(kontrol.target);\r\n\r\n const aktifNokta = this.simComponent?.aktifNokta || this.aktifNokta;\r\n const takimCap = aktifNokta?.takim?.cap || 20;\r\n const maxBoyut = Math.max(this.workpieceBoyut.x, this.workpieceBoyut.y, this.workpieceBoyut.z);\r\n\r\n // Hareket yönüne dik vektör (yandan bakış için)\r\n const dikYon = new THREE.Vector3(-this.hareketYonuSmooth.y, this.hareketYonuSmooth.x, 0).normalize();\r\n\r\n switch (this.suankiAci) {\r\n case 'drone':\r\n // Drone: Hareket yönünün önünden orbital\r\n this.droneMesafe = maxBoyut * 1.2;\r\n this.droneYukseklik = maxBoyut * 0.6;\r\n const hareketAcisi = Math.atan2(this.hareketYonuSmooth.y, this.hareketYonuSmooth.x);\r\n this.droneAci = hareketAcisi + Math.PI * 0.6; // Hareketin 60° önünde başla\r\n this.kameraHedefPoz.set(\r\n this.takimPoz.x + Math.cos(this.droneAci) * this.droneMesafe,\r\n this.takimPoz.y + Math.sin(this.droneAci) * this.droneMesafe,\r\n this.workpieceMaxZ + this.droneYukseklik\r\n );\r\n this.kameraYukseklikAyarla(this.kameraHedefPoz);\r\n this.kameraHedefTarget.copy(this.takimPoz);\r\n break;\r\n\r\n case 'yakin':\r\n // Close-up: Hareket yönüne dik açıdan yakın çekim\r\n const yakinMesafe = takimCap * 3.5;\r\n this.kameraHedefPoz.copy(this.takimPoz)\r\n .addScaledVector(dikYon, yakinMesafe)\r\n .setZ(this.workpieceMaxZ + takimCap * 2);\r\n this.kameraYukseklikAyarla(this.kameraHedefPoz);\r\n this.kameraHedefTarget.copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, takimCap * 0.5);\r\n break;\r\n\r\n case 'profil':\r\n // Profil: Hareket yönüne dik yandan bakış\r\n const profilMesafe = maxBoyut * 0.7;\r\n this.kameraHedefPoz.copy(this.takimPoz)\r\n .addScaledVector(dikYon, profilMesafe)\r\n .setZ(this.workpieceMaxZ + maxBoyut * 0.25);\r\n this.kameraYukseklikAyarla(this.kameraHedefPoz);\r\n this.kameraHedefTarget.copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, maxBoyut * 0.1);\r\n break;\r\n\r\n case 'ust':\r\n // Top-down: Yukarıdan, hafif arkadan\r\n const ustYukseklik = maxBoyut * 1.5;\r\n this.kameraHedefPoz.copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, -maxBoyut * 0.15)\r\n .setZ(this.workpieceMaxZ + ustYukseklik);\r\n this.kameraYukseklikAyarla(this.kameraHedefPoz);\r\n this.kameraHedefTarget.copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, maxBoyut * 0.2);\r\n break;\r\n\r\n case 'takim':\r\n // Tool POV: Hareket yönünün arkasından\r\n const arkaMesafe = takimCap * 4;\r\n const ileriBakis = takimCap * 15;\r\n this.kameraHedefPoz.copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, -arkaMesafe)\r\n .setZ(this.workpieceMaxZ + takimCap * 2.5);\r\n this.kameraYukseklikAyarla(this.kameraHedefPoz);\r\n this.kameraHedefTarget.copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, ileriBakis);\r\n break;\r\n\r\n case 'epik':\r\n // Epic: Hareket yönünün karşısından geniş çekim\r\n const epikMesafe = maxBoyut * 1.8;\r\n const karsiYon = new THREE.Vector3()\r\n .copy(this.hareketYonuSmooth)\r\n .negate()\r\n .applyAxisAngle(new THREE.Vector3(0, 0, 1), Math.PI * 0.2);\r\n this.kameraHedefPoz.copy(this.workpieceMerkez)\r\n .addScaledVector(karsiYon, epikMesafe)\r\n .setZ(this.workpieceMaxZ + epikMesafe * 0.7);\r\n this.kameraYukseklikAyarla(this.kameraHedefPoz);\r\n this.kameraHedefTarget.lerpVectors(this.workpieceMerkez, this.takimPoz, 0.6);\r\n break;\r\n\r\n case 'beat':\r\n // Beat: Müzik ritmine göre hareket\r\n // Sabit kamera modunda mevcut pozisyonu koru\r\n if (this.beatSabitKamera) {\r\n this.kameraHedefPoz.copy(kamera.position);\r\n this.kameraHedefTarget.copy(kontrol.target);\r\n } else {\r\n // Hareketli mod: workpiece merkezine odaklan\r\n this.beatModMesafe = maxBoyut * 1.5;\r\n this.beatModYukseklik = maxBoyut * 0.8;\r\n this.beatModAci = 0;\r\n this.kameraHedefPoz.set(\r\n this.workpieceMerkez.x + this.beatModMesafe,\r\n this.workpieceMerkez.y,\r\n this.workpieceMaxZ + this.beatModYukseklik\r\n );\r\n this.kameraYukseklikAyarla(this.kameraHedefPoz);\r\n this.kameraHedefTarget.copy(this.workpieceMerkez);\r\n }\r\n break;\r\n\r\n }\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // KAMERA GEÇİŞ ANİMASYONU\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n private kameraGecisUygula() {\r\n const kamera = this.sahne?.anaGosterim?.aktifKamera;\r\n const kontrol = this.sahne?.anaGosterim?.aktifKontrol;\r\n if (!kamera || !kontrol) return;\r\n\r\n // Hız: yavaş başla, hızlan, yavaş bitir (ease-in-out)\r\n const gecisHizi = 0.015 + (this.kameraHizi / 100) * 0.025;\r\n this.kameraGecisProgress = Math.min(1, this.kameraGecisProgress + gecisHizi);\r\n\r\n // Cubic ease-in-out\r\n const t = this.kameraGecisProgress < 0.5\r\n ? 4 * this.kameraGecisProgress * this.kameraGecisProgress * this.kameraGecisProgress\r\n : 1 - Math.pow(-2 * this.kameraGecisProgress + 2, 3) / 2;\r\n\r\n kamera.position.lerpVectors(this.kameraMevcutPoz, this.kameraHedefPoz, t);\r\n kontrol.target.lerpVectors(this.kameraMevcutTarget, this.kameraHedefTarget, t);\r\n\r\n kamera.lookAt(kontrol.target);\r\n kamera.updateProjectionMatrix();\r\n kontrol.update?.();\r\n this.sahne.anaGosterim.ciz?.();\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // SİNEMATİK KAMERA HAREKETLERİ\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n private kameraSinematikGuncelle(simdi: number) {\r\n const kamera = this.sahne?.anaGosterim?.aktifKamera;\r\n const kontrol = this.sahne?.anaGosterim?.aktifKontrol;\r\n if (!kamera || !kontrol) return;\r\n\r\n const aktifNokta = this.simComponent?.aktifNokta || this.aktifNokta;\r\n const takimCap = aktifNokta?.takim?.cap || 20;\r\n const lerpHiz = 0.03 + (this.kameraHizi / 100) * 0.07;\r\n const modSure = (simdi - this.modBaslangicZamani) / 1000;\r\n\r\n switch (this.suankiAci) {\r\n case 'drone':\r\n this.droneSinematik(kamera, kontrol, lerpHiz, modSure);\r\n break;\r\n case 'yakin':\r\n this.yakinCekimSinematik(kamera, kontrol, lerpHiz, takimCap);\r\n break;\r\n case 'profil':\r\n this.profilSinematik(kamera, kontrol, lerpHiz);\r\n break;\r\n case 'ust':\r\n this.ustSinematik(kamera, kontrol, lerpHiz);\r\n break;\r\n case 'takim':\r\n this.takimPOVSinematik(kamera, kontrol, lerpHiz, takimCap);\r\n break;\r\n case 'epik':\r\n this.epikSinematik(kamera, kontrol, lerpHiz, modSure);\r\n break;\r\n case 'beat':\r\n this.beatSinematik(kamera, kontrol, lerpHiz, modSure);\r\n break;\r\n }\r\n\r\n // Dramatik zoom (kesim anında) - beat modunda kullanılmaz\r\n if (this.dramatikZoom && this.suankiAci !== 'beat') {\r\n this.dramatikZoomUygula(kamera);\r\n }\r\n\r\n kamera.updateProjectionMatrix();\r\n kontrol.update?.();\r\n this.sahne.anaGosterim.ciz?.();\r\n }\r\n\r\n // ─── DRONE: Hareket yönünün önünden orbital takip ───\r\n private droneSinematik(kamera: any, kontrol: any, lerpHiz: number, modSure: number) {\r\n // Hareket yönüne göre \"öne\" doğru bias\r\n const hareketAcisi = Math.atan2(this.hareketYonuSmooth.y, this.hareketYonuSmooth.x);\r\n\r\n // Yavaş orbit - hareket yönünün önünde kal\r\n const orbitHiz = 0.0006 + (this.kameraHizi / 100) * 0.0015;\r\n const hedefDroneAci = hareketAcisi + Math.PI * 0.6; // Hareketin 60° önünde\r\n\r\n // Açıyı yumuşak geçiş ile hedefe yaklaştır\r\n const aciDelta = this.normalizeAngle(hedefDroneAci - this.droneAci);\r\n this.droneAci += aciDelta * 0.02 + orbitHiz;\r\n\r\n // Yükseklik ve mesafe hafif salınım\r\n const salinimHiz = 0.25;\r\n const mesafeSalinim = Math.sin(modSure * salinimHiz) * this.droneMesafe * 0.08;\r\n const yukseklikSalinim = Math.cos(modSure * salinimHiz * 0.6) * this.droneYukseklik * 0.12;\r\n\r\n const hedefMesafe = this.droneMesafe + mesafeSalinim;\r\n const hedefYukseklik = this.droneYukseklik + yukseklikSalinim;\r\n\r\n // Hedef pozisyon - takımın etrafında orbit\r\n const hedefPoz = new THREE.Vector3(\r\n this.takimPoz.x + Math.cos(this.droneAci) * hedefMesafe,\r\n this.takimPoz.y + Math.sin(this.droneAci) * hedefMesafe,\r\n this.workpieceMaxZ + hedefYukseklik // Workpiece üstünden yükseklik\r\n );\r\n this.kameraYukseklikAyarla(hedefPoz);\r\n\r\n // Yumuşak takip\r\n kamera.position.lerp(hedefPoz, lerpHiz);\r\n kontrol.target.lerp(this.takimPoz, lerpHiz * 1.2);\r\n kamera.lookAt(kontrol.target);\r\n }\r\n\r\n // ─── YAKIN: Hareket yönüne dik açıdan yakın çekim ───\r\n private yakinCekimSinematik(kamera: any, kontrol: any, lerpHiz: number, takimCap: number) {\r\n // Hareket yönüne 90° dik açıdan bak (kesimi en iyi gören açı)\r\n const dikYon = new THREE.Vector3(-this.hareketYonuSmooth.y, this.hareketYonuSmooth.x, 0).normalize();\r\n\r\n const yakinMesafe = takimCap * 3.5;\r\n\r\n // Hareket yönüne dik pozisyon + yükseklik (workpiece üstünden)\r\n const hedefPoz = new THREE.Vector3()\r\n .copy(this.takimPoz)\r\n .addScaledVector(dikYon, yakinMesafe)\r\n .setZ(this.workpieceMaxZ + takimCap * 2);\r\n this.kameraYukseklikAyarla(hedefPoz);\r\n\r\n // Biraz ilerisine bak (kesim noktası)\r\n const hedefTarget = new THREE.Vector3()\r\n .copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, takimCap * 0.5);\r\n\r\n // Çok yumuşak takip\r\n kamera.position.lerp(hedefPoz, lerpHiz * 0.6);\r\n kontrol.target.lerp(hedefTarget, lerpHiz * 0.8);\r\n kamera.lookAt(kontrol.target);\r\n }\r\n\r\n // ─── PROFİL: Hareket yönüne paralel yandan takip ───\r\n private profilSinematik(kamera: any, kontrol: any, lerpHiz: number) {\r\n const maxBoyut = Math.max(this.workpieceBoyut.x, this.workpieceBoyut.y);\r\n const profilMesafe = maxBoyut * 0.7;\r\n\r\n // Hareket yönüne 90° dik yön (yandan bakış)\r\n const yanYon = new THREE.Vector3(-this.hareketYonuSmooth.y, this.hareketYonuSmooth.x, 0).normalize();\r\n\r\n // Takımın yanında, hareketle birlikte kayar (workpiece üstünden)\r\n const hedefPoz = new THREE.Vector3()\r\n .copy(this.takimPoz)\r\n .addScaledVector(yanYon, profilMesafe)\r\n .setZ(this.workpieceMaxZ + maxBoyut * 0.25);\r\n this.kameraYukseklikAyarla(hedefPoz);\r\n\r\n // Takımın biraz ilerisine bak\r\n const hedefTarget = new THREE.Vector3()\r\n .copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, maxBoyut * 0.1);\r\n\r\n kamera.position.lerp(hedefPoz, lerpHiz);\r\n kontrol.target.lerp(hedefTarget, lerpHiz);\r\n kamera.lookAt(kontrol.target);\r\n }\r\n\r\n // ─── ÜST: Kuş bakışı - hareket yönü yukarı ───\r\n private ustSinematik(kamera: any, kontrol: any, lerpHiz: number) {\r\n const maxBoyut = Math.max(this.workpieceBoyut.x, this.workpieceBoyut.y, this.workpieceBoyut.z);\r\n const ustYukseklik = maxBoyut * 1.5;\r\n\r\n // Takımın üzerinde, hafif arkasında kal\r\n const hedefPoz = new THREE.Vector3()\r\n .copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, -maxBoyut * 0.15) // Hafif arkadan\r\n .setZ(this.workpieceMaxZ + ustYukseklik);\r\n this.kameraYukseklikAyarla(hedefPoz);\r\n\r\n // Takımın biraz ilerisine bak\r\n const hedefTarget = new THREE.Vector3()\r\n .copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, maxBoyut * 0.2);\r\n\r\n kamera.position.lerp(hedefPoz, lerpHiz);\r\n kontrol.target.lerp(hedefTarget, lerpHiz);\r\n\r\n // Kamera \"up\" vektörünü hareket yönüne ayarla (yol ekranda yukarı gider)\r\n const upVec = new THREE.Vector3(this.hareketYonuSmooth.x, this.hareketYonuSmooth.y, 0);\r\n kamera.up.lerp(upVec, lerpHiz * 0.5);\r\n kamera.up.normalize();\r\n kamera.lookAt(kontrol.target);\r\n }\r\n\r\n // ─── TAKİM POV: Hareket yönünden arkadan takip ───\r\n private takimPOVSinematik(kamera: any, kontrol: any, lerpHiz: number, takimCap: number) {\r\n // Hareket yönünün arkasından bak (araba takip kamerası gibi)\r\n const arkaMesafe = takimCap * 4;\r\n const ileriBakis = takimCap * 15;\r\n\r\n // Hareket yönünün arkasında kal (workpiece üstünden)\r\n const hedefPoz = new THREE.Vector3()\r\n .copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, -arkaMesafe)\r\n .setZ(this.workpieceMaxZ + takimCap * 2.5);\r\n this.kameraYukseklikAyarla(hedefPoz);\r\n\r\n // İleri bak - hareket yönünde\r\n const hedefTarget = new THREE.Vector3()\r\n .copy(this.takimPoz)\r\n .addScaledVector(this.hareketYonuSmooth, ileriBakis);\r\n\r\n kamera.position.lerp(hedefPoz, lerpHiz * 1.2); // Hızlı takip\r\n kontrol.target.lerp(hedefTarget, lerpHiz * 1.2);\r\n kamera.lookAt(kontrol.target);\r\n }\r\n\r\n // ─── EPİK: Hareket yönünün karşısından geniş çekim ───\r\n private epikSinematik(kamera: any, kontrol: any, lerpHiz: number, modSure: number) {\r\n const maxBoyut = Math.max(this.workpieceBoyut.x, this.workpieceBoyut.y, this.workpieceBoyut.z);\r\n const epikMesafe = maxBoyut * 1.8;\r\n\r\n // Hareket yönünün karşısından + hafif yandan bak\r\n const karsiYon = new THREE.Vector3()\r\n .copy(this.hareketYonuSmooth)\r\n .negate()\r\n .applyAxisAngle(new THREE.Vector3(0, 0, 1), Math.PI * 0.2); // 36° açı ekle\r\n\r\n // Yavaş dolly - hareket yönüne göre pozisyon\r\n const dollyOffset = Math.sin(modSure * 0.08) * maxBoyut * 0.15;\r\n\r\n const hedefPoz = new THREE.Vector3()\r\n .copy(this.workpieceMerkez)\r\n .addScaledVector(karsiYon, epikMesafe + dollyOffset)\r\n .setZ(this.workpieceMaxZ + epikMesafe * 0.7);\r\n this.kameraYukseklikAyarla(hedefPoz);\r\n\r\n // Workpiece merkezi ile takım arasında - takıma daha çok ağırlık\r\n const hedefTarget = new THREE.Vector3().lerpVectors(this.workpieceMerkez, this.takimPoz, 0.6);\r\n\r\n kamera.position.lerp(hedefPoz, lerpHiz * 0.4); // Yavaş hareket\r\n kontrol.target.lerp(hedefTarget, lerpHiz * 0.5);\r\n kamera.lookAt(kontrol.target);\r\n }\r\n\r\n // ─── BEAT: Müzik ritmine göre sinematik hareket ───\r\n private beatSinematik(kamera: any, kontrol: any, lerpHiz: number, modSure: number) {\r\n const maxBoyut = Math.max(this.workpieceBoyut.x, this.workpieceBoyut.y, this.workpieceBoyut.z);\r\n\r\n // === BEAT TEPKİ ÇARPANLARI (Gelişmiş Ayarlardan) ===\r\n const zoomTepki = this.beatZoomTepki / 50; // Zoom tepki şiddeti (0-2)\r\n const orbitTepki = this.beatOrbitTepki / 50; // Orbit hız artış tepkisi (0-2)\r\n const mesafeTepki = this.beatMesafeTepki / 50; // Kamera yaklaşma tepkisi (0-2)\r\n const yukseklikTepki = this.beatYukseklikTepki / 50; // Kamera yükselme tepkisi (0-2)\r\n const shakeTepki = this.beatShakeTepki / 50; // Shake tepkisi (0-2)\r\n const targetTepki = this.beatTargetTepki / 50; // Target salınım tepkisi (0-2)\r\n const tepkiHizi = this.beatTepkiHizi / 50; // Genel tepki hızı (0-2)\r\n const enerjiCarpani = 0.5 + (this.beatEnerjiCarpani / 100); // Enerji çarpanı (0.5-1.5)\r\n\r\n // Beat panel slider'ları\r\n const zoomCarpan = this.beatZoomEfekti / 50; // 0-2 arası\r\n const orbitHizCarpan = this.beatOrbitHizi / 50; // 0-2 arası\r\n const shakeCarpan = this.beatShakeEfekti / 50; // 0-2 arası\r\n\r\n // Hareket tipine göre enerji yumuşatma\r\n let smoothFactor = 0.85;\r\n let responseFactor = 0.15;\r\n switch (this.beatHareketTipi) {\r\n case 'aggressive':\r\n smoothFactor = 0.7;\r\n responseFactor = 0.3;\r\n break;\r\n case 'pulse':\r\n smoothFactor = 0.5;\r\n responseFactor = 0.5;\r\n break;\r\n }\r\n\r\n // Enerji çarpanı ile beat yoğunluğu hesapla\r\n const rawIntensity = this.beatEnerjiSmooth * enerjiCarpani;\r\n this.beatModIntensity = this.beatModIntensity * smoothFactor + rawIntensity * responseFactor;\r\n\r\n // === SABİT KAMERA MODU: Sadece zoom efekti (opsiyonel takım izleme) ===\r\n if (this.beatSabitKamera) {\r\n const baseFov = 55;\r\n\r\n // Takım izleme aktifse target'ı güncelle\r\n if (this.beatSabitTakimIzle) {\r\n const hedefNokta = this.beatTakimTakip ? this.takimPoz : this.workpieceMerkez;\r\n const targetLerpHiz = 0.05 * tepkiHizi;\r\n kontrol.target.lerp(hedefNokta, targetLerpHiz);\r\n kamera.lookAt(kontrol.target);\r\n }\r\n\r\n // FOV/Zoom efekti uygula (beat tepkisine göre)\r\n if (kamera.isPerspectiveCamera) {\r\n let zoomAmount = this.beatModIntensity * 25 * zoomCarpan * zoomTepki;\r\n if (this.beatHareketTipi === 'pulse') {\r\n zoomAmount = this.beatModIntensity > 0.5 ? 30 * zoomCarpan * zoomTepki : 0;\r\n }\r\n const beatFov = THREE.MathUtils.clamp(baseFov - zoomAmount, 30, 80);\r\n const fovLerpHiz = (this.beatHareketTipi === 'pulse' ? 0.2 : 0.1) * tepkiHizi;\r\n kamera.fov = THREE.MathUtils.lerp(kamera.fov, beatFov, fovLerpHiz);\r\n kamera.updateProjectionMatrix();\r\n } else if (kamera.isOrthographicCamera) {\r\n const baseZoom = 1;\r\n let zoomAmount = this.beatModIntensity * 0.6 * zoomCarpan * zoomTepki;\r\n if (this.beatHareketTipi === 'pulse') {\r\n zoomAmount = this.beatModIntensity > 0.5 ? 0.8 * zoomCarpan * zoomTepki : 0;\r\n }\r\n kamera.zoom = THREE.MathUtils.lerp(kamera.zoom, baseZoom + zoomAmount, 0.1 * tepkiHizi);\r\n kamera.updateProjectionMatrix();\r\n }\r\n\r\n kontrol.update?.();\r\n this.sahne.anaGosterim.ciz?.();\r\n return; // Kamera pozisyonu değişmez\r\n }\r\n\r\n // === HEDEF NOKTA: Takım veya Workpiece Merkezi ===\r\n const hedefNokta = this.beatTakimTakip ? this.takimPoz : this.workpieceMerkez;\r\n const targetLerpHiz = (this.beatHareketTipi === 'aggressive' ? 0.1 : 0.05) * tepkiHizi;\r\n this.beatModMevcutTarget.lerp(hedefNokta, targetLerpHiz);\r\n\r\n // === ORBİT HAREKETI (Orbit tepkisine göre) ===\r\n let baseOrbitSpeed = 0.08 * orbitHizCarpan * this.beatOrbitYonu;\r\n let energyBoost = this.beatModIntensity * 0.5 * orbitHizCarpan * orbitTepki * this.beatOrbitYonu;\r\n\r\n if (this.beatHareketTipi === 'aggressive') {\r\n energyBoost *= 1.5;\r\n } else if (this.beatHareketTipi === 'pulse') {\r\n baseOrbitSpeed = 0;\r\n energyBoost *= 2.5;\r\n }\r\n\r\n const orbitSpeed = baseOrbitSpeed + energyBoost;\r\n\r\n // Açıyı güncelle\r\n if (this.beatAciAtlama) {\r\n const aciDelta = this.normalizeAngle(this.beatModHedefAci - this.beatModAci);\r\n const atlamaHizi = (this.beatHareketTipi === 'aggressive' ? 0.1 : 0.05) * tepkiHizi;\r\n this.beatModAci += aciDelta * atlamaHizi + orbitSpeed * 0.016;\r\n } else {\r\n this.beatModAci += orbitSpeed * 0.016;\r\n }\r\n\r\n // === MESAFE VE YÜKSEKLİK (Beat tepkisine göre) ===\r\n // Mesafe: beat'te yaklaş (mesafeTepki'ye göre)\r\n let mesafeAzalma = this.beatModIntensity * 0.4 * zoomCarpan * mesafeTepki;\r\n // Yükseklik: beat'te yüksel (yukseklikTepki'ye göre)\r\n let yukseklikArtis = this.beatModIntensity * 0.5 * zoomCarpan * yukseklikTepki;\r\n\r\n if (this.beatHareketTipi === 'aggressive') {\r\n mesafeAzalma *= 1.3;\r\n yukseklikArtis *= 0.8;\r\n } else if (this.beatHareketTipi === 'pulse') {\r\n mesafeAzalma = this.beatModIntensity > 0.5 ? 0.5 * zoomCarpan * mesafeTepki : 0;\r\n yukseklikArtis = this.beatModIntensity > 0.5 ? 0.7 * zoomCarpan * yukseklikTepki : 0;\r\n }\r\n\r\n // Mesafe ve yükseklik hesapla\r\n const dinamikMesafe = this.beatModMesafe * (1 - mesafeAzalma * 0.5);\r\n const dinamikYukseklik = this.beatModYukseklik * (1 + yukseklikArtis * 0.5);\r\n\r\n // Ritme senkron salınım\r\n const salınımHiz = this.beatHareketTipi === 'aggressive' ? 3 : 2;\r\n const ritimSalinim = Math.sin(modSure * salınımHiz) * maxBoyut * 0.08 * this.beatModIntensity;\r\n\r\n // === KAMERA POZİSYONU ===\r\n const hedefPoz = new THREE.Vector3(\r\n this.beatModMevcutTarget.x + Math.cos(this.beatModAci) * dinamikMesafe,\r\n this.beatModMevcutTarget.y + Math.sin(this.beatModAci) * dinamikMesafe,\r\n this.workpieceMaxZ + dinamikYukseklik + ritimSalinim\r\n );\r\n this.kameraYukseklikAyarla(hedefPoz);\r\n\r\n // === SHAKE EFEKTİ (Beat tepkisine göre) ===\r\n if (this.beatShakeOffset.lengthSq() > 0.001) {\r\n const shakeMultiplier = this.beatHareketTipi === 'aggressive' ? 1.5 : 1;\r\n hedefPoz.add(this.beatShakeOffset.clone().multiplyScalar(shakeCarpan * shakeMultiplier * shakeTepki));\r\n }\r\n\r\n // === TARGET SALINIM (Beat tepkisine göre) ===\r\n const baseTargetSiddet = this.beatHareketTipi === 'pulse' ? 0.05 : 0.03;\r\n const targetSalınımSiddet = baseTargetSiddet * targetTepki;\r\n const targetSalinim = new THREE.Vector3(\r\n Math.sin(modSure * 1.5) * maxBoyut * targetSalınımSiddet * this.beatModIntensity,\r\n Math.cos(modSure * 1.2) * maxBoyut * targetSalınımSiddet * this.beatModIntensity,\r\n Math.sin(modSure * 0.8) * maxBoyut * targetSalınımSiddet * 0.7 * this.beatModIntensity\r\n );\r\n const hedefTarget = this.beatModMevcutTarget.clone().add(targetSalinim);\r\n\r\n // === HAREKET UYGULA (Tepki hızına göre) ===\r\n let dinamikLerpHiz: number;\r\n switch (this.beatHareketTipi) {\r\n case 'aggressive':\r\n dinamikLerpHiz = lerpHiz * (0.6 + this.beatModIntensity * 2.5) * tepkiHizi;\r\n break;\r\n case 'pulse':\r\n dinamikLerpHiz = lerpHiz * (0.2 + this.beatModIntensity * 4) * tepkiHizi;\r\n break;\r\n default: // smooth\r\n dinamikLerpHiz = lerpHiz * (0.4 + this.beatModIntensity * 2) * tepkiHizi;\r\n }\r\n\r\n kamera.position.lerp(hedefPoz, dinamikLerpHiz);\r\n kontrol.target.lerp(hedefTarget, dinamikLerpHiz * 0.9);\r\n kamera.lookAt(kontrol.target);\r\n\r\n // === FOV / ZOOM EFEKTİ (Beat tepkisine göre) ===\r\n const baseFov = 55;\r\n if (kamera.isPerspectiveCamera) {\r\n let zoomAmount = this.beatModIntensity * 20 * zoomCarpan * zoomTepki;\r\n if (this.beatHareketTipi === 'pulse') {\r\n zoomAmount = this.beatModIntensity > 0.5 ? 25 * zoomCarpan * zoomTepki : 0;\r\n }\r\n const beatFov = THREE.MathUtils.clamp(baseFov - zoomAmount, 30, 80);\r\n const fovLerpHiz = (this.beatHareketTipi === 'pulse' ? 0.15 : 0.08) * tepkiHizi;\r\n kamera.fov = THREE.MathUtils.lerp(kamera.fov, beatFov, fovLerpHiz);\r\n } else if (kamera.isOrthographicCamera) {\r\n const baseZoom = 1;\r\n let zoomAmount = this.beatModIntensity * 0.5 * zoomCarpan * zoomTepki;\r\n if (this.beatHareketTipi === 'pulse') {\r\n zoomAmount = this.beatModIntensity > 0.5 ? 0.7 * zoomCarpan * zoomTepki : 0;\r\n }\r\n kamera.zoom = THREE.MathUtils.lerp(kamera.zoom, baseZoom + zoomAmount, 0.08 * tepkiHizi);\r\n }\r\n }\r\n\r\n // ─── Açı normalizasyonu (-PI, PI) ───\r\n private normalizeAngle(angle: number): number {\r\n while (angle > Math.PI) angle -= Math.PI * 2;\r\n while (angle < -Math.PI) angle += Math.PI * 2;\r\n return angle;\r\n }\r\n\r\n // ─── DEMO BEAT: Müzik yokken simüle beat ───\r\n private demoBeatGuncelle(simdi: number) {\r\n // Demo beat interval'ına göre beat tetikle\r\n if (simdi - this.demoBeatZamani >= this.demoBeatInterval) {\r\n this.demoBeatZamani = simdi;\r\n\r\n // Yapay beat enerjisi oluştur (sinüs dalga)\r\n const phase = (simdi % (this.demoBeatInterval * 4)) / (this.demoBeatInterval * 4);\r\n const demoEnerji = 0.3 + Math.sin(phase * Math.PI * 2) * 0.4 + Math.random() * 0.3;\r\n\r\n this.beatEnerji = demoEnerji;\r\n this.beatEnerjiSmooth = this.beatEnerjiSmooth * 0.6 + demoEnerji * 0.4;\r\n\r\n // Beat tetikle\r\n this.beatTetikle();\r\n } else {\r\n // Beat arası decay\r\n this.beatEnerjiSmooth *= 0.95;\r\n }\r\n }\r\n\r\n // ─── SERBEST MOD: Kullanıcı kontrolünde, sadece efektler ───\r\n private serbestModEfektUygula(simdi: number) {\r\n const kamera = this.sahne?.anaGosterim?.aktifKamera;\r\n const kontrol = this.sahne?.anaGosterim?.aktifKontrol;\r\n if (!kamera || !kontrol) return;\r\n\r\n const modSure = (simdi - this.modBaslangicZamani) / 1000;\r\n\r\n // Beat tepki çarpanları\r\n const zoomTepki = this.beatZoomTepki / 50;\r\n const tepkiHizi = this.beatTepkiHizi / 50;\r\n const enerjiCarpani = 0.5 + (this.beatEnerjiCarpani / 100);\r\n const zoomCarpan = this.beatZoomEfekti / 50;\r\n\r\n // Beat yoğunluğu hesapla\r\n const rawIntensity = this.beatEnerjiSmooth * enerjiCarpani;\r\n this.beatModIntensity = this.beatModIntensity * 0.85 + rawIntensity * 0.15;\r\n\r\n // Sadece FOV/Zoom efekti uygula (kamera pozisyonu değişmez)\r\n const baseFov = 55;\r\n if (kamera.isPerspectiveCamera) {\r\n let zoomAmount = this.beatModIntensity * 25 * zoomCarpan * zoomTepki;\r\n if (this.beatHareketTipi === 'pulse') {\r\n zoomAmount = this.beatModIntensity > 0.5 ? 30 * zoomCarpan * zoomTepki : 0;\r\n }\r\n const beatFov = THREE.MathUtils.clamp(baseFov - zoomAmount, 30, 80);\r\n const fovLerpHiz = (this.beatHareketTipi === 'pulse' ? 0.2 : 0.1) * tepkiHizi;\r\n kamera.fov = THREE.MathUtils.lerp(kamera.fov, beatFov, fovLerpHiz);\r\n kamera.updateProjectionMatrix();\r\n } else if (kamera.isOrthographicCamera) {\r\n const baseZoom = 1;\r\n let zoomAmount = this.beatModIntensity * 0.6 * zoomCarpan * zoomTepki;\r\n if (this.beatHareketTipi === 'pulse') {\r\n zoomAmount = this.beatModIntensity > 0.5 ? 0.8 * zoomCarpan * zoomTepki : 0;\r\n }\r\n kamera.zoom = THREE.MathUtils.lerp(kamera.zoom, baseZoom + zoomAmount, 0.1 * tepkiHizi);\r\n kamera.updateProjectionMatrix();\r\n }\r\n\r\n // Takım izleme aktifse target'ı güncelle (opsiyonel)\r\n if (this.beatSabitTakimIzle && this.suankiAci === 'beat') {\r\n const hedefNokta = this.beatTakimTakip ? this.takimPoz : this.workpieceMerkez;\r\n const targetLerpHiz = 0.03 * tepkiHizi;\r\n kontrol.target.lerp(hedefNokta, targetLerpHiz);\r\n }\r\n\r\n kontrol.update?.();\r\n this.sahne.anaGosterim.ciz?.();\r\n }\r\n\r\n // ─── DRAMATİK ZOOM ───\r\n private dramatikZoomUygula(kamera: any) {\r\n const aktifNokta = this.simComponent?.aktifNokta || this.aktifNokta;\r\n if (!aktifNokta) return;\r\n\r\n const hareketTuru = aktifNokta.hareketTuru || '';\r\n const isleme = hareketTuru === 'İşleme' || hareketTuru === 'Isleme' || hareketTuru === 'ISLEME';\r\n\r\n // Hedef FOV (perspective) veya Zoom (orthographic)\r\n if (kamera.isPerspectiveCamera) {\r\n const bazFov = 50;\r\n const hedefFov = isleme\r\n ? bazFov - (this.zoomSiddeti / 100) * 15 // Kesimde zoom in (FOV azalt)\r\n : bazFov + (this.zoomSiddeti / 100) * 10; // Rapidde zoom out (FOV artır)\r\n\r\n const fovHiz = 0.02;\r\n kamera.fov = THREE.MathUtils.lerp(kamera.fov, hedefFov, fovHiz);\r\n } else if (kamera.isOrthographicCamera) {\r\n const bazZoom = 1;\r\n const hedefZoom = isleme\r\n ? bazZoom * (1 + (this.zoomSiddeti / 100) * 0.3)\r\n : bazZoom * (1 - (this.zoomSiddeti / 100) * 0.15);\r\n\r\n const zoomHiz = 0.02;\r\n kamera.zoom = THREE.MathUtils.lerp(kamera.zoom, hedefZoom, zoomHiz);\r\n }\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // VİDEO KAYIT SİSTEMİ\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n kayitBaslat() {\r\n if (this.kayitYapiliyor) return;\r\n if (!this.sahne?.anaGosterim?.canvas?.nativeElement) {\r\n console.warn('Director Mode: Canvas bulunamadı');\r\n return;\r\n }\r\n\r\n const canvas = this.sahne.anaGosterim.canvas.nativeElement as HTMLCanvasElement;\r\n const stream = canvas.captureStream(30);\r\n\r\n if (this.muzikYuklendi && this.audioCtx) {\r\n const audioDestination = this.audioCtx.createMediaStreamDestination();\r\n if (this.audioGain) {\r\n this.audioGain.connect(audioDestination);\r\n }\r\n stream.addTrack(audioDestination.stream.getAudioTracks()[0]);\r\n }\r\n\r\n try {\r\n this.mediaRecorder = new MediaRecorder(stream, {\r\n mimeType: 'video/webm;codecs=vp9',\r\n videoBitsPerSecond: this.kayitKalitesi\r\n });\r\n } catch (e) {\r\n this.mediaRecorder = new MediaRecorder(stream);\r\n }\r\n\r\n this.kayitChunks = [];\r\n\r\n this.mediaRecorder.ondataavailable = (e) => {\r\n if (e.data.size > 0) {\r\n this.kayitChunks.push(e.data);\r\n }\r\n };\r\n\r\n this.mediaRecorder.onstop = () => {\r\n const blob = new Blob(this.kayitChunks, { type: 'video/webm' });\r\n this.kayitBitti.emit(blob);\r\n this.videoIndir(blob);\r\n };\r\n\r\n this.mediaRecorder.start(100);\r\n this.kayitYapiliyor = true;\r\n this.kayitBaslamaZamani = performance.now();\r\n this.kayitSuresi = 0;\r\n this.cd.detectChanges();\r\n }\r\n\r\n kayitDurdur() {\r\n if (!this.kayitYapiliyor || !this.mediaRecorder) return;\r\n\r\n this.mediaRecorder.stop();\r\n this.kayitYapiliyor = false;\r\n this.cd.detectChanges();\r\n }\r\n\r\n private videoIndir(blob: Blob) {\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n const tarih = new Date().toISOString().slice(0, 19).replace(/[:-]/g, '');\r\n a.download = `FikoYT_CNC_${tarih}.webm`;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // MÜZİK SİSTEMİ\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n muzikSec() {\r\n this.muzikInputRef?.nativeElement?.click();\r\n }\r\n\r\n async muzikDosyaYuklendi(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files?.length) return;\r\n\r\n const file = input.files[0];\r\n this.muzikIsim = file.name;\r\n\r\n if (!this.audioCtx) {\r\n this.audioCtx = new AudioContext();\r\n this.audioGain = this.audioCtx.createGain();\r\n this.audioGain.connect(this.audioCtx.destination);\r\n\r\n // Beat detection için AnalyserNode kur\r\n this.audioAnalyser = this.audioCtx.createAnalyser();\r\n this.audioAnalyser.fftSize = 256; // Hızlı analiz için küçük FFT\r\n this.audioAnalyser.smoothingTimeConstant = 0.3;\r\n this.analyserData = new Uint8Array(this.audioAnalyser.frequencyBinCount);\r\n }\r\n\r\n try {\r\n const arrayBuffer = await file.arrayBuffer();\r\n this.audioBuffer = await this.audioCtx.decodeAudioData(arrayBuffer);\r\n this.muzikSure = this.audioBuffer.duration;\r\n this.muzikYuklendi = true;\r\n this.enerjiGecmisi = []; // Enerji geçmişini sıfırla\r\n this.cd.detectChanges();\r\n } catch (e) {\r\n console.error('Müzik dosyası okunamadı:', e);\r\n }\r\n }\r\n\r\n muzikOynat() {\r\n if (!this.muzikYuklendi || !this.audioBuffer || !this.audioCtx) return;\r\n\r\n if (this.audioSource) {\r\n this.audioSource.stop();\r\n }\r\n\r\n this.audioSource = this.audioCtx.createBufferSource();\r\n this.audioSource.buffer = this.audioBuffer;\r\n\r\n // Beat detection için analyser'a bağla\r\n if (this.audioAnalyser) {\r\n this.audioSource.connect(this.audioAnalyser);\r\n this.audioAnalyser.connect(this.audioGain);\r\n } else {\r\n this.audioSource.connect(this.audioGain);\r\n }\r\n\r\n this.audioSource.start(0, this.muzikPozisyon);\r\n\r\n this.muzikBaslangicZamani = this.audioCtx.currentTime - this.muzikPozisyon;\r\n this.muzikOynatiliyor = true;\r\n\r\n this.audioSource.onended = () => {\r\n this.muzikOynatiliyor = false;\r\n this.muzikPozisyon = 0;\r\n this.cd.detectChanges();\r\n };\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n muzikDuraklat() {\r\n if (!this.muzikOynatiliyor || !this.audioSource) return;\r\n\r\n this.audioSource.stop();\r\n this.muzikPozisyon = this.audioCtx.currentTime - this.muzikBaslangicZamani;\r\n this.muzikOynatiliyor = false;\r\n this.cd.detectChanges();\r\n }\r\n\r\n muzikDurdur() {\r\n if (this.audioSource) {\r\n try { this.audioSource.stop(); } catch {}\r\n }\r\n this.muzikOynatiliyor = false;\r\n this.muzikPozisyon = 0;\r\n this.cd.detectChanges();\r\n }\r\n\r\n muzikSesAyarla(ses: number) {\r\n this.muzikSes = ses;\r\n if (this.audioGain) {\r\n this.audioGain.gain.value = ses / 100;\r\n }\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // BEAT DETECTION & RİTİM SENKRON\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n /** Her frame'de müzik analizi yap ve beat algıla */\r\n private beatDetectionGuncelle(simdi: number) {\r\n // Beat modunda veya ritimSenkron açıkken çalış\r\n const beatModuAktif = this.suankiAci === 'beat';\r\n if ((!this.ritimSenkron && !beatModuAktif) || !this.muzikOynatiliyor || !this.audioAnalyser || !this.analyserData) {\r\n // Efektleri yavaşça sıfırla\r\n this.beatZoomPulse *= 0.9;\r\n this.beatShakeOffset.multiplyScalar(0.85);\r\n this.beatModIntensity *= 0.95;\r\n return;\r\n }\r\n\r\n // Frekans verisini al\r\n this.audioAnalyser.getByteFrequencyData(this.analyserData);\r\n\r\n // Bass frekansları (0-8 bin) - beat için en önemli\r\n const bassEnd = Math.floor(this.analyserData.length * 0.15);\r\n let bassEnerji = 0;\r\n for (let i = 0; i < bassEnd; i++) {\r\n bassEnerji += this.analyserData[i];\r\n }\r\n bassEnerji = bassEnerji / (bassEnd * 255); // Normalize (0-1)\r\n\r\n // Mid frekanslar (genel ritim için)\r\n const midStart = bassEnd;\r\n const midEnd = Math.floor(this.analyserData.length * 0.5);\r\n let midEnerji = 0;\r\n for (let i = midStart; i < midEnd; i++) {\r\n midEnerji += this.analyserData[i];\r\n }\r\n midEnerji = midEnerji / ((midEnd - midStart) * 255);\r\n\r\n // Toplam enerji (ayarlanabilir ağırlıklar)\r\n const bassWeight = this.beatBassAgirlik / 100;\r\n const midWeight = this.beatMidAgirlik / 100;\r\n const toplamAgirlik = bassWeight + midWeight || 1;\r\n this.beatEnerji = (bassEnerji * bassWeight + midEnerji * midWeight) / toplamAgirlik;\r\n\r\n // Yumuşatılmış enerji\r\n this.beatEnerjiSmooth = this.beatEnerjiSmooth * 0.8 + this.beatEnerji * 0.2;\r\n\r\n // Enerji geçmişi (adaptif eşik için)\r\n this.enerjiGecmisi.push(this.beatEnerji);\r\n if (this.enerjiGecmisi.length > 60) {\r\n this.enerjiGecmisi.shift();\r\n }\r\n\r\n // Ortalama enerji hesapla\r\n const ortalamaEnerji = this.enerjiGecmisi.reduce((a, b) => a + b, 0) / this.enerjiGecmisi.length;\r\n\r\n // Beat algılama: ani enerji artışı + cooldown\r\n // Hassasiyet: 0 = çok düşük hassasiyet (yüksek eşik), 100 = çok hassas (düşük eşik)\r\n const beatEsik = 1 - (this.beatHassasiyet / 100) * 0.7; // 0.3 - 1.0 arası\r\n const enerjiArtisi = this.beatEnerji - this.oncekiEnerji;\r\n const adaptifEsik = Math.max(beatEsik, ortalamaEnerji * 1.5);\r\n const beatAlgilandi = enerjiArtisi > 0.15 &&\r\n this.beatEnerji > adaptifEsik &&\r\n (simdi - this.sonBeatZamani) > this.beatCooldownAyar;\r\n\r\n if (beatAlgilandi) {\r\n this.sonBeatZamani = simdi;\r\n this.beatTetikle();\r\n }\r\n\r\n this.oncekiEnerji = this.beatEnerji;\r\n\r\n // Efektleri zamanla azalt\r\n this.beatZoomPulse *= 0.92;\r\n this.beatShakeOffset.multiplyScalar(0.88);\r\n }\r\n\r\n /** Beat algılandığında efektleri tetikle */\r\n private beatTetikle() {\r\n const siddet = this.ritimSiddeti / 100;\r\n\r\n // UI slider değerlerini çarpanlara dönüştür (0-2 arası)\r\n const orbitCarpan = this.beatOrbitHizi / 50;\r\n const zoomCarpan = this.beatZoomEfekti / 50;\r\n const shakeCarpan = this.beatShakeEfekti / 50;\r\n\r\n // Beat modunda özel davranış\r\n if (this.suankiAci === 'beat') {\r\n const maxBoyut = Math.max(this.workpieceBoyut.x, this.workpieceBoyut.y, this.workpieceBoyut.z);\r\n\r\n // Açı atlama aktifse ve güçlü beat'te yeni açıya atla\r\n if (this.beatAciAtlama && this.beatEnerji > 0.55) {\r\n // Orbit hızına göre kadran sayısı (hızlı = daha fazla kadran)\r\n const kadranSayisi = Math.floor(4 + orbitCarpan * 2 + Math.random() * 2);\r\n let yeniKadran = Math.floor(Math.random() * kadranSayisi);\r\n if (yeniKadran === this.beatModSonPozisyon) {\r\n yeniKadran = (yeniKadran + 1 + Math.floor(Math.random() * 2)) % kadranSayisi;\r\n }\r\n this.beatModSonPozisyon = yeniKadran;\r\n // Orbit hızına göre açı atlama miktarı\r\n const aciOffset = (Math.random() - 0.5) * 0.5 * orbitCarpan;\r\n this.beatModHedefAci = (yeniKadran * Math.PI * 2 / kadranSayisi) + aciOffset;\r\n }\r\n\r\n // Mesafe pulse - zoom efektine göre yaklaş/uzaklaş\r\n // zoomCarpan yüksekse = daha yakın, düşükse = daha uzak\r\n const mesafeFaktor = 1.5 - (zoomCarpan * 0.4);\r\n this.beatModMesafe = maxBoyut * (0.8 + Math.random() * 0.4) * mesafeFaktor;\r\n this.beatModYukseklik = maxBoyut * (0.3 + Math.random() * 0.5) * (1 + zoomCarpan * 0.3);\r\n\r\n // Shake efekti - shakeCarpan'a göre şiddet\r\n const shakeAmount = 8.0 * siddet * this.beatEnerji * shakeCarpan;\r\n this.beatShakeOffset.set(\r\n (Math.random() - 0.5) * shakeAmount,\r\n (Math.random() - 0.5) * shakeAmount,\r\n (Math.random() - 0.5) * shakeAmount * 0.5\r\n );\r\n return;\r\n }\r\n\r\n // Normal modlar için standart efektler\r\n // Zoom pulse\r\n this.beatZoomPulse = 0.15 * siddet * (0.7 + Math.random() * 0.3);\r\n\r\n // Kamera shake (rastgele yön)\r\n const shakeAmount = 2.0 * siddet;\r\n this.beatShakeOffset.set(\r\n (Math.random() - 0.5) * shakeAmount,\r\n (Math.random() - 0.5) * shakeAmount,\r\n (Math.random() - 0.5) * shakeAmount * 0.5\r\n );\r\n\r\n // Güçlü beat'lerde otomatik açı değişimi (düşük olasılıkla)\r\n if (this.otomatikAciDegisimi && this.beatEnerji > 0.85 && Math.random() < 0.15) {\r\n const acilar: KameraAcisi[] = ['drone', 'yakin', 'profil', 'takim'];\r\n const yeniAci = acilar[Math.floor(Math.random() * acilar.length)];\r\n if (yeniAci !== this.suankiAci) {\r\n this.aciDegistir(yeniAci);\r\n }\r\n }\r\n }\r\n\r\n /** Ritim senkronlu kamera efektlerini uygula */\r\n private ritimEfektleriniUygula(kamera: any) {\r\n // Beat modunda bu fonksiyon kullanılmaz - kendi efektleri var\r\n if (!this.ritimSenkron || !this.muzikOynatiliyor || this.suankiAci === 'beat') return;\r\n\r\n const siddet = this.ritimSiddeti / 100;\r\n\r\n // Shake offset uygula\r\n if (this.beatShakeOffset.lengthSq() > 0.001) {\r\n kamera.position.add(this.beatShakeOffset);\r\n }\r\n\r\n // Zoom pulse (FOV veya camera zoom)\r\n if (this.beatZoomPulse > 0.01) {\r\n if (kamera.isPerspectiveCamera) {\r\n // FOV pulse - beat'te daral (zoom in efekti)\r\n kamera.fov -= this.beatZoomPulse * 8 * siddet;\r\n } else if (kamera.isOrthographicCamera) {\r\n // Ortho zoom pulse\r\n kamera.zoom += this.beatZoomPulse * 0.3 * siddet;\r\n }\r\n }\r\n\r\n // Enerji bazlı kamera hızı modülasyonu (daha enerjik = daha hızlı)\r\n // Bu değeri kamera hareketlerinde kullanabiliriz\r\n }\r\n\r\n /** Anlık beat enerjisini al (0-1) - diğer efektler için */\r\n get anlikBeatEnerji(): number {\r\n return this.beatEnerjiSmooth;\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════════\r\n // YARDIMCI\r\n // ════════════════════════════════════════════════════════════════════════\r\n\r\n private durumYayinla() {\r\n this.durumDegisti.emit({\r\n aktif: this.aktif,\r\n kayitYapiliyor: this.kayitYapiliyor,\r\n muzikYuklendi: this.muzikYuklendi,\r\n suankiAci: this.suankiAci\r\n });\r\n }\r\n\r\n sureFormatla(saniye: number): string {\r\n const dk = Math.floor(saniye / 60);\r\n const sn = Math.floor(saniye % 60);\r\n return `${dk.toString().padStart(2, '0')}:${sn.toString().padStart(2, '0')}`;\r\n }\r\n\r\n get aciListesi() {\r\n return Object.entries(this.KAMERA_ACILARI).map(([key, val]) => ({\r\n key: key as KameraAcisi,\r\n ...val\r\n }));\r\n }\r\n}\r\n"],"names":["i2"],"mappings":"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"}