using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
using System; 
 | 
  
 | 
/// <summary> 
 | 
/// 带有+-按钮控制数量显示和回调 
 | 
/// </summary> 
 | 
public class CountControler : MonoBehaviour 
 | 
{ 
 | 
    [SerializeField] Text countText; 
 | 
    [SerializeField] LongPressButton addBtn; 
 | 
    [SerializeField] LongPressButton decBtn; 
 | 
  
 | 
    int count;  //当前数量 
 | 
    int maxCount;   //最大数量 
 | 
    string format; 
 | 
  
 | 
    Action<int> OnChangeEvent; 
 | 
    Func<int, bool> CanAddEvent; 
 | 
    Func<int, bool> CanDecEvent; 
 | 
    void Start() 
 | 
    { 
 | 
        addBtn.AddListener(() => 
 | 
        { 
 | 
            if (CanAddEvent == null || !CanAddEvent(count)) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
            count++; 
 | 
            Refresh(); 
 | 
        }); 
 | 
        addBtn.onPress.AddListener(() => 
 | 
        { 
 | 
            if (CanAddEvent == null || !CanAddEvent(count)) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
            count++; 
 | 
            Refresh(); 
 | 
        }); 
 | 
        decBtn.AddListener(() => 
 | 
        { 
 | 
            if (CanDecEvent == null || !CanDecEvent(count)) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
            count--; 
 | 
            Refresh(); 
 | 
        }); 
 | 
        decBtn.onPress.AddListener(() => 
 | 
        { 
 | 
            if (CanDecEvent == null || !CanDecEvent(count)) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
            count--; 
 | 
            Refresh(); 
 | 
        }); 
 | 
  
 | 
    } 
 | 
  
 | 
    public void Init(Action<int> _OnChangeEvent, int _maxCount, int _count = 1, 
 | 
    Func<int, bool> _CanAddEvent = null, Func<int, bool> _CanDecEvent = null, string _format="{0}/{1}") 
 | 
    { 
 | 
        count = _count; 
 | 
        maxCount = _maxCount; 
 | 
        OnChangeEvent = _OnChangeEvent; 
 | 
        CanAddEvent = _CanAddEvent; 
 | 
        CanDecEvent = _CanDecEvent; 
 | 
        format = _format; 
 | 
  
 | 
        Refresh(); 
 | 
  
 | 
    } 
 | 
  
 | 
    void Refresh() 
 | 
    { 
 | 
         
 | 
        if (count >= maxCount) 
 | 
        { 
 | 
            count = maxCount; 
 | 
            addBtn.interactable = false; 
 | 
            addBtn.SetColorful(null, false); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            addBtn.interactable = true; 
 | 
            addBtn.SetColorful(null, true); 
 | 
        } 
 | 
  
 | 
        if (count <= 0) 
 | 
        { 
 | 
            count = 0; 
 | 
            decBtn.interactable = false; 
 | 
            decBtn.SetColorful(null, false); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            decBtn.interactable = true; 
 | 
            decBtn.SetColorful(null, true); 
 | 
        } 
 | 
  
 | 
        countText.text = string.Format(format, count, maxCount); 
 | 
        OnChangeEvent?.Invoke(count); 
 | 
    } 
 | 
  
 | 
} 
 |