示例#1
0
        private void Repair(GenericDamageCard damageCard)
        {
            DecisionSubPhase.ConfirmDecisionNoCallback();

            TargetShip.Damage.FlipFaceupCritFacedown(damageCard);
            Triggers.FinishTrigger();
        }
        public void FlipFaceupCritFacedown(GenericDamageCard critCard)
        {
            critCard.DiscardEffect();
            DamageCards.Remove(critCard);

            Messages.ShowInfo("Critical damage card \"" + critCard.Name + "\" is flipped facedown");
        }
示例#3
0
        public void ExposeRandomFacedownCard(Action callback)
        {
            int randomIndex = UnityEngine.Random.Range(0, DamageCards.Count);
            GenericDamageCard randomCard = DamageCards[randomIndex];

            randomCard.Expose(callback);
        }
示例#4
0
 private void CheckSecondRepair(GenericDamageCard damageCard)
 {
     if (HostUpgrade.State.Charges > 0 && damageCard.Type == CriticalCardType.Ship)
     {
         RegisterAbilityTrigger(TriggerTypes.OnFaceupDamageCardIsRepaired, AskToRepairAgain);
     }
 }
示例#5
0
        public void ProcessDrawnDamageCard(GenericDamageCard damageCard, EventArgs e)
        {
            AssignedDamageDiceroll.CancelHits(1);

            Combat.CurrentCriticalHitCard = damageCard;

            if (Combat.CurrentCriticalHitCard.IsFaceup)
            {
                if (OnFaceupCritCardReadyToBeDealt != null)
                {
                    OnFaceupCritCardReadyToBeDealt(this, Combat.CurrentCriticalHitCard);
                }

                if (OnFaceupCritCardReadyToBeDealtGlobal != null)
                {
                    OnFaceupCritCardReadyToBeDealtGlobal(this, Combat.CurrentCriticalHitCard);
                }

                Triggers.RegisterTrigger(new Trigger
                {
                    Name         = "Information about faceup damage card",
                    TriggerOwner = this.Owner.PlayerNo,
                    TriggerType  = TriggerTypes.OnFaceupCritCardReadyToBeDealtUI,
                    EventHandler = InformCrit.LoadAndShow
                });

                Triggers.ResolveTriggers(TriggerTypes.OnFaceupCritCardReadyToBeDealt, SufferFaceupDamageCard);
            }
            else
            {
                CallOnDamageCardIsDealt(Damage.DealDrawnCard);
            }
        }
示例#6
0
        private void TryToRepairCrit()
        {
            List <GenericDamageCard> shipCritsList = Selection.ThisShip.Damage.GetFaceupCrits(CriticalCardType.Ship);

            if (shipCritsList.Count == 1)
            {
                GenericDamageCard card = shipCritsList.First();
                Selection.ThisShip.Damage.FlipFaceupCritFacedown(card);
                Triggers.FinishTrigger();
            }
            else if (shipCritsList.Count > 1)
            {
                GorgolDecisionSubPhase subphase = Phases.StartTemporarySubPhaseNew <GorgolDecisionSubPhase>(
                    HostShip.PilotInfo.PilotName + ": Select faceup ship Crit",
                    Triggers.FinishTrigger
                    );
                subphase.DescriptionShort = HostShip.PilotInfo.PilotName;
                subphase.DescriptionLong  = "Select a faceup ship Crit damage card to repair it";
                subphase.ImageSource      = HostShip;
                subphase.Start();
            }
            else
            {
                Messages.ShowInfo(HostShip.PilotInfo.PilotName + ": To Ship faceup crits to repair");
                Triggers.FinishTrigger();
            }
        }
