57 lines
916 B
C#
57 lines
916 B
C#
using System;
|
|
using Obvious.Soap;
|
|
using UnityEngine;
|
|
|
|
public class HoldAction : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private FloatVariable _ActionVariable;
|
|
|
|
public float HoldTimeMultiplier = 1f;
|
|
|
|
private bool _IsHolding;
|
|
|
|
public float CurrentValue => _ActionVariable.Value;
|
|
|
|
public event Action OnComplete;
|
|
|
|
public void Hold()
|
|
{
|
|
_IsHolding = true;
|
|
}
|
|
|
|
public bool IsZero()
|
|
{
|
|
if (!_IsHolding)
|
|
{
|
|
return _ActionVariable.Value == 0f;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void ResetHold()
|
|
{
|
|
_ActionVariable.Value = 0f;
|
|
_IsHolding = false;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
float value = _ActionVariable.Value;
|
|
if (_IsHolding)
|
|
{
|
|
_ActionVariable.Value += Time.deltaTime * HoldTimeMultiplier;
|
|
if (value >= 1f)
|
|
{
|
|
this.OnComplete?.Invoke();
|
|
}
|
|
_IsHolding = false;
|
|
}
|
|
else
|
|
{
|
|
_ActionVariable.Value -= Time.deltaTime * HoldTimeMultiplier;
|
|
}
|
|
value = Mathf.Clamp(value, 0f, 1f);
|
|
}
|
|
}
|