기본 Styleguide 완료

This commit is contained in:
logonkhi
2026-01-21 20:43:54 +09:00
parent fd8f8c6de0
commit e00953de52
122 changed files with 3310 additions and 709 deletions

View File

@@ -8,39 +8,99 @@ namespace UVC.UIToolkit
/// <summary>
/// 프로그레스 바 컴포넌트.
/// Unity ProgressBar를 래핑하여 커스텀 스타일을 적용합니다.
/// 작업의 진행 상황을 시각적으로 표시합니다.
/// </summary>
/// <remarks>
/// <para><b>ProgressBar(진행률 표시줄)란?</b></para>
/// <para>
/// ProgressBar는 작업의 완료 정도를 시각적으로 표시하는 UI 컨트롤입니다.
/// 파일 다운로드, 로딩, 설치 진행률 등 사용자에게 대기 시간과 완료 상태를 알려줍니다.
/// </para>
///
/// <para><b>주요 속성:</b></para>
/// <list type="bullet">
/// <item><description><c>Value</c> - 현재 진행 값</description></item>
/// <item><description><c>MinValue</c> - 최소값 (보통 0)</description></item>
/// <item><description><c>MaxValue</c> - 최대값 (보통 100)</description></item>
/// <item><description><c>ShowValue</c> - 값 텍스트 표시 여부</description></item>
/// <item><description><c>ShowPercentage</c> - 퍼센트로 표시 (true) 또는 값/최대값으로 표시 (false)</description></item>
/// <item><description><c>IsIndeterminate</c> - 불확정 상태 (진행률을 알 수 없을 때 애니메이션)</description></item>
/// <item><description><c>Variant</c> - 스타일 변형 (Default, Success, Warning, Error)</description></item>
/// </list>
///
/// <para><b>Variant 스타일:</b></para>
/// <list type="bullet">
/// <item><description><c>Default</c> - 기본 파란색 (일반 진행)</description></item>
/// <item><description><c>Success</c> - 녹색 (완료, 성공)</description></item>
/// <item><description><c>Warning</c> - 주황색 (주의 필요)</description></item>
/// <item><description><c>Error</c> - 빨간색 (오류, 실패)</description></item>
/// </list>
///
/// <para><b>불확정 상태(Indeterminate):</b></para>
/// <para>
/// 작업 완료 시점을 알 수 없을 때 사용합니다 (예: 서버 응답 대기).
/// 바가 좌우로 움직이는 애니메이션으로 "작업 중"임을 표시합니다.
/// </para>
///
/// <para><b>실제 활용 예시:</b></para>
/// <list type="bullet">
/// <item><description>파일 다운로드/업로드 진행률</description></item>
/// <item><description>게임 로딩 화면</description></item>
/// <item><description>설치/업데이트 진행 상태</description></item>
/// <item><description>데이터 처리 진행률</description></item>
/// <item><description>퀘스트/미션 달성도</description></item>
/// </list>
/// </remarks>
/// <example>
/// <para><b>C# 코드에서 사용:</b></para>
/// <code>
/// // 기본 프로그레스 바
/// var progressBar = new UTKProgressBar();
/// progressBar.title = "다운로드 중...";
/// progressBar.MinValue = 0;
/// progressBar.MaxValue = 100;
/// progressBar.Value = 50;
///
/// // 값 표시 설정
/// progressBar.ShowValue = true;
/// progressBar.ShowPercentage = true;
///
/// // 무한 로딩 (불확정 상태)
/// progressBar.IsIndeterminate = true;
///
/// // 변형 스타일
/// progressBar.Variant = UTKProgressBar.ProgressBarVariant.Success;
/// // 다운로드 진행률 표시
/// var downloadProgress = new UTKProgressBar("다운로드 중...", 0, 100);
/// downloadProgress.ShowPercentage = true;
///
/// // 비동기 다운로드 시뮬레이션
/// async UniTask DownloadFile()
/// {
/// for (int i = 0; i <= 100; i++)
/// {
/// downloadProgress.Value = i;
/// await UniTask.Delay(50);
/// }
/// downloadProgress.Variant = UTKProgressBar.ProgressBarVariant.Success;
/// }
///
/// // 불확정 상태 (서버 응답 대기)
/// var loadingBar = new UTKProgressBar();
/// loadingBar.IsIndeterminate = true; // 무한 애니메이션
///
/// // 상태별 색상 변경
/// progressBar.Variant = UTKProgressBar.ProgressBarVariant.Warning; // 주의
/// progressBar.Variant = UTKProgressBar.ProgressBarVariant.Error; // 실패
///
/// // 값/최대값 형식 (예: 50/100)
/// var itemProgress = new UTKProgressBar("수집한 아이템", 0, 100);
/// itemProgress.ShowPercentage = false; // "50/100" 형식으로 표시
/// itemProgress.Value = 50;
/// </code>
/// <para><b>UXML에서 사용:</b></para>
/// <code>
/// <ui:UXML xmlns:utk="UVC.UIToolkit">
/// <!-- 기본 프로그레스 바 -->
/// <utk:UTKProgressBar title="진행률" low-value="0" high-value="100" value="30" />
///
/// <!-- 퍼센트 표시 -->
/// <utk:UTKProgressBar ShowPercentage="true" value="75" />
///
/// <!-- 성공 스타일 -->
/// <utk:UTKProgressBar Variant="Success" value="100" />
/// </ui:UXML>
/// <!-- 기본 프로그레스 바 -->
/// <utk:UTKProgressBar title="진행률" low-value="0" high-value="100" value="30" />
///
/// <!-- 퍼센트 표시 -->
/// <utk:UTKProgressBar show-percentage="true" value="75" />
///
/// <!-- 값/최대값 표시 -->
/// <utk:UTKProgressBar show-percentage="false" show-value="true" value="50" />
///
/// <!-- 성공 스타일 -->
/// <utk:UTKProgressBar variant="Success" value="100" />
///
/// <!-- 경고 스타일 -->
/// <utk:UTKProgressBar variant="Warning" value="80" />
///
/// <!-- 불확정 상태 (로딩 애니메이션) -->
/// <utk:UTKProgressBar is-indeterminate="true" />
/// </code>
/// </example>
[UxmlElement]
@@ -56,6 +116,7 @@ namespace UVC.UIToolkit
private bool _showPercentage = true;
private bool _isIndeterminate;
private ProgressBarVariant _variant = ProgressBarVariant.Default;
private string _baseTitle = "";
#endregion
#region Properties
@@ -161,6 +222,15 @@ namespace UVC.UIToolkit
SetupStyles();
SubscribeToThemeChanges();
// UXML에서 value가 설정된 후 title 갱신
RegisterCallback<AttachToPanelEvent>(OnAttachToPanel);
}
private void OnAttachToPanel(AttachToPanelEvent evt)
{
UnregisterCallback<AttachToPanelEvent>(OnAttachToPanel);
UpdateValueLabel();
}
public UTKProgressBar(string text, float value = 0f, float maxValue = 100f) : this()
@@ -208,21 +278,19 @@ namespace UVC.UIToolkit
{
if (_isIndeterminate || !_showValue)
{
title = title?.Split(' ')[0] ?? "";
title = _baseTitle;
return;
}
string baseTitle = title?.Split(' ')[0] ?? "";
if (_showPercentage)
{
float range = highValue - lowValue;
float percent = range > 0 ? (value - lowValue) / range * 100 : 0;
title = string.IsNullOrEmpty(baseTitle) ? $"{percent:F0}%" : $"{baseTitle} {percent:F0}%";
title = $"{percent:F0}%";
}
else
{
title = string.IsNullOrEmpty(baseTitle) ? $"{value:F0}/{highValue:F0}" : $"{baseTitle} {value:F0}/{highValue:F0}";
title = $"{value:F0}/{highValue:F0}";
}
}