using System; using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; using UnityEngine.UI; namespace DDD { public enum SectionButtonType { None = 0, Menu, Cookware, Worker } public enum InventoryCategoryType { None = 0, Food, // 음식 Drink, // 음료 Ingredient, // 재료 Cookware, // 조리도구 Special // 특수 아이템 } /// /// 공통 탭 버튼 UI 클래스 /// 제네릭 없이 탭을 관리합니다. /// public class CommonTabButtonUi : MonoBehaviour, IInteractableUi, ITabButton { [SerializeField] private Button _button; [SerializeField] private Animator _animator; [SerializeField] private List _content = new(); [SerializeField] private bool _isEnabled = true; private Action _onSelected; private bool _isSelected; // ITabButton 인터페이스 구현을 위한 필드 private int _tabButtonValue; public event Action OnTabClicked; private readonly int _canDisabled = Animator.StringToHash("CanDisabled"); // ITabButton 인터페이스 구현 public int TabValue => _tabButtonValue; public bool IsInteractable => _button != null && _button.interactable; private void OnEnable() { if (_isEnabled == false) { _animator.SetBool(_canDisabled, true); return; } if (_isSelected == true) { _animator.SetTrigger(nameof(DefaultAnimatorParams.Selected)); } } public void Initialize(Action onSelected) { gameObject.SetActive(true); _onSelected = onSelected; _button.onClick.AddListener(() => _onSelected?.Invoke(_tabButtonValue)); } public void SetSelected(bool isSelected) { if (_isEnabled == false) return; _isSelected = isSelected; SetActiveContents(isSelected); if (_isSelected == true) { _animator.SetTrigger(nameof(DefaultAnimatorParams.Selected)); } else { _animator.SetTrigger(nameof(DefaultAnimatorParams.Normal)); } } public void SetTabData(int tabValue) { if (_isEnabled == false) return; _tabButtonValue = tabValue; // 버튼 클릭 이벤트 설정 if (_button != null) { _button.onClick.RemoveAllListeners(); _button.onClick.AddListener(() => { _onSelected?.Invoke(tabValue); OnTabClicked?.Invoke(tabValue); }); } } private void SetActiveContents(bool isActive) { foreach (var content in _content) { content.SetActive(isActive); } } public void OnInteract() { _onSelected?.Invoke(_tabButtonValue); OnTabClicked?.Invoke(_tabButtonValue); } } }