protected override void InflictDamage(Actor victim, Actor firedBy, HitShapeInfo hitshapeInfo, IEnumerable <int> damageModifiers) { var healthInfo = victim.Info.TraitInfo <HealthInfo>(); var damage = Util.ApplyPercentageModifiers(healthInfo.HP, damageModifiers.Append(Damage, DamageVersus(victim, hitshapeInfo))); victim.InflictDamage(firedBy, new Damage(damage, DamageTypes)); }
protected override void InflictDamage(Actor victim, Actor firedBy, HitShapeInfo hitshapeInfo, IEnumerable <int> damageModifiers) { var warpable = victim.TraitOrDefault <Warpable>(); if (warpable == null) { return; } var damage = Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(DamageVersus(victim, hitshapeInfo))); warpable.AddDamage(damage, firedBy); }
public int DamageVersus(Actor victim, HitShapeInfo shapeInfo) { // If no Versus values are defined, DamageVersus would return 100 anyway, so we might as well do that early. if (Versus.Count == 0) { return(100); } var armor = victim.TraitsImplementing <Armor>() .Where(a => !a.IsTraitDisabled && a.Info.Type != null && Versus.ContainsKey(a.Info.Type) && (shapeInfo.ArmorTypes == default(BitSet <ArmorType>) || shapeInfo.ArmorTypes.Contains(a.Info.Type))) .Select(a => Versus[a.Info.Type]); return(Util.ApplyPercentageModifiers(100, armor)); }
protected virtual void InflictDamage(Actor victim, Actor firedBy, HitShapeInfo hitshapeInfo, IEnumerable <int> damageModifiers) { var damage = Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(DamageVersus(victim, hitshapeInfo))); victim.InflictDamage(firedBy, new Damage(damage, DamageTypes)); }