revival/game/Assets/Scripts/Input/BufferedInput.cs

71 lines
1.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public struct BufferedInput
{
public BufferedInput( float bufferTime )
{
_bufferTime = bufferTime;
_value = false;
_timeSincePress = Mathf.Infinity;
_timeSinceRelease = Mathf.Infinity;
}
private float _bufferTime;
private bool _value;
private float _timeSinceRelease;
private float _timeSincePress;
public void Set( bool newValue )
{
if ( newValue && !_value )
{
_timeSincePress = 0f;
}
else if ( !newValue && _value )
{
_timeSinceRelease = 0f;
}
_value = newValue;
}
public void Update( float deltaTime )
{
_timeSincePress += deltaTime;
_timeSinceRelease += deltaTime;
}
public bool GetValue()
{
return _value || _timeSinceRelease <= _bufferTime;
}
public bool GetRawValue()
{
return _value;
}
public bool GetDown( bool consume = true )
{
bool value = _timeSincePress <= _bufferTime;
if ( consume && value )
_timeSincePress = Mathf.Infinity;
return value;
}
public bool GetRelease( bool consume = true )
{
bool value = _timeSinceRelease <= _bufferTime;
if ( consume && value )
_timeSinceRelease = Mathf.Infinity;
return value;
}
}