using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; /// /// 带有+-按钮控制数量显示和回调 /// public class CountControler : MonoBehaviour { [SerializeField] Text countText; [SerializeField] LongPressButton addBtn; [SerializeField] LongPressButton decBtn; int count; //当前数量 int maxCount; //最大数量 string format; Action OnChangeEvent; Func CanAddEvent; Func 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 _OnChangeEvent, int _maxCount, int _count = 1, Func _CanAddEvent = null, Func _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); } }