*Hopefully optimized the running of triggers. (Now, when triggers are registered in newGame() or by pumps the triggerhandler keeps a list of which modes are actually used by cards. When a triggermode is run, it is skipped early [at the same time suppressed modes are skipped] if the mode isn't used by any card in the game.)

*Predatory Advantage now uses the stack properly.
This commit is contained in:
jendave
2011-08-06 21:24:13 +00:00
parent d4ab443764
commit 9a86098d60
2 changed files with 22 additions and 13 deletions

View File

@@ -10,14 +10,7 @@ import javax.swing.JOptionPane;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.cardFactory.CardFactory;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Ability_Static;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.spellability.*;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCostUtil;
@@ -1833,10 +1826,20 @@ public class GameActionUtil {
CardList list = new CardList(playZone.getCards());
list = list.getName("Predatory Advantage");
for (int i = 0; i < list.size(); i++) {
if(player == AllZone.HumanPlayer && Phase.PlayerCreatureSpellCount == 0)
CardFactoryUtil.makeToken("Lizard", "G 2 2 Lizard", list.get(i).getController(), "G", new String[] {"Creature", "Lizard"}, 2, 2, new String[] {""});
else if(player == AllZone.ComputerPlayer && Phase.ComputerCreatureSpellCount == 0)
CardFactoryUtil.makeToken("Lizard", "G 2 2 Lizard", list.get(i).getController(), "G", new String[] {"Creature", "Lizard"}, 2, 2, new String[] {""});
final Player controller = list.get(i).getController();
if((player == AllZone.HumanPlayer && Phase.PlayerCreatureSpellCount == 0) || (player == AllZone.ComputerPlayer && Phase.ComputerCreatureSpellCount == 0))
{
Ability abTrig = new Ability(list.get(i),"0") {
public void resolve()
{
CardFactoryUtil.makeToken("Lizard", "G 2 2 Lizard", controller, "G", new String[] {"Creature", "Lizard"}, 2, 2, new String[] {""});
}
};
abTrig.setTrigger(true);
abTrig.setStackDescription("At the beginning of each opponent's end step, if that player didn't cast a creature spell this turn, put a 2/2 green Lizard creature token onto the battlefield.");
AllZone.GameAction.playSpellAbility(abTrig);
}
}
}

View File

@@ -24,6 +24,7 @@ import forge.gui.input.Input;
public class TriggerHandler {
private ArrayList<String> registeredModes = new ArrayList<String>();
private ArrayList<Trigger> registeredTriggers = new ArrayList<Trigger>();
private ArrayList<String> suppressedModes = new ArrayList<String>();
@@ -188,11 +189,16 @@ public class TriggerHandler {
public void registerTrigger(Trigger trig)
{
registeredTriggers.add(trig);
String mode = trig.getMapParams().get("Mode");
if(!registeredModes.contains(mode))
registeredModes.add(mode);
}
public void clearRegistered()
{
registeredTriggers.clear();
registeredModes.clear();
}
public void removeRegisteredTrigger(Trigger trig)
@@ -223,7 +229,7 @@ public class TriggerHandler {
public void runTrigger(String mode,HashMap<String,Object> runParams)
{
if(suppressedModes.contains(mode))
if(suppressedModes.contains(mode) || !registeredModes.contains(mode))
{
return;
}