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(); } }
/// <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; } }
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); } } }