protected virtual void DoDamage(Collider2D collider)
    {
        IHealth objectWithHealth = collider.gameObject.GetComponent <IHealth>();

        if (objectWithHealth != null)
        {
            ready = false;
            if (power > 0)
            {
                StartCoroutine(PlayAnimation());
                Vector2 normalized = -(transform.position - collider.gameObject.transform.position).normalized;
                if (objectWithHealth.ignoreBulletImpulse == false)
                {
                    objectWithHealth.PushBack(normalized, (float)power);
                }
                if (flameDamage > 0)
                {
                    objectWithHealth.EffectDamage(flameDamage, EffectType.Flame);
                }
                objectWithHealth.TakeDamage(damage);
                DestroyBullet();
            }
            else
            {
                if (flameDamage > 0)
                {
                    objectWithHealth.EffectDamage(flameDamage, EffectType.Flame);
                }
                objectWithHealth.TakeDamage(damage);
                StartCoroutine(PlayAnimationAndDestroy());
            }
        }
        else
        {
            ready = true;
        }
    }