using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public struct BufferedInput
{
    public BufferedInput( float bufferTime )
    {
        _bufferTime = bufferTime;
        _value = false;
        _timeSincePress = 0f;
        _timeSinceRelease = 0f;
    }
    
    private float _bufferTime;
    private bool _value;
    private float _timeSinceRelease;
    private float _timeSincePress;

    public void Set( bool newValue )
    {
        if ( newValue && !_value )
        {
            _timeSincePress = 0f;
            _timeSinceRelease = 0f;
        }

        _value = newValue;
    }

    public void Update( float deltaTime )
    {
        if ( !_value )
        {
            _timeSinceRelease += deltaTime;
        }
        
        _timeSincePress += deltaTime;
    }

    public bool GetValue()
    {
        return _value || _timeSinceRelease <= _bufferTime;
    }

    public bool GetDown()
    {
        return _value && _timeSincePress <= _bufferTime;
    }

    public bool GetRelease()
    {
        return !_value && _timeSinceRelease < _bufferTime;
    }
}
