54 lines
1.9 KiB
C#
54 lines
1.9 KiB
C#
using UnityEngine;
|
||
using BaseGames.Combat;
|
||
|
||
namespace BaseGames.Player
|
||
{
|
||
/// <summary>
|
||
/// 玩家战斗组件(Phase 1 实现)。
|
||
/// 架构 05_PlayerModule §5:HitBox 直接挂在 Player Prefab 子节点上,不经过 WeaponInstance。
|
||
/// 节点:[HitBoxGround]、[HitBoxUp]、[HitBoxDown]、[HitBoxAir]。
|
||
/// </summary>
|
||
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();
|
||
}
|
||
|
||
/// <summary>命中回调(Phase 2 §2.3 补全:增加灵力)。</summary>
|
||
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,
|
||
};
|
||
}
|
||
}
|