chore: initial commit
This commit is contained in:
73
Assets/Scripts/Input/InputBuffer.cs
Normal file
73
Assets/Scripts/Input/InputBuffer.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BaseGames.Input
|
||||
{
|
||||
/// <summary>
|
||||
/// 帧级输入缓冲。持续 _bufferDuration 秒,允许玩家提前输入跳跃/攻击/冲刺。
|
||||
/// 须与 PlayerController 在同一 GameObject 上。
|
||||
/// </summary>
|
||||
public class InputBuffer : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private InputReaderSO _inputReader;
|
||||
[SerializeField] private float _jumpBufferDuration = 0.15f;
|
||||
[SerializeField] private float _attackBufferDuration = 0.12f;
|
||||
[SerializeField] private float _dashBufferDuration = 0.10f;
|
||||
|
||||
private float _jumpBuffer;
|
||||
private float _attackBuffer;
|
||||
private float _dashBuffer;
|
||||
|
||||
// ── Named handlers to allow proper unsubscription ─────────────────────
|
||||
private void HandleJumpStarted() => _jumpBuffer = _jumpBufferDuration;
|
||||
private void HandleAttackStarted() => _attackBuffer = _attackBufferDuration;
|
||||
private void HandleDashStarted() => _dashBuffer = _dashBufferDuration;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (_inputReader == null) return;
|
||||
_inputReader.JumpStartedEvent += HandleJumpStarted;
|
||||
_inputReader.AttackEvent += HandleAttackStarted;
|
||||
_inputReader.DashEvent += HandleDashStarted;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (_inputReader == null) return;
|
||||
_inputReader.JumpStartedEvent -= HandleJumpStarted;
|
||||
_inputReader.AttackEvent -= HandleAttackStarted;
|
||||
_inputReader.DashEvent -= HandleDashStarted;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
float dt = Time.deltaTime;
|
||||
_jumpBuffer = Mathf.Max(0f, _jumpBuffer - dt);
|
||||
_attackBuffer = Mathf.Max(0f, _attackBuffer - dt);
|
||||
_dashBuffer = Mathf.Max(0f, _dashBuffer - dt);
|
||||
}
|
||||
|
||||
/// <summary>消耗跳跃缓冲(读取并清空)。</summary>
|
||||
public bool ConsumeJump()
|
||||
{
|
||||
if (_jumpBuffer <= 0f) return false;
|
||||
_jumpBuffer = 0f;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>消耗攻击缓冲(读取并清空)。</summary>
|
||||
public bool ConsumeAttack()
|
||||
{
|
||||
if (_attackBuffer <= 0f) return false;
|
||||
_attackBuffer = 0f;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>消耗冲刺缓冲(读取并清空)。</summary>
|
||||
public bool ConsumeDash()
|
||||
{
|
||||
if (_dashBuffer <= 0f) return false;
|
||||
_dashBuffer = 0f;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user