using System;
using UnityEngine;
using UnityEngine.UI;
namespace AlicizaX.UI
{
///
/// Graphic 材质状态控制
/// 控制 UI 图形组件的材质
///
[Serializable]
[ControlerStateName("Graphic/Material")]
[ControlerStateAttachType(true)]
public class GraphicMaterialState : ControllerStateBase
{
[SerializeField] private Material _material;
[HideInInspector] [SerializeField] private Material _defaultMaterial;
public override void Init(UXControllerStateRecorder recorder)
{
if (recorder != null && recorder.TryGetComponent(out var graphic))
{
_defaultMaterial = graphic.material;
}
}
public override void Execute(UXControllerStateRecorder recorder, int entryIndex, int selectionIndex)
{
if (recorder != null && recorder.TryGetComponent(out var graphic))
{
graphic.material = (entryIndex == selectionIndex) ? _material : _defaultMaterial;
}
}
public override bool Valid(UXControllerStateRecorder recorder)
{
return recorder != null && recorder.GetComponent() != null;
}
public override string GetDescription()
{
string matched = _material != null ? _material.name : "无";
string defaultVal = _defaultMaterial != null ? _defaultMaterial.name : "无";
return $"匹配时: {matched}, 默认: {defaultVal}";
}
}
}