public virtual void Burn() { burning = true; InvokeRepeating(nameof(BurnEffect), burnEffectTick, 0.5f); if (hasBurnFX) { burnFX.SetActive(true); } else { burnFX = Instantiate(Statics.instance.fireFX, transform.position + Vector3.back * 0.1f, Quaternion.identity, transform); } OnBurn?.Invoke(); // for test purposes //GetComponent<SpriteRenderer>().color = Color.red; }
/// <summary> /// Burn the damageable across time. /// </summary> /// <param name="_damagesMin">Minimum damages of the flames.</param> /// <param name="_damagesMax">Maximum damages of the flames.</param> /// <param name="_duration">Duration of the burn.</param /// <returns>IEnumerator, baby.</returns> protected virtual IEnumerator Burning(int _damagesMin, int _damagesMax, float _duration, int _id) { _damagesMax++; while (_duration > 0) { float _wait = Random.Range(1f, 2.5f); yield return(new WaitForSeconds(_wait)); int _damages = Random.Range(_damagesMin, _damagesMax); TakeDamage(_damages); _duration -= _wait; OnBurn?.Invoke(_damages); } burningCoroutines[_id] = null; burningCoroutines.Remove(_id); if (burningCoroutines.Count == 0) { StopBurning(); } }
public void EnableBurn() { OnBurn?.Invoke(); _sprite.color = Color.red; _particleSystem.Play(); }