public void PlayerStagger(PlayerAttack.Attack attack) //PlayerStagger for all player attacks
 {
     if (anim.GetCurrentAnimatorStateInfo(0).IsName("Grabbing Ledge"))
     {
         //Undo code for ledge grab
         anim.SetBool("CanLandCancel", true);
         rb.constraints = RigidbodyConstraints2D.FreezeRotation;
     }
     Debug.Log(attack.attackDamage + " Damage Dealt by " + attack.name);
     GameManager.Instance.PlayerDamage(playerNum, attack.attackDamage);
     rb.AddForceAtPosition(CalculateKnockback(attack.knockbackDirection, attack.knockbackAmount), attack.hitbox.transform.position);
     anim.SetTrigger("Stagger");
     if (attack.hitbox.tag.Equals("Projectile"))
     {
         lastHit = attack.hitbox.GetComponent <ProjectileScript>().shooter.GetComponent <Player>().playerNum;
     }
     else if (attack.hitbox.tag.Equals("Hazard"))
     {
         //Do nothing with the last hit variable
     }
     else
     {
         lastHit = attack.hitbox.transform.parent.gameObject.GetComponent <Player>().playerNum;
     }
 }
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.tag == "Attack")
        {
            PlayerAttack        attacker = col.transform.parent.GetComponent <PlayerAttack>();
            PlayerAttack.Attack attack;
            if (col.name.Equals("Bair"))
            {
                attack = attacker.Bair;
            }
            else if (col.name.Equals("Fair"))
            {
                attack = attacker.Fair;
            }
            else if (col.name.Equals("Uair"))
            {
                attack = attacker.Uair;
            }
            else if (col.name.Equals("Dair"))
            {
                attack = attacker.Dair;
            }
            else if (col.name.Equals("Nair"))
            {
                attack = attacker.Nair;
            }
            else if (col.name.Equals("Ftilt"))
            {
                attack = attacker.Ftilt;
            }
            else if (col.name.Equals("Utilt"))
            {
                attack = attacker.Utilt;
            }
            else if (col.name.Equals("Dtilt"))
            {
                attack = attacker.Dtilt;
            }
            else if (col.name.Equals("Jab"))
            {
                attack = attacker.Jab;
            }
            else
            {
                Debug.Log("UNKNOWN ATTACK: " + col.name);
                Debug.Log("Defaulting to attacker's jab");
                attack = attacker.Jab;
            }
            //If attacking player is flipped, flip attack knockback direction as well
            if (!col.transform.parent.GetComponent <Player>().facingRight)
            {
                attack.knockbackDirection = new Vector2(attack.knockbackDirection.x * -1, attack.knockbackDirection.y);
            }

            p.PlayerStagger(attack);
        }

        if (col.tag == "Projectile")
        {
            PlayerAttack        attacker = col.GetComponent <ProjectileScript>().shooter.GetComponent <PlayerAttack>();
            PlayerAttack.Attack attack   = new PlayerAttack.Attack();
            attack.hitbox             = col.gameObject;
            attack.attackDamage       = attacker.projectileDamage;
            attack.knockbackAmount    = attacker.projectileKnockback;
            attack.knockbackDirection = col.GetComponent <Rigidbody2D>().velocity.normalized;
            p.PlayerStagger(attack);
        }

        if (col.tag == "Grab")
        {
            Debug.Log("Player Grabbed!");
            this.transform.parent.parent = col.transform.parent;
            col.transform.parent.GetComponent <Animator>().SetTrigger("Grab Success");
            col.transform.parent.GetComponent <Animator>().ResetTrigger("Grab Release");
            anim.SetTrigger("Grabbed");
            p.rb.simulated = false;
            Invoke("EscapeGrab", 5); //HOW DO CANCEL INVOKE?
            return;
        }
    }