Exemplo n.º 1
0
Arquivo: Burnable.cs Projeto: mz000/QQ
    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;
    }
Exemplo n.º 2
0
    /// <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();
        }
    }
Exemplo n.º 3
0
 public void EnableBurn()
 {
     OnBurn?.Invoke();
     _sprite.color = Color.red;
     _particleSystem.Play();
 }