Exemplo n.º 1
0
    public void GetDamage(int damage, Character from)
    {
        DamageEventArgs damageargs = new DamageEventArgs(damage, from);

        OnGetDamage?.Invoke(this, damageargs);

        if (character.GetShield() != 0)
        {
            int             canShield  = Mathf.Min(damageargs.damage, character.GetShield());
            DamageEventArgs shieldArgs = new DamageEventArgs(canShield, from);
            OnBlockDamage?.Invoke(this, shieldArgs);
            character.ChangeShield(-shieldArgs.damage);
            damageargs.damage -= shieldArgs.damage;

            if (damageargs.damage <= 0)
            {
                GetComponent <AudioSource>().clip = shieldSound;
                GetComponent <AudioSource>().Play();
            }
        }

        if (damageargs.damage > 0)
        {
            DamageEventArgs args = new DamageEventArgs(damageargs.damage, from);
            OnGetDamaged?.Invoke(this, args);
            if (args.damage > 0)
            {
                character.ChangeHealthPoint(-args.damage);
            }

            GetComponent <AudioSource>().clip = damageSound;
            GetComponent <AudioSource>().Play();
        }
    }
Exemplo n.º 2
0
        /// <summary>
        /// Find the direction hit vector and send it to the Damage Behavior with DamageValues
        /// </summary>
        public virtual void getDamaged(DamageValues DV)
        {
            if (Death)
            {
                return;                                             //skip if is Death.
            }
            if (isTakingDamage)
            {
                return;                                             //If is already taking damage skip...
            }
            if (inmune)
            {
                return;                                             //skip if is imnune.
            }
            float damageTaken = DV.Amount - defense;

            OnGetDamaged.Invoke(damageTaken);
            life = life - damageTaken;                              //Remove some life

            actionID = -1;                                          //If it was doing an action Stop!;

            if (life > 0)                                           //If I have some life left play the damage Animation
            {
                damaged = true;                                     //Activate the damage so it can be seted on the Animator
                StartCoroutine(IsTakingDamageTime(damageDelay));    //Prevent to take other hit after a time.

                _hitDirection = DV.Direction;
            }
            else
            {
                Death = true;
            }
        }
Exemplo n.º 3
0
 public void GetPenDamage(int damage, Character from)
 {
     if (damage > 0)
     {
         DamageEventArgs args = new DamageEventArgs(damage, from);
         OnGetDamaged?.Invoke(this, args);
         if (args.damage > 0)
         {
             character.ChangeHealthPoint(-args.damage);
         }
     }
 }