コード例 #1
0
ファイル: MTGEventActions.cs プロジェクト: 8bitbanana/MTGLib
        protected override bool ApplyAction()
        {
            var mtg = MTG.Instance;

            if (!(ability is ManaAbility))
            {
                // Put ability on stack
                objevent = new GenerateAbilityObjectEvent(
                    source, ability.resolution, AbilityObject.AbilityType.Activated
                    );
                if (!PushChild(objevent))
                {
                    return(false);
                }

                // Determine targets
                foreach (var target in objevent.resolution.Targets)
                {
                    if (!PushChild(new DeclareTargetEvent(source, target)))
                    {
                        Console.WriteLine("Target not declared, reverting ability.");
                        RevertAllChildren();
                        return(false);
                    }
                }
            }

            // Pay ability costs
            foreach (var cost in ability.Costs)
            {
                cost.SetSource(source);
                if (!PushChild(cost))
                {
                    Console.WriteLine("Cost not paid, reverting ability.");
                    RevertAllChildren();
                    return(false);
                }
            }

            if (ability is ManaAbility)
            {
                foreach (var evnt in ability.resolution.GetResolutionEvents(source))
                {
                    PushChild(evnt);
                }
            }

            return(true);
        }
コード例 #2
0
 public void HandlePendingTriggers()
 {
     while (PendingTriggeredAbilities.Count > 0)
     {
         var entry = PendingTriggeredAbilities[0];
         PendingTriggeredAbilities.RemoveAt(0);
         var objevent = new GenerateAbilityObjectEvent(
             entry.source, entry.ability.resolution, AbilityObject.AbilityType.Triggered
             );
         PushEvent(objevent);
         foreach (var target in objevent.resolution.Targets)
         {
             PushEvent(new DeclareTargetEvent(entry.source, target));
         }
     }
 }