// using System; // using UnityEngine; // using UnityEngine.UI; // using UnityEngine.EventSystems; // using UnityEngine.InputSystem; // // namespace DDD // { // public enum ButtonState // { // Normal, // Highlighted, // Pressed, // Selected, // Disabled // } // // public enum ButtonType // { // None = 0, // Toggle // } // // // TODO : ButtonType == None // // normal, selected(마우스 pointerEnter, eventsystem selected), pressed (마우스 pointerDown, 키보드 외부 입력처리), disabled // // Highlighted가 사실상 selected로 통합, 실제로 마우스가 가리키는 오브젝트가 eventsystem의 selected가 됨 // // ButtonType == Toggle // // normal, highlighted, selected(계속 눌려있는 상태, 추후에 ToggleGroup 클래스에서 관리 - 다른 토글이 눌리기 전까지 풀리지 않음), pressed(눌리면 selected 고정), disabled // // public class UiButton : MonoBehaviour, IInteractableUi, IPointerEnterHandler, IPointerExitHandler, // IPointerDownHandler, IPointerUpHandler, ISelectHandler, IDeselectHandler, ISubmitHandler // { // [Header("Button Components")] // [SerializeField] private Button _button; // [SerializeField] private Selectable _selectable; // // [Header("State Synchronization")] // [SerializeField] private bool _synchronizeStates = true; // [SerializeField] private bool _handleKeyboardInput = true; // [SerializeField] private bool _handleGamepadInput = true; // // [Header("Visual Feedback")] // [SerializeField] private Animator _animator; // [SerializeField] private Image _targetGraphic; // // [Header("Toggle Functionality")] // [SerializeField] private ButtonType _buttonType; // // // State tracking // private bool _isPressed; // private bool _isHighlighted; // private bool _isSelected; // private bool _wasSelectedByKeyboard; // private bool _isToggled = false; // // // Events // public event Action OnClicked; // public event Action OnStateChanged; // // // Animation parameter hashes (if using Animator) // private readonly int _normalHash = Animator.StringToHash("Normal"); // private readonly int _highlightedHash = Animator.StringToHash("Highlighted"); // private readonly int _pressedHash = Animator.StringToHash("Pressed"); // private readonly int _selectedHash = Animator.StringToHash("Selected"); // private readonly int _disabledHash = Animator.StringToHash("Disabled"); // // private void Awake() // { // InitializeComponents(); // } // // private void OnEnable() // { // if (_button != null) // { // _button.onClick.AddListener(HandleButtonClick); // } // // UpdateVisualState(); // } // // private void OnDisable() // { // if (_button != null) // { // _button.onClick.RemoveListener(HandleButtonClick); // } // } // // private void Update() // { // HandleInputUpdate(); // } // // private void InitializeComponents() // { // // Get Button component if not assigned // if (_button == null) // { // _button = GetComponent