Files

216 lines
10 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="tr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>NUMEX ARCHITECT 3D — Akıllı Bina Dijital İkizi</title>
<meta name="description" content="Numex Architect 3D — 6 katlı rezidans dijital ikiz prototipi: gezilebilir daire, çalışan asansör, kat ayrıştırma, X-Ray teknik sistemler." />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
</head>
<body>
<div id="app">
<!-- ÜST BAR -->
<header class="topbar">
<div class="brand">
<svg class="brand-mark" viewBox="0 0 40 40" aria-hidden="true">
<path d="M6 33V13l14-8 14 8v20" fill="none" stroke="currentColor" stroke-width="2.1" stroke-linejoin="round"/>
<path d="M13 33V19h6v14M23 21h6v6h-6z" fill="none" stroke="currentColor" stroke-width="1.6"/>
</svg>
<div class="brand-text">
<h1>NUMEX <span>ARCHITECT</span> 3D</h1>
<p>Akıllı Bina Dijital İkizi · Rezidans / 18 Daire</p>
</div>
</div>
<div class="topbar-actions">
<div class="stat-chip" id="fps-chip" title="Gerçek ölçüm (kare süresinden)">
<span class="dot" id="fps-dot"></span>
<span id="fps-value">--</span> FPS
</div>
<div class="stat-chip mono" id="drawcall-chip" title="Çizim çağrısı / üçgen">
<span id="drawcall-value">--</span>
</div>
<button class="icon-btn" id="btn-reset-top" title="Sahneyi sıfırla">
<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 12a9 9 0 1 0 3-6.7"/><path d="M3 4v5h5"/></svg>
Sıfırla
</button>
</div>
</header>
<!-- SOL PANEL -->
<aside class="panel panel-left" id="panel-left">
<div class="panel-head">
<h2>Proje</h2>
<button class="collapse-btn" data-target="panel-left" title="Paneli daralt">‹</button>
</div>
<section class="sec">
<h3>Katlar <span class="muted" id="floor-count">7</span></h3>
<ul class="floor-list" id="floor-list"></ul>
<div class="row-btns">
<button class="mini-btn" id="btn-isolate-clear" disabled>İzolasyonu kaldır</button>
</div>
</section>
<section class="sec">
<h3>Daireler <span class="muted" id="apt-count">18</span></h3>
<div class="filter-row" id="apt-filter">
<button class="chip active" data-f="all">Tümü</button>
<button class="chip" data-f="K1">1</button>
<button class="chip" data-f="K2">2</button>
<button class="chip" data-f="K3">3</button>
<button class="chip" data-f="K4">4</button>
<button class="chip" data-f="K5">5</button>
</div>
<div class="apt-list" id="apt-list"></div>
</section>
<section class="sec">
<h3>Görünür Katmanlar</h3>
<div class="layer-list" id="layer-list"></div>
</section>
<section class="sec">
<h3>Kamera Modu</h3>
<div class="mode-group" id="mode-group">
<button class="mode-btn active" data-mode="exterior">
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="9"/><path d="M3 12h18M12 3a15 15 0 0 1 0 18a15 15 0 0 1 0-18"/></svg>
Dış Mekân
</button>
<button class="mode-btn" data-mode="interior">
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M4 21V8l8-5 8 5v13"/><path d="M9 21v-8h6v8"/></svg>
İç Mekân
</button>
<button class="mode-btn" data-mode="cinematic">
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.8"><rect x="2" y="5" width="14" height="14" rx="2"/><path d="M16 9l6-3v12l-6-3z"/></svg>
Sinematik
</button>
</div>
<p class="hint" id="mode-hint">Fare ile döndür · tekerlek ile yaklaş</p>
</section>
</aside>
<!-- 3D SAHNE -->
<main class="viewport" id="viewport">
<canvas id="scene"></canvas>
<div class="vignette" aria-hidden="true"></div>
<div class="viewport-overlay">
<div class="compass" id="compass" title="Kuzey">
<svg viewBox="0 0 100 100" aria-hidden="true">
<circle cx="50" cy="50" r="44" fill="none" stroke="currentColor" stroke-width="1" opacity="0.35"/>
<path d="M50 12 L56 50 L50 44 L44 50 Z" fill="currentColor"/>
<text x="50" y="86" text-anchor="middle" font-size="12" fill="currentColor" opacity="0.8">K</text>
</svg>
</div>
<div class="build-caption">
<div class="bc-no">PRJ-2026 / 018</div>
<div class="bc-name">NUMEX RESIDENCE</div>
<div class="bc-meta">30 × 22 m · 6 kat + bodrum · 18 daire</div>
</div>
</div>
<div class="toast" id="toast" role="status" aria-live="polite"></div>
<div class="cine-bar" id="cine-bar" hidden>
<div class="cine-track"><div class="cine-fill" id="cine-fill"></div></div>
<button class="mini-btn" id="btn-cine-stop">Turu bitir</button>
</div>
<div class="interior-help" id="interior-help" hidden>
<kbd>W</kbd><kbd>A</kbd><kbd>S</kbd><kbd>D</kbd> yürü · <kbd>Fare</kbd> bak · <kbd>Shift</kbd> koş · <kbd>Q</kbd>/<kbd>E</kbd> dön
</div>
</main>
<!-- SAĞ PANEL -->
<aside class="panel panel-right" id="panel-right">
<div class="panel-head">
<h2 id="inspect-title">Seçim</h2>
<button class="collapse-btn" data-target="panel-right" title="Paneli daralt">›</button>
</div>
<div class="inspect-empty" id="inspect-empty">
<svg viewBox="0 0 48 48" width="38" height="38" fill="none" stroke="currentColor" stroke-width="1.4">
<path d="M24 6l16 9v18l-16 9-16-9V15z"/><path d="M24 6v20M8 15l16 11 16-11"/>
</svg>
<p>Bir nesneye tıklayın</p>
<span>Kapı · ışık · pencere · daire · oda · kat</span>
</div>
<div class="inspect-body" id="inspect-body" hidden></div>
</aside>
<!-- ALT BAR -->
<footer class="bottombar">
<div class="bb-group bb-explode">
<div class="bb-label">
<span>Bina Ayrıştırma</span>
<strong id="explode-value">%0</strong>
</div>
<input type="range" id="explode" min="0" max="100" value="0" step="1" class="slider" aria-label="Bina ayrıştırma yüzdesi" />
</div>
<div class="bb-group bb-time">
<div class="bb-label">
<span>Gün / Gece</span>
<strong id="time-value">17:30</strong>
</div>
<input type="range" id="time" min="0" max="24" value="17.5" step="0.1" class="slider" aria-label="Saat" />
</div>
<div class="bb-group bb-weather" id="weather-group">
<button class="weather-btn active" data-w="sunny" title="Güneşli">
<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M2 12h2M20 12h2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M19.1 4.9l-1.4 1.4M6.3 17.7l-1.4 1.4"/></svg>
</button>
<button class="weather-btn" data-w="rain" title="Yağmurlu">
<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M7 15a4 4 0 0 1-.6-8 5.5 5.5 0 0 1 10.6 1.2A3.4 3.4 0 0 1 17 15"/><path d="M8 18l-1 3M12 18l-1 3M16 18l-1 3"/></svg>
</button>
<button class="weather-btn" data-w="snow" title="Karlı">
<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M12 3v18M4 7.5l16 9M20 7.5l-16 9"/></svg>
</button>
</div>
<div class="bb-group bb-toggle">
<button class="toggle-btn" id="btn-xray">
<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M12 2v20M2 12h20"/><circle cx="12" cy="12" r="9" stroke-dasharray="3 3"/></svg>
X-RAY
</button>
<button class="toggle-btn" id="btn-ceiling" disabled>
<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M3 7h18M3 7v13h18V7"/><path d="M7 7V3h10v4"/></svg>
Tavan
</button>
</div>
<div class="bb-group bb-elevator">
<div class="elevator-readout">
<div class="elev-cars">
<span class="elev-badge" id="elev-a" data-car="A">A <b>Z</b></span>
<span class="elev-badge" id="elev-b">B <b>Z</b></span>
</div>
<span class="elev-label">Asansör</span>
</div>
<div class="elev-btns" id="elev-btns"></div>
</div>
<div class="bb-group bb-energy">
<div class="bb-label"><span>Tahmini Tüketim</span><strong id="energy-value">—</strong></div>
<div class="energy-bar"><div class="energy-fill" id="energy-fill"></div></div>
</div>
</footer>
</div>
<div class="loading" id="loading">
<div class="loading-inner">
<svg class="loading-mark" viewBox="0 0 40 40" aria-hidden="true">
<path d="M6 33V13l14-8 14 8v20" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/>
<path d="M13 33V19h6v14M23 21h6v6h-6z" fill="none" stroke="currentColor" stroke-width="1.4"/>
</svg>
<div class="loading-title">NUMEX ARCHITECT 3D</div>
<div class="loading-bar"><div class="loading-fill" id="loading-fill"></div></div>
<div class="loading-step" id="loading-step">Sahne hazırlanıyor…</div>
</div>
</div>
<script type="module" src="./src/main.ts"></script>
</body>
</html>