using System;
using UnityEngine;
namespace AlicizaX.UI
{
///
/// CanvasGroup 交互状态控制
/// 控制 CanvasGroup 的可交互性和射线检测
///
[Serializable]
[ControlerStateName("CanvasGroup/Interactable")]
[ControlerStateAttachType(true)]
public class CanvasGroupInteractableState : ControllerStateBase
{
[SerializeField] private bool _interactable = true;
[SerializeField] private bool _blocksRaycasts = true;
[HideInInspector] [SerializeField] private bool _defaultInteractable = true;
[HideInInspector] [SerializeField] private bool _defaultBlocksRaycasts = true;
public override void Init(UXControllerStateRecorder recorder)
{
if (recorder != null && recorder.TryGetComponent(out var canvasGroup))
{
_defaultInteractable = canvasGroup.interactable;
_defaultBlocksRaycasts = canvasGroup.blocksRaycasts;
}
}
public override void Execute(UXControllerStateRecorder recorder, int entryIndex, int selectionIndex)
{
if (recorder != null && recorder.TryGetComponent(out var canvasGroup))
{
bool isActive = (entryIndex == selectionIndex);
canvasGroup.interactable = isActive ? _interactable : _defaultInteractable;
canvasGroup.blocksRaycasts = isActive ? _blocksRaycasts : _defaultBlocksRaycasts;
}
}
public override bool Valid(UXControllerStateRecorder recorder)
{
return recorder != null && recorder.GetComponent() != null;
}
public override string GetDescription()
{
return $"匹配时: 可交互={_interactable}, 射线检测={_blocksRaycasts}";
}
}
}