move haunt Ai to a separate file

remove isComputer method
This commit is contained in:
Maxmtg
2013-12-25 08:21:25 +00:00
parent 69a9f0fe43
commit a81a666b81
9 changed files with 44 additions and 24 deletions

View File

@@ -253,7 +253,7 @@ public class ComputerUtilCard {
* a {@link forge.CardList} object.
* @return a {@link forge.game.card.Card} object.
*/
public static Card getWorstCreatureAI(final List<Card> list) {
public static Card getWorstCreatureAI(final Collection<Card> list) {
return Aggregates.itemWithMin(Iterables.filter(list, CardPredicates.Presets.CREATURES), ComputerUtilCard.fnEvaluateCreature);
}

View File

@@ -0,0 +1,30 @@
package forge.ai.ability;
import java.util.Collection;
import java.util.List;
import forge.ai.ComputerUtilCard;
import forge.ai.SpellAbilityAi;
import forge.game.card.Card;
import forge.game.card.CardLists;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
public class HauntAi extends SpellAbilityAi {
/* (non-Javadoc)
* @see forge.card.ability.SpellAbilityAi#canPlayAI(forge.game.player.Player, forge.card.spellability.SpellAbility)
*/
@Override
protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
return false; // should not get here
}
@Override
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> creats, boolean isOptional, Player targetedPlayer) {
final List<Card> oppCreats = CardLists.filterControlledBy(creats, ai.getOpponents());
return ComputerUtilCard.getWorstCreatureAI(oppCreats.isEmpty() ? creats : oppCreats);
}
}

View File

@@ -130,7 +130,8 @@ public enum ApiType {
InternalEtbReplacement(ETBReplacementEffect.class, CanPlayAsDrawbackAi.class),
InternalLegendaryRule(CharmEffect.class, LegendaryRuleAi.class); // Charm has empty resolve blocks, may act as a dummy
InternalLegendaryRule(CharmEffect.class, LegendaryRuleAi.class), // Charm has empty resolve blocks, may act as a dummy
InternalHaunt(CharmEffect.class, HauntAi.class);
private final Class<? extends SpellAbilityEffect> clsEffect;
private final Class<? extends SpellAbilityAi> clsAi;

View File

@@ -587,10 +587,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (decider == null) {
decider = player;
}
if (decider.isComputer()) {
ChangeZoneAi.hiddenOriginResolveAI(decider, sa, player);
} else {
if (decider.isHuman()) {
changeHiddenOriginResolveHuman(decider, sa, player);
} else {
ChangeZoneAi.hiddenOriginResolveAI(decider, sa, player);
}
}
}

View File

@@ -19,8 +19,6 @@ public abstract class LobbyPlayer implements IHasIcon {
@Deprecated
public boolean isHuman() { return getType() == PlayerType.HUMAN; }
@Deprecated
public boolean isComputer() { return getType() == PlayerType.COMPUTER; }
protected final String name;
protected String imageKey;

View File

@@ -247,8 +247,6 @@ public class Player extends GameEntity implements Comparable<Player> {
@Deprecated
public boolean isHuman() { return getLobbyPlayer().isHuman(); }
@Deprecated
public boolean isComputer() { return getLobbyPlayer().isComputer(); }
public boolean isArchenemy() {
@@ -1368,7 +1366,7 @@ public class Player extends GameEntity implements Comparable<Player> {
c = game.getAction().moveToHand(c);
drawn.add(c);
if ((this.numDrawnThisTurn == 0) && this.isComputer()) {
if (this.numDrawnThisTurn == 0) {
boolean reveal = false;
final List<Card> cards = this.getCardsIn(ZoneType.Battlefield);
for (final Card card : cards) {
@@ -1378,7 +1376,7 @@ public class Player extends GameEntity implements Comparable<Player> {
}
}
if (reveal) {
game.getAction().reveal("Revealing the first card drawn", drawn, this, false);
game.getAction().reveal("Revealing the first card drawn", drawn, this, true);
}
}

View File

@@ -56,6 +56,8 @@ import forge.util.TextUtil;
public abstract class SpellAbility extends GameObject implements ISpellAbility {
public static class EmptySa extends SpellAbility {
public EmptySa(Card sourceCard) { super(sourceCard, Cost.Zero); setActivatingPlayer(sourceCard.getController());}
public EmptySa(ApiType api, Card sourceCard) { super(sourceCard, Cost.Zero); setActivatingPlayer(sourceCard.getController()); this.api = api;}
public EmptySa(Card sourceCard, Player activator) { super(sourceCard, Cost.Zero); setActivatingPlayer(activator);}
public EmptySa(ApiType api, Card sourceCard, Player activator) { super(sourceCard, Cost.Zero); setActivatingPlayer(activator); this.api = api;}
@Override public void resolve() {}

View File

@@ -31,13 +31,13 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import forge.FThreads;
import forge.ai.ComputerUtilCard;
import forge.card.mana.ManaCost;
import forge.game.Game;
import forge.game.GameLogEntryType;
import forge.game.GameObject;
import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType;
import forge.game.card.Card;
import forge.game.card.CardFactory;
import forge.game.card.CardFactoryUtil;
@@ -65,7 +65,7 @@ import forge.game.spellability.TargetChoices;
import forge.game.spellability.TargetRestrictions;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType;
import forge.gui.input.InputSelectCardsFromList;
/**
* <p>
@@ -623,17 +623,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
if (!creats.isEmpty()) {
haunterDiesWork.setDescription("");
haunterDiesWork.setTargetRestrictions(new TargetRestrictions("", "Creature".split(" "), "1", "1"));
final Card targetCard;
if (source.getController().isHuman()) {
final InputSelectCardsFromList targetHaunted = new InputSelectCardsFromList(1,1, creats);
targetHaunted.setMessage("Choose target creature to haunt.");
targetHaunted.showAndWait();
targetCard = targetHaunted.getFirstSelected();
} else {
// AI choosing what to haunt
final List<Card> oppCreats = CardLists.filterControlledBy(creats, source.getController().getOpponents());
targetCard = ComputerUtilCard.getWorstCreatureAI(oppCreats.isEmpty() ? creats : oppCreats);
}
final Card targetCard = source.getController().getController().chooseSingleEntityForEffect(creats, new SpellAbility.EmptySa(ApiType.InternalHaunt, source), "Choose target creature to haunt.");
haunterDiesWork.setTargetCard(targetCard);
this.add(haunterDiesWork);
}