private void HealthContainer_OnReceiveDamage(object sender, OnHealthChangedArgs e)
 {
     //if (!audioSources[23].isPlaying && !audioSources[24].isPlaying && !audioSources[25].isPlaying && !audioSources[26].isPlaying)
     //{
     //    System.Random rand = new System.Random();
     //        audioSources[rand.Next(23,27)].Play();
     //}
 }
    public virtual void Heal(GameObject healer, float addHealth, GameObject statusEffect)
    {
        OnHealthChangedArgs args = new OnHealthChangedArgs(healer, addHealth);

        if (OnReceiveHealth != null)
        {
            OnReceiveHealth(this, args);
        }

        if (!args.Cancel)
        {
            health += args.ChangeValue;
            if (health > maxHealth)
            {
                health = maxHealth;
            }
        }
    }
 private void HealthContainer_OnReceiveHealth(object sender, OnHealthChangedArgs e)
 {
     //Stun, slow, gift
 }
    public virtual void DoDamage(GameObject attacker, float damage, GameObject statusEffect)
    {
        if (!isImmortal)
        {
            OnHealthChangedArgs args = new OnHealthChangedArgs(attacker, damage);
            if (OnReceiveDamage != null)
            {
                OnReceiveDamage(this, args);
            }

            if (!args.Cancel && args.ChangeValue != 0)
            {
                if (statusEffect != null && gameObject != null)
                {
                    GameObject tempStatusEffect = Instantiate(statusEffect, transform);
                    if (tempStatusEffect != null)
                    {
                        StatusEffect statusScript = tempStatusEffect.GetComponent <StatusEffect>();
                        if (statusScript != null)
                        {
                            StatusEffectArgs statusArgs = new StatusEffectArgs(statusScript, tempStatusEffect);
                            if (OnNewStatusEffect != null)
                            {
                                OnNewStatusEffect(this, statusArgs);
                            }

                            if (!statusArgs.Cancel)
                            {
                                statusScript.Activate(gameObject);
                            }
                        }
                    }
                }

                List <GameObject> AvailablePlayer = new List <GameObject>(GameObject.FindGameObjectsWithTag("Player"));

                if (gameObject.tag == "Enemy")
                {
                    health -= args.ChangeValue * (float)Math.Pow(groupDamage, (double)AvailablePlayer.Count);   //TODO: Abhängig von Spieleranzahl
                }
                else
                {
                    health -= args.ChangeValue;
                }

                if (health <= 0)
                {
                    health = 0;
                    if (OnDeath != null)
                    {
                        OnDeath(this, EventArgs.Empty);
                    }

                    if (audioSource != null && DeathSound != null)
                    {
                        audioSource.clip = DeathSound;
                        audioSource.Play();
                    }
                }
                else
                {
                    if (audioSource != null && DamageSound != null && !audioSource.isPlaying)
                    {
                        audioSource.clip = DamageSound;
                        audioSource.Play();
                    }
                }
            }
        }
    }