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);
}
}