void EndRegen()
 {
     if (curRegenEffect != null)
     {
         curRegenEffect.End();
         curRegenEffect = null;
     }
     waitTimer = regenWait;
     regening  = false;
 }
    void Update()
    {
        if (state == State.Alive)
        {
            if (!regening)
            {
                if (health < maxHealth)
                {
                    if (waitTimer <= 0f)
                    {
                        // start regening
                        StartRegen();
                    }
                    else
                    {
                        // incriment timer
                        waitTimer -= Time.deltaTime;
                    }
                }
            }
            else
            {
                health += regenSpeed * Time.deltaTime;

                if (smokeEffect != null)
                {
                    if (healthPercentage > 0.5f)
                    {
                        smokeEffect.End();
                    }
                }

                if (fireEffect != null)
                {
                    if (healthPercentage > 0.25f)
                    {
                        fireEffect.End();
                    }
                }

                if (health > maxHealth)
                {
                    EndRegen();
                    health = maxHealth;
                }
            }
        }

        if (isPlayer)
        {
            return;
        }

        if (state == State.Dying)
        {
            dyingTimer -= Time.deltaTime;
            if (dyingTimer <= 0f)
            {
                Decay();
            }
        }

        if (state == State.Decaying)
        {
            decayTimer -= Time.deltaTime;
            if (decayTimer <= 0f)
            {
                Destroy(gameObject);
            }
        }
    }