using UnityEngine;
using BaseGames.Combat;
namespace BaseGames.Player
{
///
/// 玩家战斗组件(Phase 1 实现)。
/// 架构 05_PlayerModule §5:HitBox 直接挂在 Player Prefab 子节点上,不经过 WeaponInstance。
/// 节点:[HitBoxGround]、[HitBoxUp]、[HitBoxDown]、[HitBoxAir]。
///
public class PlayerCombat : MonoBehaviour
{
[SerializeField] private WeaponManager _weaponManager;
[Header("HitBox(Player Prefab 子节点)")]
[SerializeField] private HitBox _hitBoxGround;
[SerializeField] private HitBox _hitBoxUp;
[SerializeField] private HitBox _hitBoxDown;
[SerializeField] private HitBox _hitBoxAir;
// ── HitBox 激活(由 AttackState / Animancer 帧事件调用)─────────────
public void EnableWeaponHitBox(AttackDirection dir)
{
var source = _weaponManager != null
? _weaponManager.ActiveWeapon?.GetSourceByDir(dir)
: null;
GetHitBox(dir)?.Activate(source, transform);
}
public void DisableWeaponHitBox(AttackDirection dir)
=> GetHitBox(dir)?.Deactivate();
public void DisableAllWeaponHitBoxes()
{
_hitBoxGround?.Deactivate();
_hitBoxUp?.Deactivate();
_hitBoxDown?.Deactivate();
_hitBoxAir?.Deactivate();
}
/// 命中回调(Phase 2 §2.3 补全:增加灵力)。
internal void OnHitConfirmed(DamageInfo info) { /* Phase 2:增加灵力 */ }
private HitBox GetHitBox(AttackDirection dir) => dir switch
{
AttackDirection.Ground => _hitBoxGround,
AttackDirection.Up => _hitBoxUp,
AttackDirection.Down => _hitBoxDown,
AttackDirection.Air => _hitBoxAir,
_ => null,
};
}
}