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; //最大数量
|
|
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)
|
{
|
count = _count;
|
maxCount = _maxCount;
|
OnChangeEvent = _OnChangeEvent;
|
CanAddEvent = _CanAddEvent;
|
CanDecEvent = _CanDecEvent;
|
|
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 = count + "/" + maxCount;
|
OnChangeEvent?.Invoke(count);
|
}
|
|
}
|