public void TakeDamage(float damage, DamageType type)
    {
        if (state == State.Alive)
        {
            if (type == immunity)
            {
                return;
            }

            if (onHit != null)
            {
                onHit.Invoke(damage);
            }

            health -= (damage / Mathf.Max(1f, resistance));

            EndRegen();

            if (health <= 0f)
            {
                Die();
                hasKnockback = true;
                return;
            }
            else
            {
                StartCoroutine(HitAnimation());

                if (type == DamageType.Explosions && canFallOver && onKnockedOver != null)
                {
                    onKnockedOver.Invoke();
                }
            }

            if (!smokes)
            {
                return;
            }

            if (smokeEffect == null)
            {
                if (healthPercentage <= 0.5f)
                {
                    smokeEffect = EffectFollow.Create("SmokeEffect", smokeCenter);
                }
            }

            if (fireEffect == null)
            {
                if (healthPercentage <= 0.25f)
                {
                    fireEffect = EffectFollow.Create("FireEffect", smokeCenter);
                }
            }
        }
    }
 void StartRegen()
 {
     curRegenEffect = EffectFollow.Create("RegenEffect", transform);
     regening       = true;
 }