private void CheckDamageRedirection(GenericShip ship, DamageSourceEventArgs e) { if (HostShip.DockedShips.Count > 0 && HostShip.DockedShips.First().State.ShieldsCurrent > 0 && HostShip.DockedShips.First().State.ShieldsCurrent > 0) { RegisterAbilityTrigger(TriggerTypes.OnTryDamagePrevention, AskToRedirectDamage); } }
private void AssaultMissilesHitEffect() { var ships = Roster.AllShips.Select(x => x.Value).ToList(); foreach (GenericShip ship in ships) { // null refs? if (ship.Model == null || Combat.Defender == null || Combat.Defender.Model == null) { continue; } // Defending ship shouldn't suffer additional damage if (ship.Model == Combat.Defender.Model) { continue; } BoardTools.DistanceInfo shotInfo = new BoardTools.DistanceInfo(Combat.Defender, ship); if (shotInfo.Range == 1) { //Messages.ShowErrorToHuman(string.Format("{0} is within range 1 of {1}; assault missile deals 1 damage!", ship.PilotName, Combat.Defender.PilotName)); DamageSourceEventArgs assaultsplashDamage = new DamageSourceEventArgs() { Source = "Assault Missile", DamageType = DamageTypes.CardAbility }; ship.Damage.TryResolveDamage(1, assaultsplashDamage, Triggers.FinishTrigger); } } }
public override void ExplosionEffect(GenericShip ship, Action callBack) { _ship = ship; if (RuleSet.Instance is FirstEdition) { Triggers.RegisterTrigger(new Trigger() { Name = "Suffer damage from bomb", TriggerType = TriggerTypes.OnDamageIsDealt, TriggerOwner = ship.Owner.PlayerNo, EventHandler = DetonationFE, EventArgs = new DamageSourceEventArgs() { Source = this, DamageType = DamageTypes.BombDetonation } }); Triggers.ResolveTriggers(TriggerTypes.OnDamageIsDealt, callBack); } else if (RuleSet.Instance is SecondEdition) { DamageSourceEventArgs protonDamage = new DamageSourceEventArgs() { Source = this, DamageType = DamageTypes.BombDetonation }; _ship.Damage.TryResolveDamage(0, 1, protonDamage, callBack); } }
private void RegisterDefendAbility(GenericShip ship, DamageSourceEventArgs e) { if (e.DamageType == DamageTypes.ShipAttack) { RegisterAbilityTrigger(TriggerTypes.OnTryDamagePrevention, AskToUseDefendAbility); } }
private void DoSplashDamage(GenericShip harpoonedShip, Action callback) { Messages.ShowInfo("\"Harpooned!\" condition deals splash damage"); var ships = Roster.AllShips.Select(x => x.Value).ToList(); foreach (GenericShip ship in ships) { // Defending ship shouldn't suffer additional damage if (ship.ShipId == harpoonedShip.ShipId) { continue; } BoardTools.DistanceInfo distanceInfo = new BoardTools.DistanceInfo(harpoonedShip, ship); if (distanceInfo.Range == 1) { DamageSourceEventArgs harpoonconditionDamage = new DamageSourceEventArgs() { Source = "Harpoon Condition", DamageType = DamageTypes.CardAbility }; ship.Damage.TryResolveDamage(1, harpoonconditionDamage, callback); } } }
private void CheckJosteroAbility(GenericShip damaged, DamageSourceEventArgs damage) { // Can we even bonus attack? if (!HostShip.CanBonusAttack) { return; } // Make sure the opposing ship is an enemy. if (damaged.Owner == HostShip.Owner) { return; } // If the ship is defending we're not interested. if (Combat.Defender == damaged || damage.DamageType == DamageTypes.ShipAttack) { return; } // Save the value for whether they've attacked or not. performedRegularAttack = HostShip.IsAttackPerformed; // It may be possible in the future for a non-defender to be damaged in combat so we've got to future proof here. if (Combat.AttackStep == CombatStep.None) { RegisterAbilityTrigger(TriggerTypes.OnDamageInstanceResolved, RegisterBonusAttack); } else { Combat.Attacker.OnCombatCheckExtraAttack += StartBonusAttack; } }
private void CheckSelflessnessAbility(GenericShip toDamage, DamageSourceEventArgs e) { curToDamage = toDamage; curDamageInfo = e; // Is this ship the defender in combat? if (Combat.Defender != curToDamage) { return; } // Is the damage type a ship attack? if (curDamageInfo.DamageType != DamageTypes.ShipAttack) { return; } // Is the defender on our team and not us? If not return. if (Combat.Defender.Owner.PlayerNo != HostShip.Owner.PlayerNo || Combat.Defender.ShipId == HostShip.ShipId) { return; } // If the defender is at range one of us we register our trigger to prevent damage. BoardTools.DistanceInfo distanceInfo = new BoardTools.DistanceInfo(Combat.Defender, HostShip); if (distanceInfo.Range == 1 && Combat.DiceRollAttack.RegularSuccesses > 0) { RegisterAbilityTrigger(TriggerTypes.OnTryDamagePrevention, UseSelflessnessAbility); } }
private void CheckAbility(GenericShip ship, DamageSourceEventArgs e) { if (HostUpgrade.State.Charges > 0 && DamageTypeIsSupported(e)) { RegisterAbilityTrigger(TriggerTypes.OnTryDamagePrevention, AskToUseOwnAbility); } }
public void CallOnDamageInstanceResolved(DamageSourceEventArgs dsource, Action callback) { if (OnDamageInstanceResolvedGlobal != null) { OnDamageInstanceResolvedGlobal(this, dsource); } Triggers.ResolveTriggers(TriggerTypes.OnDamageInstanceResolved, callback); }
public void CallTryDamagePrevention(DamageSourceEventArgs e, Action callback) { if (OnTryDamagePreventionGlobal != null) { OnTryDamagePreventionGlobal(this, e); } Triggers.ResolveTriggers(TriggerTypes.OnTryDamagePrevention, callback); }
public override void ExplosionEffect(GenericShip ship, Action callBack) { DamageSourceEventArgs thermaldetDamage = new DamageSourceEventArgs() { Source = this, DamageType = DamageTypes.BombDetonation }; ship.Damage.TryResolveDamage(1, thermaldetDamage, delegate { ship.Tokens.AssignToken(typeof(Tokens.StressToken), callBack); }); }
protected override void SufferNegativeEffect(Action callback) { DamageSourceEventArgs damageArgs = new DamageSourceEventArgs() { Source = HostShip, DamageType = DamageTypes.CardAbility }; HostShip.Damage.TryResolveDamage(1, damageArgs, callback); }
public override void ExplosionEffect(GenericShip ship, Action callBack) { DamageSourceEventArgs seismicDamage = new DamageSourceEventArgs() { Source = this, DamageType = DamageTypes.BombDetonation }; ship.Damage.TryResolveDamage(1, seismicDamage, callBack); }
private static void ResolveCombatDamage() { DamageSourceEventArgs damageArgs = new DamageSourceEventArgs() { Source = Attacker, DamageType = DamageTypes.ShipAttack }; Defender.Damage.TryResolveDamage(DiceRollAttack.DiceList, damageArgs, AfterShotIsPerformed); }
private void SufferDamage() { DamageSourceEventArgs harpoonconditionDamage = new DamageSourceEventArgs() { Source = "Electronic Baffle", DamageType = DamageTypes.CardAbility }; HostShip.Damage.TryResolveDamage(1, harpoonconditionDamage, DecisionSubPhase.ConfirmDecision); }
protected void DefenderSuffersDamage() { DamageSourceEventArgs ionturretDamage = new DamageSourceEventArgs() { Source = "Ion Cannon Turret", DamageType = DamageTypes.ShipAttack }; Combat.Defender.Damage.TryResolveDamage(1, ionturretDamage, Triggers.FinishTrigger); }
private void CheckDrawTheirFireAbility(GenericShip ship, DamageSourceEventArgs e) { curToDamage = ship; curDamageInfo = e; if (AbilityCanBeUsed()) { RegisterAbilityTrigger(TriggerTypes.OnTryDamagePrevention, UseDrawTheirFireAbility); } }
private void DefenderSuffersDamage() { DamageSourceEventArgs tltDamage = new DamageSourceEventArgs() { Source = "Twin Laser Turret", DamageType = DamageTypes.ShipAttack }; Combat.Defender.Damage.TryResolveDamage(1, tltDamage, Triggers.FinishTrigger); }
protected void DefenderSuffersDamage(System.Action callback) { DamageSourceEventArgs ionWeaponDamage = new DamageSourceEventArgs() { Source = HostShip, DamageType = DamageTypes.ShipAttack }; Combat.Defender.Damage.TryResolveDamage(1, ionWeaponDamage, callback); }
private void SufferDamage(object sender, System.EventArgs e) { DamageSourceEventArgs toranikuldaDamage = new DamageSourceEventArgs() { Source = "Torani Kulda", DamageType = DamageTypes.CardAbility }; Selection.ThisShip.Damage.TryResolveDamage(1, toranikuldaDamage, ConfirmDecision); }
public void TryResolveDamage(List <Die> damage, DamageSourceEventArgs e, Action callback) { // Populate AssignedDamageDiceroll with the results from the damage list. foreach (Die d in damage) { Host.AssignedDamageDiceroll.AddDice(d.Side); } Host.CallTryDamagePrevention(e, delegate { ResolveDamage(e, callback); }); }
private void SufferDamage() { DamageSourceEventArgs damageArgs = new DamageSourceEventArgs() { DamageType = DamageTypes.CardAbility, Source = HostUpgrade }; HostShip.Damage.TryResolveDamage(1, damageArgs, Triggers.FinishTrigger); }
private void SufferCriticalDamage(Action <bool> callback) { DamageSourceEventArgs damageArgs = new DamageSourceEventArgs() { DamageType = DamageTypes.CardAbility, Source = HostShip }; HostShip.Damage.TryResolveDamage(0, 1, damageArgs, delegate { callback(true); }); }
private void ShipIsSelected() { DamageSourceEventArgs ruthlessDamage = new DamageSourceEventArgs() { Source = HostShip, DamageType = DamageTypes.CardAbility }; TargetShip.Damage.TryResolveDamage(1, ruthlessDamage, SelectShipSubPhase.FinishSelection); }
private void DealOneDamage(GenericShip ship, Action callback) { DamageSourceEventArgs sabineDamage = new DamageSourceEventArgs() { Source = this.HostUpgrade, DamageType = DamageTypes.CardAbility }; HostShip.Damage.TryResolveDamage(1, sabineDamage, callback); }
private void SufferDamage() { DamageSourceEventArgs asteroidDamage = new DamageSourceEventArgs() { Source = "Asteroid", DamageType = DamageTypes.ObstacleCollision }; TheShip.Damage.TryResolveDamage(CurrentDiceRoll.DiceList, asteroidDamage, CallBack); }
public void TryResolveDamage(int damage, DamageSourceEventArgs e, Action callback) { List <Die> dice = new List <Die>(); for (int d = 0; d < damage; d++) { dice.Add(new Die(null, DiceKind.Attack, DieSide.Success)); } TryResolveDamage(dice, e, callback); }
private bool DamageTypeIsSupported(DamageSourceEventArgs e) { return( e.DamageType == DamageTypes.ObstacleCollision || ( e.DamageType == DamageTypes.BombDetonation && (e.Source as GenericUpgrade).UpgradeInfo.SubType == UpgradeSubType.Bomb && (e.Source as GenericUpgrade).HostShip.Owner.PlayerNo == HostShip.Owner.PlayerNo ) ); }
private void DealDamageToRemote(GenericShip ship, Action callBack) { _ship = ship; DamageSourceEventArgs damage = new DamageSourceEventArgs() { Source = this, DamageType = DamageTypes.BombDetonation }; _ship.Damage.TryResolveDamage(1, 0, damage, callBack); }
private void SufferDamage() { Messages.ShowInfo("Cluster Mines: " + Selection.ActiveShip.PilotInfo.PilotName + " suffers damage."); DamageSourceEventArgs clusterMinesDamage = new DamageSourceEventArgs() { Source = HostUpgrade, DamageType = DamageTypes.BombDetonation }; Selection.ActiveShip.Damage.TryResolveDamage(CurrentDiceRoll.DiceList, clusterMinesDamage, CallBack); }