using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class playerAttack : MonoBehaviour
{
    public CapsuleCollider attackHitbox;
    public InputAction attackAction;
    public AudioSource audioSource;
    public AudioClip[] attackClips;
    private Animator weaponAnimator;
    private float weaponCooldown = 0.4f;
    public bool isAttacking;
    private bool queuedAttack;
    private string lastAnimationPlayed;
    private HashSet<healthController> enemiesHit = new();

    void Start()
    {
        // 绑定键盘和鼠标事件
        attackHitbox.enabled = false;
        attackAction = new InputAction("Attack");
        attackAction.AddBinding("<Mouse>/leftButton");
        attackAction.Enable();

        // 获取武器和其动画
        Transform equippedWeapon = transform.Find("Main Camera").Find("Sword10_Brown");
        weaponAnimator = equippedWeapon.GetComponent<Animator>();
    }

    void Update()
    {
        // 检测攻击按键
        if (attackAction.WasPressedThisFrame())
        {
            // 清空之前的攻击记录
            enemiesHit.Clear();

            // 检测是否正在攻击
            if (!isAttacking)
            {
                // 开始新的攻击
                StartCoroutine(RightToLeftAttack());
            }
            else
            {
                // 如果正在攻击,则设置队列攻击
                queuedAttack = true;
            }
        }
    }

    System.Collections.IEnumerator RightToLeftAttack()
    {
        // 设置攻击动画
        weaponAnimator.SetTrigger("RightToLeft");
        lastAnimationPlayed = "RightToLeft";
        audioSource.PlayOneShot(attackClips[Random.Range(0, attackClips.Length)]);

        // 开始攻击
        isAttacking = true;
        attackHitbox.enabled = true;

        // 等待攻击完成
        yield return new WaitForSeconds(weaponCooldown);

        // 检测队列攻击
        if (queuedAttack)
        {
            // 取消队列攻击
            queuedAttack = false;

            // 开始新的攻击
            StartCoroutine(LeftToRightAttack());
        }
        else
        {
            // 结束攻击
            isAttacking = false;
            attackHitbox.enabled = false;
            weaponAnimator.SetTrigger("RightToIdle");
        }
    }

    public bool RegisterHit(healthController enemyHealthController)
    {
        return enemiesHit.Add(enemyHealthController);
    }

    public IEnumerator LeftToRightAttack()
    {
        // 设置攻击动画
        weaponAnimator.SetTrigger("LeftToRight");
        lastAnimationPlayed = "LeftToRight";
        audioSource.PlayOneShot(attackClips[Random.Range(0, attackClips.Length)]);

        // 开始攻击
        isAttacking = true;
        attackHitbox.enabled = true;

        // 等待攻击完成
        yield return new WaitForSeconds(weaponCooldown);

        // 结束攻击
        isAttacking = false;
        attackHitbox.enabled = false;
        weaponAnimator.SetTrigger("LeftToIdle");
    }
}

这是修复后的代码,添加了队列攻击的功能,当玩家点击攻击按钮时,如果正在攻击,则设置队列攻击,否则开始新的攻击。如果队列攻击被激活,则开始新的攻击并取消队列攻击。