示例#7
0
        private void RegisterDealFaceupCrit(int shipId, Type critType)
        {
            GenericShip ship = Roster.AllShips.FirstOrDefault(n => n.Key == "ShipId:" + shipId).Value;

            if (ship != null)
            {
                GenericDamageCard critCard = (GenericDamageCard)System.Activator.CreateInstance(critType);
                DamageDecks.GetDamageDeck(ship.Owner.PlayerNo).PutOnTop(critCard);

                Triggers.RegisterTrigger(new Trigger()
                {
                    Name         = "Console: dead faceup crit card",
                    TriggerType  = TriggerTypes.OnAbilityDirect,
                    TriggerOwner = ship.Owner.PlayerNo,
                    EventHandler = delegate
                    {
                        ship.SufferHullDamage(
                            true,
                            new DamageSourceEventArgs
                        {
                            Source     = "Console",
                            DamageType = DamageTypes.Console
                        }
                            );
                    },
                });

                Triggers.ResolveTriggers(TriggerTypes.OnAbilityDirect, ShowMessage);
            }
            else
            {
                ShowHelp();
            }
        }
示例#8
0
 private void CancelPilotCrits(GenericShip ship, GenericDamageCard crit, EventArgs e)
 {
     if (crit.Type == CriticalCardType.Pilot)
     {
         Messages.ShowInfo("Determination: Crit with \"Pilot\" trait is discarded");
         crit = null;
     }
 }
示例#9
0
        protected void SelectDamageCard(GenericDamageCard damageCard)
        {
            DecisionSubPhase.ConfirmDecisionNoCallback();

            Messages.ShowInfo(damageCard.Name + " has been selected");

            damageCard.Expose(Triggers.FinishTrigger);
        }
示例#10
0
 private void CancelPilotCrits(GenericShip ship, GenericDamageCard crit, EventArgs e)
 {
     if (crit.Type == CriticalCardType.Pilot)
     {
         Messages.ShowInfo("Determination causes " + ship.PilotInfo.PilotName + " to discard " + crit.Name + " since it has the \"Pilot\" trait");
         crit = null;
     }
 }
示例#11
0
        public void Initilize(GenericDamageCard critCard)
        {
            CritCard = critCard;

            string cancelType = (critCard.CancelDiceResults.Count == 0) ? "Discard" : "Try to discard";

            Name = critCard.Name + ": " + cancelType;

            ImageUrl = critCard.ImageUrl;
        }
示例#12
0
        protected void SelectDamageCard(GenericDamageCard damageCard)
        {
            Messages.ShowInfo(damageCard.Name + " has been selected");

            DamageDeck ownDeck = DamageDecks.GetDamageDeck(HostShip.Owner.PlayerNo);

            ownDeck.RemoveFromDamageDeck(damageCard);
            ownDeck.ReShuffleDeck();

            Combat.CurrentCriticalHitCard = damageCard;
            HostShip.Damage.DealDrawnCard(DecisionSubPhase.ConfirmDecision);
        }
示例#13
0
    private void CreateDeck()
    {
        Deck = new List <GenericDamageCard>();

        foreach (var cardInfo in RuleSet.Instance.DamageDeckContent)
        {
            for (int i = 0; i < cardInfo.Value; i++)
            {
                GenericDamageCard card = (GenericDamageCard)Activator.CreateInstance(cardInfo.Key);
                Deck.Add(card);
            }
        }
    }
示例#14
0
 protected void CheckBobaFettAbility(GenericShip target, GenericDamageCard crit, EventArgs e)
 {
     // Check that the ship getting the crit is the defender of an attack, and Boba Fett's ship is the attacker, and the defender has any card to discard.
     if (Combat.Defender != null && target.ShipId == Combat.Defender.ShipId && Combat.Attacker != null && HostShip.ShipId == Combat.Attacker.ShipId && Combat.Defender.UpgradeBar.GetUpgradesOnlyFaceup().Count > 0)
     {
         RegisterAbilityTrigger(TriggerTypes.OnFaceupCritCardReadyToBeDealt, (s1, e1) =>
         {
             var phase = Phases.StartTemporarySubPhaseNew <BobaFettCrewDecisionSubPhase>("Boba Fett's ability", Triggers.FinishTrigger);
             phase.bobaFettUpgradeCard = HostUpgrade;
             phase.Start();
         });
     }
 }
