mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Merge branch 'companion-ai' into 'master'
Add "AI" for Companion choosing Closes #1406 See merge request core-developers/forge!2809
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
package forge.ai.ability;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import forge.ai.SpellAbilityAi;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ChooseCompanionAi extends SpellAbilityAi {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.card.ability.SpellAbilityAi#chooseSingleCard(forge.card.spellability.SpellAbility, java.util.List, boolean)
|
||||
*/
|
||||
@Override
|
||||
public Card chooseSingleCard(final Player ai, final SpellAbility sa, Iterable<Card> options, boolean isOptional, Player targetedPlayer) {
|
||||
List<Card> cards = Lists.newArrayList(options);
|
||||
if (cards.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Collections.shuffle(cards);
|
||||
return cards.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ public enum ApiType {
|
||||
Clash (ClashEffect.class),
|
||||
Cleanup (CleanUpEffect.class),
|
||||
Clone (CloneEffect.class),
|
||||
CompanionChoose (ChooseCompanionEffect.class),
|
||||
CopyPermanent (CopyPermanentEffect.class),
|
||||
CopySpellAbility (CopySpellAbilityEffect.class),
|
||||
ControlSpell (ControlSpellEffect.class),
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
public class ChooseCompanionEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
// This isn't a real effect. Just need it for AI choosing.
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,6 @@ package forge.game.player;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.*;
|
||||
|
||||
import forge.ImageKeys;
|
||||
import forge.LobbyPlayer;
|
||||
import forge.card.CardType;
|
||||
@@ -53,11 +52,7 @@ import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.*;
|
||||
import forge.util.collect.FCollection;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
@@ -2914,7 +2909,16 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
|
||||
CardCollectionView view = CardCollection.getView(legalCompanions);
|
||||
|
||||
return controller.chooseSingleEntityForEffect(view, null, Localizer.getInstance().getMessage("lblChooseACompanion"), true);
|
||||
Card firstCompanion = legalCompanions.get(0);
|
||||
SpellAbility fakeSa = AbilityFactory.getAbility(
|
||||
AbilityFactory.AbilityRecordType.Spell,
|
||||
ApiType.CompanionChoose,
|
||||
new HashMap<>(),
|
||||
firstCompanion.getFirstSpellAbility().getPayCosts(),
|
||||
firstCompanion,
|
||||
null
|
||||
);
|
||||
return controller.chooseSingleEntityForEffect(view, fakeSa, Localizer.getInstance().getMessage("lblChooseACompanion"), true);
|
||||
}
|
||||
|
||||
public boolean deckMatchesDeckRestriction(Card source, String restriction) {
|
||||
|
||||
Reference in New Issue
Block a user