Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
                }
            }
        }