示例#15
0
    public void DrawDamageCard(bool isFaceup, Action <GenericDamageCard, EventArgs> doWithDamageCard, EventArgs e)
    {
        if (Deck.Count == 0)
        {
            ReCreateDeck();
        }

        GenericDamageCard drawedCard = Deck[0];

        Deck.Remove(drawedCard);
        drawedCard.IsFaceup = isFaceup;
        doWithDamageCard(drawedCard, e);
    }
示例#16
0
        protected void SelectDamageCard(GenericDamageCard damageCard)
        {
            Messages.ShowInfo(damageCard.Name + " has been selected");

            AssignedDamageCard          = damageCard;
            AssignedDamageCard.IsFaceup = true;
            DamageDeck opponentDamageDeck = DamageDecks.GetDamageDeck(Combat.Attacker.Owner.PlayerNo);

            opponentDamageDeck.RemoveFromDamageDeck(damageCard);
            opponentDamageDeck.ReShuffleDeck();
            AssignConditions(Combat.Attacker);

            DecisionSubPhase.ConfirmDecision();
        }
示例#17
0
    public void ShuffleDeck(int seed)
    {
        Random random = new Random(seed);

        int n = Deck.Count;

        for (int i = 0; i < n; i++)
        {
            int r = i + random.Next(n - i);
            GenericDamageCard t = Deck[r];
            Deck[r] = Deck[i];
            Deck[i] = t;
        }
    }
示例#18
0
        private void ExposeFacedownCardByIndex(int index, Action callback, bool isOverriden = false)
        {
            if (!isOverriden)
            {
                List <GenericDamageCard> faceDownCards = GetFacedownCards();
                GenericDamageCard        randomCard    = faceDownCards[index];

                randomCard.Expose(callback);
            }
            else
            {
                callback();
            }
        }
示例#19
0
        private void SelectDamageCard(GenericDamageCard damageCard)
        {
            Messages.ShowInfo("Card selected: " + damageCard.Name);

            AssignedDamageCard          = damageCard;
            AssignedDamageCard.IsFaceup = true;
            DamageDeck opponentDamageDeck = DamageDecks.GetDamageDeck(TargetShip.Owner.PlayerNo);

            opponentDamageDeck.RemoveFromDamageDeck(damageCard);
            opponentDamageDeck.ReShuffleDeck();
            AssignConditions(TargetShip);

            DecisionSubPhase.ConfirmDecision();
        }
示例#20
0
        private void SelectDamageCard(GenericDamageCard damageCard)
        {
            DecisionSubPhase.ConfirmDecisionNoCallback();

            Messages.ShowInfo("Kylo Ren selected  " + damageCard.Name);

            AssignedDamageCard          = damageCard;
            AssignedDamageCard.IsFaceup = true;
            DamageDeck opponentDamageDeck = DamageDecks.GetDamageDeck(TargetShip.Owner.PlayerNo);

            opponentDamageDeck.RemoveFromDamageDeck(damageCard);
            opponentDamageDeck.ReShuffleDeck();
            AssignConditions(TargetShip);

            SpendExtra(Triggers.FinishTrigger);
        }
示例#21
0
        private void SufferAssignedCardInstead(object sender, EventArgs e, ref bool isSkipSufferDamage)
        {
            if ((e as DamageSourceEventArgs).DamageType == DamageTypes.ShipAttack)
            {
                isSkipSufferDamage = true;

                GenericShip ship = ShipWithCondition;
                Messages.ShowInfo("Kylo Ren's vison of the Dark Side came true: " + ship.PilotInfo.PilotName + " suffers " + AssignedDamageCard.Name);
                Combat.CurrentCriticalHitCard = AssignedDamageCard;

                AssignedDamageCard = null;
                RemoveConditions(ship);

                ship.ProcessDrawnDamageCard(e, Triggers.FinishTrigger);
            }
        }
