using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using UnityEngine.Events; 
 | 
using UnityEngine.EventSystems; 
 | 
using UnityEngine.Serialization; 
 | 
using UnityEngine.UI; 
 | 
  
 | 
    public class LongPressButton : ButtonEx 
 | 
    { 
 | 
        public class ButtonPressEvent : UnityEvent { } 
 | 
  
 | 
        [FormerlySerializedAs("onPress")] 
 | 
        [SerializeField] 
 | 
        private ButtonPressEvent m_OnPress = new ButtonPressEvent(); 
 | 
        public ButtonPressEvent onPress 
 | 
        { 
 | 
            get { return m_OnPress; } 
 | 
            set { m_OnPress = value; } 
 | 
        } 
 | 
  
 | 
        [SerializeField] 
 | 
        float m_LongPressCheckTime = 0.5f; 
 | 
        public float longPressCheckTime 
 | 
        { 
 | 
            get { return m_LongPressCheckTime; } 
 | 
            set { m_LongPressCheckTime = value; } 
 | 
        } 
 | 
        [SerializeField] 
 | 
        float m_LongPressIntervalTime = 0.1f; 
 | 
        public float longPressIntervalTime 
 | 
        { 
 | 
            get { return m_LongPressIntervalTime; } 
 | 
            set { m_LongPressIntervalTime = value; } 
 | 
        } 
 | 
  
 | 
        float m_PressTime = 0.0f; 
 | 
        float m_PressIntervalTime = 0.0f; 
 | 
        bool m_LongPress = false; 
 | 
        bool m_IsButtonDown = false; 
 | 
  
 | 
        public override void OnPointerClick(PointerEventData eventData) 
 | 
        { 
 | 
            if (m_LongPress) 
 | 
            { 
 | 
                m_LongPress = false; 
 | 
                return; 
 | 
            } 
 | 
            base.OnPointerClick(eventData); 
 | 
        } 
 | 
  
 | 
        public override void OnPointerDown(PointerEventData eventData) 
 | 
        { 
 | 
            base.OnPointerDown(eventData); 
 | 
            m_PressTime = 0.0f; 
 | 
            m_PressIntervalTime = 0.0f; 
 | 
            m_IsButtonDown = true; 
 | 
        } 
 | 
  
 | 
        public override void OnPointerUp(PointerEventData eventData) 
 | 
        { 
 | 
            base.OnPointerUp(eventData); 
 | 
            m_IsButtonDown = false; 
 | 
        } 
 | 
  
 | 
        public override void OnPointerExit(PointerEventData eventData) 
 | 
        { 
 | 
            base.OnPointerExit(eventData); 
 | 
            m_IsButtonDown = false; 
 | 
            m_LongPress = false; 
 | 
        } 
 | 
  
 | 
        private void Update() 
 | 
        { 
 | 
            if (m_IsButtonDown) 
 | 
            { 
 | 
                m_PressTime += Time.deltaTime; 
 | 
                if (m_PressTime < m_LongPressCheckTime) 
 | 
                { 
 | 
                    return; 
 | 
                } 
 | 
                if (m_PressIntervalTime >= m_LongPressIntervalTime) 
 | 
                { 
 | 
                    onPress.Invoke(); 
 | 
                    m_PressIntervalTime = 0.0f; 
 | 
                } 
 | 
                m_PressIntervalTime += Time.deltaTime; 
 | 
                m_LongPress = true; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        protected override void OnEnable() 
 | 
        { 
 | 
            base.OnEnable(); 
 | 
            m_LongPress = false; 
 | 
            m_IsButtonDown = false; 
 | 
        } 
 | 
    } 
 |