public static AttackValue operator +(AttackValue a, AttackValue b) { AttackValue retval = new AttackValue(); retval.Name = a.Name; retval.Heat = a.Heat + b.Heat; retval.ShortRangeDamage = a.ShortRangeDamage + b.ShortRangeDamage; retval.MediumRangeDamage = a.MediumRangeDamage + b.MediumRangeDamage; retval.LongRangeDamage = a.LongRangeDamage + b.LongRangeDamage; retval.ExtremeRangeDamage = a.ExtremeRangeDamage + b.ExtremeRangeDamage; return(retval); }
/// <summary> /// Convert a Total Warfare BattleMech Design to an Alpha Strike /// element. /// </summary> /// <param name="battleMechDesign">Valid Total Warfare BattleMech Design</param> /// <returns>Valid Alpha Strike Element</returns> static public Element ToAlphaStrike(BattleMechDesign battleMechDesign) { Element retval = new Element(); retval.Size = GetSize(battleMechDesign); retval.MovementModes = GetMovementMode(battleMechDesign); retval.MaxArmor = GetAlphaStrikeArmor(battleMechDesign); retval.CurrentArmor = retval.MaxArmor; retval.MaxStructure = BattleMechStructureConverter.GetStructure(battleMechDesign.Engine, (int)battleMechDesign.Tonnage); retval.CurrentStructure = retval.MaxStructure; //Apply ENE ability if appropriate if (PossessesENEAbility(battleMechDesign)) { retval.SpecialAbilities.Add(SpecialAbilityFactory.CreateSpecialAbility("ENE")); } //Compile Attack Values Dictionary <string, AttackValue> dicAbilities = new Dictionary <string, AttackValue>(); AttackValue indirectFire = new AttackValue() { Name = "IF" }; foreach (UnitComponent unitComponent in battleMechDesign.Components) { ComponentWeapon componentWeapon = unitComponent.Component as ComponentWeapon; if (componentWeapon != null) { string sAlphaStrikeAbility = componentWeapon.AlphaStrikeAbility; if (sAlphaStrikeAbility == null) { sAlphaStrikeAbility = ""; //Empty string represent base attack } if (unitComponent.RearFacing) { sAlphaStrikeAbility = "REAR"; } if (!dicAbilities.ContainsKey(sAlphaStrikeAbility)) { dicAbilities.Add(sAlphaStrikeAbility, new AttackValue { Name = sAlphaStrikeAbility }); } dicAbilities[sAlphaStrikeAbility] = dicAbilities[sAlphaStrikeAbility] + new AttackValue(WeaponConverter.ConvertTotalWarfareWeapon(componentWeapon)); if (componentWeapon.IndirectFire) { indirectFire = indirectFire + new AttackValue(WeaponConverter.ConvertTotalWarfareWeapon(componentWeapon)); } } } AttackValue baseAttackValue = new AttackValue(); if (dicAbilities.ContainsKey("")) { baseAttackValue = dicAbilities[""]; } foreach (string sKey in dicAbilities.Keys) { if (sKey != "") { if (dicAbilities[sKey].MediumRangeDamage >= 10) { retval.SpecialAbilities.Add(new SpecialAbilityVector(sKey, dicAbilities[sKey].ToFinalDamageValueIntArray())); } else { baseAttackValue = baseAttackValue + dicAbilities[sKey]; } } } retval.Arcs.Add(baseAttackValue.ToFinalDamageValueArc()); if (indirectFire.ToFinalDamageValueIntArray()[2] > 0) { retval.SpecialAbilities.Add(new SpecialAbilityScalar("IF") { Value = indirectFire.ToFinalDamageValueIntArray()[2] }); } return(retval); }