示例#22
0
    public void DrawDamageCard(bool isFaceup, Action <EventArgs> doWithDamageCard, EventArgs e)
    {
        if (Deck.Count == 0)
        {
            ReCreateDeck();
        }

        GenericDamageCard drawedCard = Deck[0];

        Deck.Remove(drawedCard);
        drawedCard.IsFaceup = isFaceup;

        Combat.CurrentCriticalHitCard = drawedCard;

        doWithDamageCard(e);
    }
示例#23
0
        protected void SufferAssignedCardInstead(object sender, EventArgs e, ref bool isSkipSufferDamage)
        {
            if ((e as DamageSourceEventArgs).DamageType == DamageTypes.ShipAttack)
            {
                isSkipSufferDamage = true;

                GenericShip ship = ShipWithCondition;
                Messages.ShowInfo("Kylo Ren's premonition comes true: " + ship.PilotInfo.PilotName + " receives " + AssignedDamageCard.Name);
                Combat.CurrentCriticalHitCard = AssignedDamageCard;

                AssignedDamageCard = null;
                RemoveConditions(ship);

                ship.ProcessDrawnDamageCard(e);
            }
        }
示例#24
0
        private void SufferAssignedCardInstead(object sender, EventArgs e, ref bool isSkipSufferDamage)
        {
            if ((e as DamageSourceEventArgs).DamageType == DamageTypes.ShipAttack)
            {
                Messages.ShowInfo("Kylo Ren: Assigned card is dealt instead");

                isSkipSufferDamage = true;

                GenericShip       ship = ShipWithCondition;
                GenericDamageCard card = AssignedDamageCard;

                AssignedDamageCard = null;
                RemoveConditions(ship);

                ship.ProcessDrawnDamageCard(card, e);
            }
        }
示例#25
0
        public void ExposeRandomFacedownCard(Action callback)
        {
            List <GenericDamageCard> faceDownCards = GetFacedownCards();

            if (faceDownCards.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, faceDownCards.Count);
                GenericDamageCard randomCard = faceDownCards[randomIndex];

                Host.CallSelectDamageCardToExpose(randomIndex, ExposeFacedownCardByIndex, callback);
            }
            else
            {
                Messages.ShowInfo("No cards to expose");
                callback();
            }
        }
示例#26
0
        private void MaarekStelePilotAbility(GenericShip ship, GenericDamageCard crit, EventArgs e)
        {
            if ((e as DamageSourceEventArgs) == null)
            {
                return;
            }

            GenericShip damageSourceShip = (e as DamageSourceEventArgs).Source as GenericShip;

            if (damageSourceShip == null)
            {
                return;
            }

            if (damageSourceShip.ShipId == HostShip.ShipId)
            {
                if ((e as DamageSourceEventArgs).DamageType == DamageTypes.ShipAttack)
                {
                    RegisterAbilityTrigger(TriggerTypes.OnFaceupCritCardReadyToBeDealt, ShowDecision);
                }
            }
        }
示例#27
0
 private void HandleDamageCard(GenericDamageCard card)
 {
     card.Expose(DecisionSubPhase.ConfirmDecision);
 }
示例#28
0
 private void RemoveConditionsOnDestroyed(GenericShip ship)
 {
     AssignedDamageCard = null;
     RemoveConditions(ship);
 }
示例#29
0
 private void DiscardCrit(GenericDamageCard critCard)
 {
     Selection.ActiveShip.Damage.FlipFaceupCritFacedown(critCard);
     CritDiscarded(ConfirmDecision);
 }
示例#30
0
 private void DiscardCrit(GenericDamageCard critCard)
 {
     Selection.ActiveShip.Damage.FlipFaceupCritFacedown(critCard);
     Sounds.PlayShipSound("R2D2-Proud");
     ConfirmDecision();
 }