public ThreatDamageResult TakeAttack(int amount, ThreatDamageType damageType) { var damageShielded = 0; var damageDone = amount; if (damageType != ThreatDamageType.IgnoresShields) { damageShielded = UpperStation.ShieldThroughAttack(amount); damageDone -= damageShielded; } if (damageType == ThreatDamageType.DoubleDamageThroughShields) { damageDone *= 2; } if (damageShielded == 0 && damageDone > 0 && damageType == ThreatDamageType.Plasmatic) { foreach (var player in Players) { player.KnockOut(); } } var damageResult = TakeDamage(damageDone); damageResult.DamageShielded = damageShielded; return(damageResult); }
internal ThreatDamage(int amount, ThreatDamageType threatDamageType, ZoneLocation zoneLocation, int?distanceToSource = null) { Amount = amount; ThreatDamageType = threatDamageType; ZoneLocation = zoneLocation; DistanceToSource = distanceToSource; }
private void Attack(int amount, ThreatDamageType threatDamageType, IList <ZoneLocation> zoneLocations) { var bonusAttacks = sittingDuck.CurrentThreatBuffs.Values.Count(buff => buff == ExternalThreatBuff.BonusAttack); var damage = new ThreatDamage(amount + bonusAttacks, threatDamageType, zoneLocations); var result = sittingDuck.TakeAttack(damage); if (result.ShipDestroyed) { throw new LoseException(this); } }
public bool TakeAttack(int amount, ThreatDamageType damageType) { var oldShields = UpperStation.EnergyContainer.Energy; UpperStation.EnergyContainer.Energy -= amount; var newShields = UpperStation.EnergyContainer.Energy; var damageShielded = oldShields - newShields; var damageDone = amount - damageShielded; if (damageType == ThreatDamageType.DoubleDamageThroughShields) { damageDone *= 2; } if (damageShielded == 0 && damageDone > 0 && damageType == ThreatDamageType.Plasmatic) { foreach (var player in Players) { player.IsKnockedOut = true; } } return(TakeDamage(damageDone)); }
public ThreatDamage(int amount, ThreatDamageType threatDamageType, IList <ZoneLocation> zoneLocations) { Amount = amount; ThreatDamageType = threatDamageType; ZoneLocations = zoneLocations; }
public bool TakeAttack(int amount, ThreatDamageType damageType) { var oldShields = UpperStation.EnergyContainer.Energy; UpperStation.EnergyContainer.Energy -= amount; var newShields = UpperStation.EnergyContainer.Energy; var damageShielded = oldShields - newShields; var damageDone = amount - damageShielded; if (damageType == ThreatDamageType.DoubleDamageThroughShields) damageDone *= 2; if (damageShielded == 0 && damageDone > 0 && damageType == ThreatDamageType.Plasmatic) foreach (var player in Players) player.IsKnockedOut = true; return TakeDamage(damageDone); }
protected void AttackSpecificZones(int amount, IList<ZoneLocation> zones, ThreatDamageType threatDamageType = ThreatDamageType.Standard) { Attack(amount, threatDamageType, zones); }
protected void AttackOtherTwoZones(int amount, ThreatDamageType threatDamageType = ThreatDamageType.Standard) { Attack(amount, threatDamageType, EnumFactory.All<ZoneLocation>().Except(new[] { CurrentZone }).ToList()); }
protected void AttackAllZones(int amount, ThreatDamageType threatDamageType = ThreatDamageType.Standard) { Attack(amount, threatDamageType, EnumFactory.All<ZoneLocation>()); }
protected void Attack(int amount, ThreatDamageType threatDamageType = ThreatDamageType.Standard) { Attack(amount, threatDamageType, new [] {CurrentZone}); }
private void Attack(int amount, ThreatDamageType threatDamageType, IList<ZoneLocation> zoneLocations) { var bonusAttacks = sittingDuck.CurrentThreatBuffs.Values.Count(buff => buff == ExternalThreatBuff.BonusAttack); var damage = new ThreatDamage(amount + bonusAttacks, threatDamageType, zoneLocations); var result = sittingDuck.TakeAttack(damage); if (result.ShipDestroyed) throw new LoseException(this); }
protected void AttackOtherTwoZones(int amount, ThreatDamageType threatDamageType = ThreatDamageType.Standard) { Attack(amount, threatDamageType, EnumFactory.All <ZoneLocation>().Except(new[] { CurrentZone }).ToList()); }
protected void AttackAllZones(int amount, ThreatDamageType threatDamageType = ThreatDamageType.Standard) { Attack(amount, threatDamageType, EnumFactory.All <ZoneLocation>()); }
protected void Attack(int amount, ThreatDamageType threatDamageType = ThreatDamageType.Standard) { Attack(amount, threatDamageType, new [] { CurrentZone }); }
protected void AttackSpecificZones(int amount, IList <ZoneLocation> zones, ThreatDamageType threatDamageType = ThreatDamageType.Standard) { Attack(amount, threatDamageType, zones); }
public ThreatDamage(int amount, ThreatDamageType threatDamageType, IList<ZoneLocation> zoneLocations) { Amount = amount; ThreatDamageType = threatDamageType; ZoneLocations = zoneLocations; }