mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
*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:
@@ -10,14 +10,7 @@ import javax.swing.JOptionPane;
|
|||||||
import forge.card.abilityFactory.AbilityFactory;
|
import forge.card.abilityFactory.AbilityFactory;
|
||||||
import forge.card.cardFactory.CardFactory;
|
import forge.card.cardFactory.CardFactory;
|
||||||
import forge.card.cardFactory.CardFactoryUtil;
|
import forge.card.cardFactory.CardFactoryUtil;
|
||||||
import forge.card.spellability.Ability;
|
import forge.card.spellability.*;
|
||||||
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.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
import forge.gui.input.Input;
|
import forge.gui.input.Input;
|
||||||
import forge.gui.input.Input_PayManaCostUtil;
|
import forge.gui.input.Input_PayManaCostUtil;
|
||||||
@@ -1833,10 +1826,20 @@ public class GameActionUtil {
|
|||||||
CardList list = new CardList(playZone.getCards());
|
CardList list = new CardList(playZone.getCards());
|
||||||
list = list.getName("Predatory Advantage");
|
list = list.getName("Predatory Advantage");
|
||||||
for (int i = 0; i < list.size(); i++) {
|
for (int i = 0; i < list.size(); i++) {
|
||||||
if(player == AllZone.HumanPlayer && Phase.PlayerCreatureSpellCount == 0)
|
final Player controller = list.get(i).getController();
|
||||||
CardFactoryUtil.makeToken("Lizard", "G 2 2 Lizard", list.get(i).getController(), "G", new String[] {"Creature", "Lizard"}, 2, 2, new String[] {""});
|
if((player == AllZone.HumanPlayer && Phase.PlayerCreatureSpellCount == 0) || (player == AllZone.ComputerPlayer && Phase.ComputerCreatureSpellCount == 0))
|
||||||
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[] {""});
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import forge.gui.input.Input;
|
|||||||
|
|
||||||
public class TriggerHandler {
|
public class TriggerHandler {
|
||||||
|
|
||||||
|
private ArrayList<String> registeredModes = new ArrayList<String>();
|
||||||
private ArrayList<Trigger> registeredTriggers = new ArrayList<Trigger>();
|
private ArrayList<Trigger> registeredTriggers = new ArrayList<Trigger>();
|
||||||
private ArrayList<String> suppressedModes = new ArrayList<String>();
|
private ArrayList<String> suppressedModes = new ArrayList<String>();
|
||||||
|
|
||||||
@@ -188,11 +189,16 @@ public class TriggerHandler {
|
|||||||
public void registerTrigger(Trigger trig)
|
public void registerTrigger(Trigger trig)
|
||||||
{
|
{
|
||||||
registeredTriggers.add(trig);
|
registeredTriggers.add(trig);
|
||||||
|
|
||||||
|
String mode = trig.getMapParams().get("Mode");
|
||||||
|
if(!registeredModes.contains(mode))
|
||||||
|
registeredModes.add(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearRegistered()
|
public void clearRegistered()
|
||||||
{
|
{
|
||||||
registeredTriggers.clear();
|
registeredTriggers.clear();
|
||||||
|
registeredModes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeRegisteredTrigger(Trigger trig)
|
public void removeRegisteredTrigger(Trigger trig)
|
||||||
@@ -223,7 +229,7 @@ public class TriggerHandler {
|
|||||||
|
|
||||||
public void runTrigger(String mode,HashMap<String,Object> runParams)
|
public void runTrigger(String mode,HashMap<String,Object> runParams)
|
||||||
{
|
{
|
||||||
if(suppressedModes.contains(mode))
|
if(suppressedModes.contains(mode) || !registeredModes.contains(mode))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user