using UnityEngine; using UnityEngine.UI; namespace WL.UI { /// /// 좌상단 플레이어 레벨 표기 (구 WL PD #727 · 레퍼런스 XP Hero: 레벨 배지 + 경험치 바). /// /// 힘민지 이식(PD #766 · 2026-09-06): /// 원본은 구 WL 의 WL.Player.PlayerProgress 를 구독했지만 힘민지에는 그 타입이 없다. /// → 자체 데이터 소스를 갖지 않는 **표시 전용** 컴포넌트로 바꾸고, 값은 외부(WLHudBinder)가 /// 로 밀어 넣는다. 직렬화 필드 이름(levelText/xpText/xpFill)은 /// 프리팹 바인딩이 끊기지 않도록 그대로 두었고, .meta GUID 도 구 WL 것을 유지한다. /// (HUD_Level.prefab 은 levelText 만 연결돼 있고 xpText·xpFill 은 비어 있다 — 정상.) /// 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; } /// 레벨 + 경험치 진행도(0~1)를 갱신한다. xpText 는 비어 있으면 무시된다. 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; } /// 1.08M · 4.31K · 121 형식. 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(); } } }