/// <summary> /// Attack the shields. /// </summary> /// <param name="attacker">Token firing a weapon.</param> /// <param name="target">Ship being fired on.</param> /// <param name="hitPower">Damage output of the weapon.</param> /// <returns>Residual damage after shields or zero.</returns> private double DamageShields(Stack attacker, Stack target, double hitPower) { if (target.Token.Shields <= 0) { return(hitPower); } double initialShields = target.Token.Shields; target.Token.Shields -= hitPower; if (target.Token.Shields < 0) { target.Token.Shields = 0; } // Calculate remianing weapon power, after damaging shields (if any) double damageDone = initialShields - target.Token.Shields; double remainingPower = hitPower - damageDone; BattleStepWeapons battleStepReport = new BattleStepWeapons(); battleStepReport.Damage = damageDone; battleStepReport.Targeting = BattleStepWeapons.TokenDefence.Shields; battleStepReport.WeaponTarget.StackKey = attacker.Key; battleStepReport.WeaponTarget.TargetKey = target.Key; battle.Steps.Add(battleStepReport); return(remainingPower); }
/// <summary> /// Attack the Armor. /// </summary> /// <param name="attacker">Token making the attack.</param> /// <param name="target">Target being fired on.</param> /// <param name="hitPower">Weapon damage.</param> private void DamageArmor(Stack attacker, Stack target, double hitPower) { // FIXME (Priority 6) - damage is being spread over all ships in the stack. Should destroy whole ships first, then spread remaining damage. target.Token.Armor -= (int)hitPower; BattleStepWeapons battleStepReport = new BattleStepWeapons(); battleStepReport.Damage = hitPower; battleStepReport.Targeting = BattleStepWeapons.TokenDefence.Armor; battleStepReport.WeaponTarget.StackKey = attacker.Key; battleStepReport.WeaponTarget.TargetKey = target.Key; battle.Steps.Add(battleStepReport); }
/// <Summary> /// Deal with weapons being fired. /// </Summary> /// <param name="weapons">Weapon to display.</param> private void DoBattleStepFireWeapon(BattleStepWeapons weapons) { if (weapons == null) { Report.Error("BattleViewer.cs DoBattleStepFireWeapon() weapons is null."); ClearWeapons(); } else { BattleStepTarget target = weapons.WeaponTarget; Stack lamb = null; Stack wolf = null; theBattle.Stacks.TryGetValue(target.TargetKey, out lamb); theBattle.Stacks.TryGetValue(target.StackKey, out wolf); UpdateStackDetails(wolf); UpdateTargetDetails(lamb); ClearMovementDetails(); // damge taken weaponPower.Text = weapons.Damage.ToString(System.Globalization.CultureInfo.InvariantCulture); // "Damage to shields" or "Damage to armor" if (weapons.Targeting == BattleStepWeapons.TokenDefence.Shields) { componentTarget.Text = "Damage to shields"; damage.Text = weaponPower.Text + " " + componentTarget.Text; lamb.Token.Shields -= weapons.Damage; UpdateTargetDetails(lamb); } else { componentTarget.Text = "Damage to armor"; damage.Text = weaponPower.Text + " " + componentTarget.Text; lamb.Token.Armor -= weapons.Damage; UpdateTargetDetails(lamb); } } }