using System; using UnityEngine; namespace UVC.UI.Toolbar { /// /// 클릭할 때마다 선택/해제 상태가 변경되는 토글 버튼입니다. /// public class ToolbarToggleButton : ToolbarButtonBase { public event Action OnToggleStateChanged; // IsSelected 변경 시 IsSelected 값을 전달하는 이벤트 protected string _offIconSpritePath; public string OffIconSpritePath { get => _offIconSpritePath; set { if (_offIconSpritePath != value) { _offIconSpritePath = value; NotifyStateChanged(); } } } private bool _isSelected; public bool IsSelected { get => _isSelected; set { if (_isSelected != value) { _isSelected = value; OnToggleStateChanged?.Invoke(_isSelected); // IsSelected 값과 함께 이벤트 발생 NotifyStateChanged(); // 일반 상태 변경 이벤트도 발생 } } } public Action OnToggle { get; set; } public override void ExecuteClick(object parameter = null) { if (!IsEnabled) return; if (parameter is bool newSelectedStateFromUI) { // UI로부터 직접 상태가 전달된 경우 (View의 onValueChanged 리스너) // IsSelected 프로퍼티 setter가 OnToggle 및 NotifyStateChanged를 호출 IsSelected = newSelectedStateFromUI; } else { // 일반적인 ExecuteClick (파라미터 없거나 bool이 아님) - 기존 토글 로직 IsSelected = !IsSelected; } OnToggle?.Invoke(IsSelected); // IsSelected는 이미 위에서 최종 상태로 설정됨 // ClickCommand 실행. 필요하다면 IsSelected나 다른 값을 파라미터로 전달. // 여기서는 parameter 인자로 받은 값을 우선 사용하고, 없으면 IsSelected를 사용. object commandParameter = parameter ?? IsSelected; ClickCommand?.Execute(commandParameter); } } }