Degulleo3D/Assets/KSH/StatPanelController.cs

83 lines
2.3 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class StatPanelController : MonoBehaviour
{
[Header("Health Bar")]
[SerializeField] private Image healthBarImage;
[SerializeField] private TMP_Text healthText;
[Header("Reputation")]
[SerializeField] private Image reputationBarImage;
[SerializeField] private TMP_Text reputationText;
[Header("Clock Time")]
[SerializeField] private TMP_Text clockTimeText;
[SerializeField] private TMP_Text ampmText;
[Header("Day")]
[SerializeField] private TMP_Text dayCountText;
private GameConstants _gameConstants = new GameConstants();
private void Start()
{
PlayerStats.Instance.OnStatsChanged += UpdateStat;
GameManager.Instance.OnDayChanged += UpdateDay;
InitStats();
}
private void OnDisable()
{
// 이벤트 구독 해제
PlayerStats.Instance.OnStatsChanged -= UpdateStat;
GameManager.Instance.OnDayChanged -= UpdateDay;
}
private void InitStats()
{
var nowHealth = PlayerStats.Instance.HealthStat;
var nowReputation = PlayerStats.Instance.ReputationStat;
var nowTime = PlayerStats.Instance.TimeStat;
SetStat(nowTime, nowReputation, nowHealth);
}
private void UpdateStat(PlayerStats.StatsChangeData statData)
{
SetStat(statData.Time, statData.Reputation, statData.Health);
}
private void SetStat(float time, float reputation, float health)
{
healthBarImage.fillAmount = health / PlayerStats.Instance.MaxHealth;
healthText.text = $"{health}/{PlayerStats.Instance.MaxHealth}";
reputationBarImage.fillAmount = reputation / _gameConstants.maxReputation;
reputationText.text = $"{reputation}/{_gameConstants.maxReputation}";
if (time > 12) // 오후, 13부터
{
time -= 12;
clockTimeText.text = $"{time}:00";
ampmText.text = "PM";
}
else // 오전
{
clockTimeText.text = $"{time}:00";
ampmText.text = "AM";
}
dayCountText.text = GameManager.Instance.CurrentDay.ToString();
}
private void UpdateDay(int day)
{
dayCountText.text = day.ToString();
}
}