add project files
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using OHM.UnityToolkit.Localization;
|
||||
|
||||
namespace OHM.UnityToolkit.UI
|
||||
{
|
||||
public class UIIncrementableCounter : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
public float delay;
|
||||
|
||||
[SerializeField]
|
||||
public float incDuration = 0.1f;
|
||||
[SerializeField]
|
||||
public Animator animator;
|
||||
|
||||
[SerializeField]
|
||||
public TextWrapper text;
|
||||
|
||||
[SerializeField]
|
||||
public bool localized;
|
||||
|
||||
[SerializeField]
|
||||
[TextArea]
|
||||
public string strFormat;
|
||||
|
||||
private long targetValue;
|
||||
|
||||
private float _lastTargetChangeTime;
|
||||
|
||||
private long _lastTargetChangeValue;
|
||||
|
||||
public long currentValue { get; set; }
|
||||
|
||||
public void Init(long value)
|
||||
{
|
||||
targetValue = value;
|
||||
SetCurrentValue(value);
|
||||
}
|
||||
|
||||
public void SetTargetValue(long value)
|
||||
{
|
||||
if (targetValue == value)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (animator != null && animator.gameObject.activeSelf)
|
||||
{
|
||||
if (value > targetValue)
|
||||
{
|
||||
animator.ResetTrigger("Decrement");
|
||||
animator.SetTrigger("Increment");
|
||||
}
|
||||
else
|
||||
{
|
||||
animator.ResetTrigger("Increment");
|
||||
animator.SetTrigger("Decrement");
|
||||
}
|
||||
}
|
||||
_lastTargetChangeTime = Time.unscaledTime;
|
||||
_lastTargetChangeValue = currentValue;
|
||||
targetValue = value;
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (currentValue == targetValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
float t = (Time.unscaledTime - _lastTargetChangeTime - delay) / incDuration;
|
||||
if (t < 0f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (t >= 1f)
|
||||
{
|
||||
SetCurrentValue(targetValue);
|
||||
return;
|
||||
}
|
||||
SetCurrentValue((long)Mathf.Lerp(_lastTargetChangeValue, targetValue, t));
|
||||
}
|
||||
|
||||
private void SetCurrentValue(long value)
|
||||
{
|
||||
currentValue = value;
|
||||
string display;
|
||||
if (string.IsNullOrEmpty(strFormat))
|
||||
{
|
||||
display = value.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
string format = (localized ? LocalizationUtils.Localize(LocalizationManager.Instance.CurrentLocale, strFormat) : strFormat);
|
||||
display = string.Format(format, value);
|
||||
}
|
||||
if (text != null)
|
||||
{
|
||||
text.text = display;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user