Files
tcg-client/Assets/TcgEngine/Scripts/UI/IconBar.cs
2025-08-13 10:04:07 +08:00

85 lines
2.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace TcgEngine.UI
{
/// <summary>
/// Bar that contain multiple icons to represent a value
/// Such as the mana bar during the game
/// </summary>
public class IconBar : MonoBehaviour
{
public int value = 0;
public int max_value = 4;
public bool auto_refresh = true;
public Image[] icons;
public Sprite sprite_full;
public Sprite sprite_empty;
[Header("Value Display")]
public Text value_text; // 显示当前法力值数字的文本组件
public string value_format = "{0}"; // 文本格式,{0}会被替换为当前值
void Awake()
{
}
void Update()
{
if (auto_refresh)
Refresh();
}
public void Refresh()
{
if (icons == null)
return;
int index = 0;
foreach (Image icon in icons)
{
if (icon == null)
continue;
icon.gameObject.SetActive(index < value || index < max_value);
icon.sprite = (index < value) ? sprite_full : sprite_empty;
index++;
}
// 更新法力值数字文本
UpdateValueText();
}
private void UpdateValueText()
{
if (value_text != null)
{
value_text.text = string.Format(value_format, value);
}
}
// 手动设置值并更新文本
public void SetValue(int new_value)
{
value = new_value;
UpdateValueText();
}
public void SetMat(Material mat)
{
if (icons == null)
return;
foreach (Image icon in icons)
{
if (icon != null)
icon.material = mat;
}
}
}
}