public IEnumerator RegenerateProcess(RegenirationParam regenerationParam)
        {
            bool waitBeforeStart = true;
            bool playRegenerate  = false;

            regenerateProcessCoroutineIsRunning = true;

            while (true)
            {
                while (waitBeforeStart)
                {
                    float lastHealth = health;
                    if (!IsAlive)
                    {
                        yield break;
                    }
                    yield return(new WaitForSeconds(regenerationParam.time));

                    if (lastHealth == health)
                    {
                        waitBeforeStart = false;
                        playRegenerate  = true;
                        break;
                    }
                }

                while (playRegenerate)
                {
                    if (!IsAlive)
                    {
                        yield break;
                    }
                    health += regenerationParam.value;
                    float lastHealth = health;
                    yield return(new WaitForSeconds(regenerationParam.interval));

                    if (health >= maxHealth)
                    {
                        health = maxHealth;
                        regenerateProcessCoroutineIsRunning = false;
                        yield break;
                    }
                    else if (lastHealth != health)
                    {
                        waitBeforeStart = true;
                        playRegenerate  = false;
                        break;
                    }
                }
            }
        }
        public IEnumerator RegenerateProcess(RegenirationParam regenerationParam)
        {
            bool waitBeforeStart = true;
            bool playRegenerate  = false;

            while (true)
            {
                //First thread
                while (waitBeforeStart)
                {
                    float lastHealth = health;
                    yield return(new WaitForSeconds(regenerationParam.time));

                    if (lastHealth == health)
                    {
                        waitBeforeStart = false;
                        playRegenerate  = true;
                        break;
                    }
                }

                //Second thread
                while (playRegenerate)
                {
                    health += regenerationParam.value;
                    float lastHealth = health;
                    yield return(new WaitForSeconds(regenerationParam.interval));

                    if (health == maxHealth)
                    {
                        onceRegeneration = false;
                        yield break;
                    }
                    else if (lastHealth != health)
                    {
                        waitBeforeStart = true;
                        playRegenerate  = false;
                        break;
                    }
                }
            }
        }