sea-battle/Assets/Scripts/UI/UIButtonHighlight.cs

71 lines
2.5 KiB
C#
Raw Permalink Blame History

using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class UIButtonHighlight : MonoBehaviour
{
public GameObject[] highlightObjects; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
public Color normalColor = Color.white; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public Color highlightedColor = Color.yellow; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public Color highlightOnColor = Color.yellow; // <20><><EFBFBD><EFBFBD> highlight-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public Color highlightOffColor = Color.white; // <20><><EFBFBD><EFBFBD> highlight-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private Image buttonImage;
private TextMeshProUGUI buttonText;
private Color originalTextColor;
public Color disabledTextColor = Color.gray;
public System.Action onFocused; // вызывается когда кнопка получает фокус
void Awake()
{
buttonImage = GetComponent<Image>();
buttonText = GetComponentInChildren<TextMeshProUGUI>();
if (buttonText != null)
originalTextColor = buttonText.color;
SetHighlighted(false);
}
public void SetHighlighted(bool state)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (buttonImage != null)
buttonImage.color = state ? highlightedColor : normalColor;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (buttonText != null)
buttonText.color = state ? originalTextColor : disabledTextColor;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> highlight-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (highlightObjects != null)
{
foreach (var obj in highlightObjects)
{
if (!obj) continue;
// 1. <20><><EFBFBD><EFBFBD> Image
var img = obj.GetComponent<Image>();
if (img != null)
{
img.color = state ? highlightOnColor : highlightOffColor;
continue;
}
// 2. <20><><EFBFBD> SpriteRenderer
var sr = obj.GetComponent<SpriteRenderer>();
if (sr != null)
{
sr.color = state ? highlightOnColor : highlightOffColor;
continue;
}
}
}
if (state) onFocused?.Invoke();
}
}