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); }
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)); } } }