示例#1
0
        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);
        }
示例#2
0
 internal ThreatDamage(int amount, ThreatDamageType threatDamageType, ZoneLocation zoneLocation, int?distanceToSource = null)
 {
     Amount           = amount;
     ThreatDamageType = threatDamageType;
     ZoneLocation     = zoneLocation;
     DistanceToSource = distanceToSource;
 }
示例#3
0
        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);
            }
        }
示例#4
0
        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;
 }
示例#6
0
 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);
 }
示例#12
0
 protected void AttackOtherTwoZones(int amount, ThreatDamageType threatDamageType = ThreatDamageType.Standard)
 {
     Attack(amount, threatDamageType, EnumFactory.All <ZoneLocation>().Except(new[] { CurrentZone }).ToList());
 }
示例#13
0
 protected void AttackAllZones(int amount, ThreatDamageType threatDamageType = ThreatDamageType.Standard)
 {
     Attack(amount, threatDamageType, EnumFactory.All <ZoneLocation>());
 }
示例#14
0
 protected void Attack(int amount, ThreatDamageType threatDamageType = ThreatDamageType.Standard)
 {
     Attack(amount, threatDamageType, new [] { CurrentZone });
 }
示例#15
0
 protected void AttackSpecificZones(int amount, IList <ZoneLocation> zones, ThreatDamageType threatDamageType = ThreatDamageType.Standard)
 {
     Attack(amount, threatDamageType, zones);
 }
示例#16
0
 public ThreatDamage(int amount, ThreatDamageType threatDamageType, IList<ZoneLocation> zoneLocations)
 {
     Amount = amount;
     ThreatDamageType = threatDamageType;
     ZoneLocations = zoneLocations;
 }