chore: initial commit

This commit is contained in:
2026-05-08 11:04:00 +08:00
commit f55d2a57c3
6278 changed files with 866081 additions and 0 deletions

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