protected sealed override void PrepareProtoStaticWorldObject() { base.PrepareProtoStaticWorldObject(); this.PrepareProtoObjectExplosive(out var explosionPreset); this.ExplosionPreset = explosionPreset ?? throw new Exception("No explosion preset provided"); // prepare damage description for characters { var damageDistribution = new DamageDistribution(); this.PrepareDamageDescriptionCharacters( out var damageValue, out var armorPiercingCoef, out var finalDamageMultiplier, damageDistribution); this.damageDescriptionCharacters = new DamageDescription( damageValue, armorPiercingCoef, finalDamageMultiplier, rangeMax: this.DamageRadius, damageDistribution); } // prepare damage properties for structures { this.PrepareDamageDescriptionStructures( out var damageValue, out var defencePenetrationCoef); this.StructureDamage = damageValue; this.StructureDefensePenetrationCoef = MathHelper.Clamp(defencePenetrationCoef, 0, 1); } }
public ViewModel(Attacker attacker, DamageDistribution damageDistribution) { _damageDistribution = damageDistribution; _assignments = new BlockerDamageAssignments(attacker); _attacker = attacker; _totalDamageToAssign = attacker.Card.CalculateCombatDamageAmount(); _damageLeftToAssign = _totalDamageToAssign; }
protected override void PrepareDamageDescriptionCharacters( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, DamageDistribution damageDistribution) { damageValue = 120; armorPiercingCoef = 0; finalDamageMultiplier = 1; damageDistribution.Set(DamageType.Kinetic, 1); }
protected override void PrepareDamageDescriptionCharacters( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, DamageDistribution damageDistribution) { // nobody can survive this explosion damageValue = 10_000; armorPiercingCoef = 1; finalDamageMultiplier = 1; damageDistribution.Set(DamageType.Kinetic, 1); }
protected override void PrepareDamageDescriptionCharacters( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, DamageDistribution damageDistribution) { damageValue = 60; // lower damage than other grenades due to higher radius and higher final multiplier armorPiercingCoef = 0; finalDamageMultiplier = 1.25; damageDistribution.Set(DamageType.Explosion, 1.0); }
protected override void PrepareDamageDescriptionCharacters( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, DamageDistribution damageDistribution) { damageValue = 90; armorPiercingCoef = 0.2; finalDamageMultiplier = 1; damageDistribution.Set(DamageType.Explosion, 0.6) .Set(DamageType.Cold, 0.4); }
protected override void PrepareDamageDescription( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, out double rangeMax, DamageDistribution damageDistribution) { damageValue = 17; armorPiercingCoef = 0; finalDamageMultiplier = 1.2; rangeMax = 7; damageDistribution.Set(DamageType.Impact, 1); }
protected override void PrepareDamageDescription( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, out double rangeMax, DamageDistribution damageDistribution) { damageValue = 18; armorPiercingCoef = 0.5; finalDamageMultiplier = 1; rangeMax = 10; damageDistribution.Set(DamageType.Kinetic, 1); }
protected override void PrepareDamageDescription( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, out double rangeMax, DamageDistribution damageDistribution) { // default values (not used) damageValue = 0; armorPiercingCoef = 0; finalDamageMultiplier = 1.0; rangeMax = 0; }
protected override void PrepareDamageDescription( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, out double rangeMax, DamageDistribution damageDistribution) { damageValue = 12; armorPiercingCoef = 0; finalDamageMultiplier = 2; rangeMax = 9; damageDistribution.Set(DamageType.Kinetic, 0.6) .Set(DamageType.Chemical, 0.4); }
protected override void PrepareDamageDescription( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, out double rangeMax, DamageDistribution damageDistribution) { damageValue = 12; // actual damage won't be too big, due to pellets spread armorPiercingCoef = 0; finalDamageMultiplier = 5; rangeMax = 7; damageDistribution.Set(DamageType.Kinetic, 0.8) .Set(DamageType.Impact, 0.2); }
protected override void PrepareDamageDescription( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, out double rangeMax, DamageDistribution damageDistribution) { damageValue = 20; armorPiercingCoef = 0; finalDamageMultiplier = 1.5; rangeMax = 8; damageDistribution.Set(DamageType.Kinetic, 0.7) .Set(DamageType.Impact, 0.3); }
protected override void PrepareProtoWeapon( out IEnumerable <IProtoItemAmmo> compatibleAmmoProtos, ref DamageDescription overrideDamageDescription) { // no ammo used compatibleAmmoProtos = null; var damageDistribution = new DamageDistribution() .Set(DamageType.Cold, 1.0); overrideDamageDescription = new DamageDescription( damageValue: 40, armorPiercingCoef: 0.6, finalDamageMultiplier: 1.25, rangeMax: 50, damageDistribution: damageDistribution); }
public void AssignDamageToBlockers(Attacker attacker, DamageDistribution distribution) { foreach (var blocker in attacker.Blockers) { _assignedDamage.Add(new AssignedDamage( distribution[blocker], blocker.Attacker.Card, blocker.Card)); } if (attacker.HasTrample || attacker.AssignsDamageAsThoughItWasntBlocked || attacker.IsBlocked == false) { _assignedDamage.Add(new AssignedDamage( amount: attacker.Card.CalculateCombatDamageAmount() - distribution.Total, source: attacker.Card, target: attacker.Planeswalker ?? (IDamageable)Players.Defending)); } }
protected override void PrepareProtoWeapon( out IEnumerable <IProtoItemAmmo> compatibleAmmoProtos, ref DamageDescription overrideDamageDescription) { // no ammo used compatibleAmmoProtos = null; var damageDistribution = new DamageDistribution() .Set(DamageType.Impact, 0.5) .Set(DamageType.Chemical, 0.5); // uses poison or something :) overrideDamageDescription = new DamageDescription( damageValue: 10, armorPiercingCoef: 0, finalDamageMultiplier: 1, rangeMax: 1.5, damageDistribution: damageDistribution); }
protected override void PrepareProtoItem() { base.PrepareProtoItem(); var damageDistribution = new DamageDistribution(); this.PrepareDamageDescription( out var damageValue, out var armorPiercingCoef, out var finalDamageMultiplier, out var rangeMax, damageDistribution); this.DamageDescription = new DamageDescription( damageValue, armorPiercingCoef, finalDamageMultiplier, rangeMax, damageDistribution); }
protected sealed override void PrepareDamageDescription( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, out double rangeMax, DamageDistribution damageDistribution) { this.PrepareExplosionPreset(out var explosionPreset); this.ExplosionPreset = explosionPreset ?? throw new Exception("No explosion preset provided"); this.damageDescriptionForWeaponCache = new DamageDescription( damageValue: 0, armorPiercingCoef: 0, finalDamageMultiplier: 1, rangeMax: this.FireRangeMax, damageDistribution: new DamageDistribution()); // prepare damage description for characters { rangeMax = this.FireRangeMax; this.PrepareDamageDescriptionCharacters( out damageValue, out armorPiercingCoef, out finalDamageMultiplier, damageDistribution); damageValue = this.SharedPrepareStatDamageToCharacters(damageValue); } // prepare damage properties for structures { this.PrepareDamageDescriptionStructures( out var structureDamageValue, out var structureDefencePenetrationCoef); this.StructureDamage = this.SharedPrepareStatDamageToStructures(structureDamageValue); this.StructureDefensePenetrationCoef = MathHelper.Clamp(structureDefencePenetrationCoef, 0, 1); } }
public void DistributeDamageToBlockers(DamageDistribution distribution) { foreach (var blocker in _blockers) { var damage = new DamageFromSource( distribution[blocker], source: Card); blocker.AssignDamage(damage); } var defender = Players.GetOpponent(_card.Controller); if (HasTrample || AssignsDamageAsThoughItWasntBlocked || _isBlocked == false) { var unassignedDamage = new DamageFromSource( amount: Card.CalculateCombatDamageAmount() - distribution.Total, source: _card); defender.AssignDamage(unassignedDamage); } }
protected override void PrepareProtoItem() { base.PrepareProtoItem(); this.listCompatibleWeaponProtos = new List <IProtoItemWeapon>(); var damageDistribution = new DamageDistribution(); this.FireTracePreset = this.PrepareFireTracePreset(); this.PrepareDamageDescription( out var damageValue, out var armorPiercingCoef, out var finalDamageMultiplier, out var rangeMax, damageDistribution); this.DamageDescription = new DamageDescription( damageValue, armorPiercingCoef, finalDamageMultiplier, rangeMax, damageDistribution); }
protected abstract void PrepareDamageDescription( out double damageValue, out double armorPiercingCoef, out double finalDamageMultiplier, out double rangeMax, DamageDistribution damageDistribution);