Ejemplo n.º 1
0
    public override IEnumerator Attack()
    {
        if (PlayerAI.isAttacking)
        {
            yield break;
        }
        PlayerAI.isAttacking = true;
        animator.SetTrigger("Attack");
        #region Calculate/Set Attack Direction
        Vector2 attackDir = SetAttackRotation();
        Vector2 knockback = weaponItem.knockback;
        if (attackDir.y > 0.5)
        {
            knockback.Set(knockback.y, knockback.x);
        }
        else if (attackDir.y < -0.5)
        {
            knockback.Set(knockback.y, -knockback.x);
        }
        if (attackDir.x != 1)
        {
            knockback.Set(-knockback.x, knockback.y);
        }
        #endregion
        yield return(new WaitForSeconds(weaponItem.attackTime / 2));

        #region Hit enemies in Hitbox
        Collider2D[] objectsToDamage = Physics2D.OverlapCircleAll(PlayerAI.attackPos.position, weaponItem.range, attackLayerMask);
        int          enemiesHit      = 0;
        foreach (Collider2D collider2D in objectsToDamage)
        {
            IDamageable iDamageable = collider2D.gameObject.GetComponent <IDamageable>();
            if (iDamageable != null)
            {
                iDamageable.TakeDamage(weaponItem.damage, knockback, weaponItem.damageType);
                enemiesHit++;
            }
        }
        if (enemiesHit > 0)
        {
            Vector2 selfKnockback = new Vector2(-knockback.x, -knockback.y) * 0.4f;
            if (attackDir.y < -0.5)
            {
                selfKnockback.Set(selfKnockback.x, selfKnockback.y * 4);
            }
            PlayerAI.Knockback(selfKnockback, 0.125f);
        }
        #endregion
        yield return(new WaitForSeconds(weaponItem.attackTime / 2));

        PlayerAI.isAttacking             = false;
        PlayerAI.attackRotation.rotation = Quaternion.identity;
    }