/// <summary> /// 尝试攻击另一单位,damage就是攻击力 /// </summary> /// <param name="self"></param> /// <param name="other"></param> /// <param name="damage"></param> /// <returns>有效攻击返回True,否则返回False</returns> public static bool TryAttackSimple(this AbstractPerson self, AbstractPerson other) { var selfAtk = self as ITakeDamageablePerson <AbstractPerson>; var otherAtk = other as ITakeDamageablePerson <AbstractPerson>; if (null == self) { throw new Exception("自身角色为空?"); } if (null == other) { return(false); } if (!self.IsAlive || !other.IsAlive) { return(false); } if (null == selfAtk || null == otherAtk) { return(false); } selfAtk.OnCauseDamage(other, self.Attack); otherAtk.OnTakeDamage(self, self.Attack); return(true); }
/// <summary> /// 尝试攻击另一单位 /// </summary> /// <param name="self">自身角色</param> /// <param name="other">攻击目标</param> /// <param name="damageScale">攻击缩放,比如技能可能造成200%伤害</param> /// <returns>返回是否进行了有效攻击</returns> /// <exception cref="Exception">self为空</exception> public static bool TryAttack(this AbstractPerson self, AbstractPerson other, float?damageScale = null) { var ds = damageScale ?? 1.0f; var selfAtk = self as ITakeDamageablePerson <AbstractPerson, BasicDamage>; var otherAtk = other as ITakeDamageablePerson <AbstractPerson, BasicDamage>; if (null == self) { throw new Exception("自身角色为空?"); } if (null == other) { return(false); } if (!self.IsAlive || !other.IsAlive) { return(false); } if (null == selfAtk || null == otherAtk) { return(false); } var damage = self.CalculateDamage(ds, other); selfAtk.OnCauseDamage(other, damage); return(true); }
public virtual float OnCauseDamage(AbstractPerson causeDamageTo, BasicDamage damage) { var realDamage = causeDamageTo.OnTakeDamage(this, damage); if (realDamage > 0) { onCauseDamage?.Invoke(causeDamageTo, Mathf.RoundToInt(realDamage)); } return(realDamage); // Debug.Log($"{CharacterName}对{causeDamageTo.CharacterName}造成{realDamage}伤害"); }
public virtual void OnTakeDamage(AbstractPerson takeDamageFrom, int damage) { Debug.Log($"{CharacterName}收到来自{takeDamageFrom.CharacterName}的{damage}伤害"); onTakeDamage?.Invoke(takeDamageFrom, damage); _hp -= damage; if (_hp <= 0) { Debug.Log(CharacterName + "该死!"); Kill(); } }
public virtual void OnTakeDamage(AbstractPerson takeDamageFrom, int damage) { onTakeDamage?.Invoke(takeDamageFrom, damage); Hp -= damage; // Debug.Log($"{CharacterName}收到来自{takeDamageFrom.CharacterName}的{damage}伤害,当前血量:{Hp}"); if (Hp <= 0) { // Debug.Log(CharacterName+"该死!"); Hp = 0; Kill(); } }
public virtual float OnTakeDamage(AbstractPerson takeDamageFrom, BasicDamage damage) { var finalDamage = Mathf.RoundToInt(damage.Damage); onTakeDamage?.Invoke(takeDamageFrom, finalDamage); Hp -= finalDamage; // Debug.Log($"{CharacterName}收到来自{takeDamageFrom.CharacterName}的{finalDamage}伤害,当前血量:{Hp}"); var realDamage = 0f; if (Hp <= 0) { realDamage = Hp; // Debug.Log(CharacterName+"该死!"); Hp = 0; LogicKill(); } else { realDamage = finalDamage; } return(realDamage); }
public virtual void OnCauseDamage(AbstractPerson causeDamageTo, int damage) { onCauseDamage?.Invoke(causeDamageTo, damage); // Debug.Log($"{CharacterName}对{causeDamageTo.CharacterName}造成{damage}伤害"); }
public virtual void InitController(AbstractPerson self) { this.selfPerson = self; }
public virtual BasicDamage CalculateDamage(float skillDamageScale, AbstractPerson receiver) { return(new BasicDamage(this, skillDamageScale, receiver)); }