46 lines
2.1 KiB
C#
46 lines
2.1 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace WL.UI
|
|
{
|
|
/// <summary>
|
|
/// 좌상단 플레이어 레벨 표기 (구 WL PD #727 · 레퍼런스 XP Hero: 레벨 배지 + 경험치 바).
|
|
///
|
|
/// 힘민지 이식(PD #766 · 2026-09-06):
|
|
/// 원본은 구 WL 의 <c>WL.Player.PlayerProgress</c> 를 구독했지만 힘민지에는 그 타입이 없다.
|
|
/// → 자체 데이터 소스를 갖지 않는 **표시 전용** 컴포넌트로 바꾸고, 값은 외부(WLHudBinder)가
|
|
/// <see cref="SetValues"/> 로 밀어 넣는다. 직렬화 필드 이름(levelText/xpText/xpFill)은
|
|
/// 프리팹 바인딩이 끊기지 않도록 그대로 두었고, .meta GUID 도 구 WL 것을 유지한다.
|
|
/// (HUD_Level.prefab 은 levelText 만 연결돼 있고 xpText·xpFill 은 비어 있다 — 정상.)
|
|
/// </summary>
|
|
public class PlayerLevelHud : MonoBehaviour
|
|
{
|
|
[Header("참조")]
|
|
[Tooltip("레벨 숫자")]
|
|
[SerializeField] private Text levelText;
|
|
[Tooltip("경험치 텍스트 (현재/필요)")]
|
|
[SerializeField] private Text xpText;
|
|
[Tooltip("경험치 바 채움 이미지 (Image Type = Filled · Horizontal)")]
|
|
[SerializeField] private Image xpFill;
|
|
|
|
public int Level { get; private set; }
|
|
|
|
/// <summary>레벨 + 경험치 진행도(0~1)를 갱신한다. xpText 는 비어 있으면 무시된다.</summary>
|
|
public void SetValues(int level, float xpNormalized, string xpLabel = null)
|
|
{
|
|
Level = level;
|
|
if (levelText != null) levelText.text = level.ToString();
|
|
if (xpFill != null) xpFill.fillAmount = Mathf.Clamp01(xpNormalized);
|
|
if (xpText != null && xpLabel != null) xpText.text = xpLabel;
|
|
}
|
|
|
|
/// <summary>1.08M · 4.31K · 121 형식.</summary>
|
|
public static string Format(long v)
|
|
{
|
|
if (v >= 1000000L) return (v / 1000000f).ToString("0.00") + "M";
|
|
if (v >= 1000L) return (v / 1000f).ToString("0.00") + "K";
|
|
return v.ToString();
|
|
}
|
|
}
|
|
}
|