mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
move haunt Ai to a separate file
remove isComputer method
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
30
forge-gui/src/main/java/forge/ai/ability/HauntAi.java
Normal file
30
forge-gui/src/main/java/forge/ai/ability/HauntAi.java
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user