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; } } } }