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