user 41270a34f5 Refactor: 전체 에디터 UXML 전환 + 대시보드/런타임 UI + 한글화 + NanumGothic 폰트
- 모든 컨트롤러 에디터를 IMGUI → UI Toolkit(UXML/USS)으로 전환
  (Camera, Item, Event, Avatar, System, StreamDeck, OptiTrack, Facial)
- StreamingleCommon.uss 공통 테마 + 개별 에디터 USS 스타일시트
- SystemController 서브매니저 분리 (OptiTrack, Facial, Recording, Screenshot 등)
- 런타임 컨트롤 패널 (ESC 토글, 좌측 오버레이, 150% 스케일)
- 웹 대시보드 서버 (StreamingleDashboardServer) + 리타게팅 통합
- 설정 도구(StreamingleControllerSetupTool) UXML 재작성 + 원클릭 설정
- SimplePoseTransfer UXML 에디터 추가
- 전체 UXML 한글화 + NanumGothic 폰트 적용
- Streamingle.Debug → Streamingle.Debugging 네임스페이스 변경 (Debug.Log 충돌 해결)
- 불필요 코드 제거 (rawkey.cs, RetargetingHTTPServer, OptitrackSkeletonAnimator 등)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 02:51:43 +09:00

93 lines
4.0 KiB (Stored with Git LFS)
Plaintext

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
<title>Streamingle Dashboard</title>
<link href="https://cdn.jsdelivr.net/npm/gridstack@10/dist/gridstack.min.css" rel="stylesheet"/>
<style>
{{CSS}}
</style>
</head>
<body>
<div class="header">
<h1>STREAMINGLE</h1>
<div class="tab-bar">
<button class="tab-btn active" id="tabBtnDashboard" onclick="switchTab('dashboard')">Dashboard</button>
<button class="tab-btn" id="tabBtnRetargeting" onclick="switchTab('retargeting')">Retargeting</button>
</div>
<div class="header-controls">
<div class="connection-status" id="connectionStatus">연결 대기중...</div>
<div id="dashboardControls">
<button class="btn-icon" id="btnLock" onclick="toggleLock()" title="레이아웃 잠금/해제">&#x1F513;</button>
<button class="btn-icon" onclick="showSettings()" title="패널 설정">&#x2699;</button>
<button class="btn-icon" onclick="requestFullState()" title="새로고침">&#x1F504;</button>
</div>
<div id="retargetingControls" style="display:none;">
<button class="btn-icon" onclick="rtRefresh()" title="새로고침">&#x1F504;</button>
<button class="btn-icon" onclick="rtExpandAll()" title="모두 펼치기">&#x1F4C2;</button>
<button class="btn-icon" onclick="rtCollapseAll()" title="모두 접기">&#x1F4C1;</button>
</div>
</div>
</div>
<!-- Dashboard Tab -->
<div id="tabDashboard" class="tab-content active">
<div class="health-bar" id="healthBar">
<div class="health-item" id="health-optitrack">
<span class="health-dot offline"></span>
<span>OptiTrack</span>
</div>
<div class="health-item" id="health-facial">
<span class="health-dot offline"></span>
<span>Facial(0)</span>
</div>
<div class="health-item" id="health-recording">
<span class="health-dot offline"></span>
<span>REC</span>
</div>
<div class="health-item" id="health-remote">
<span class="health-dot offline"></span>
<span>Remote</span>
</div>
<div class="health-item" id="health-clients">
<span class="health-dot online"></span>
<span>WS(1)</span>
</div>
</div>
<div class="grid-stack" id="dashboardGrid"></div>
</div>
<!-- Retargeting Tab -->
<div id="tabRetargeting" class="tab-content">
<div class="rt-status-bar" id="rtStatusBar">
<div class="rt-connection-status" id="rtConnectionStatus">리타게팅 대기중...</div>
</div>
<div class="characters-container" id="charactersContainer">
<div class="loading-message">리타게팅 탭을 선택하면 연결됩니다.</div>
</div>
</div>
<!-- Settings Overlay -->
<div class="settings-overlay" id="settingsOverlay" onclick="onSettingsOverlayClick(event)">
<div class="settings-panel">
<div class="settings-header">
<span>패널 설정</span>
<button class="settings-close" onclick="hideSettings()">&#x2715;</button>
</div>
<div class="settings-body" id="settingsBody"></div>
<div class="settings-footer">
<button class="btn btn-secondary btn-sm" onclick="resetLayout()">레이아웃 초기화</button>
</div>
</div>
</div>
<div class="toast" id="toast"></div>
<script src="https://cdn.jsdelivr.net/npm/gridstack@10/dist/gridstack-all.js"></script>
<script>
{{JS}}
</script>
</body>
</html>