Transferring items (with test)
This commit is contained in:
@@ -44,5 +44,7 @@ public class RuleSet {
|
||||
new ToilRule(_modifiersLogic).applyRule();
|
||||
|
||||
new HealByDiscardRule(_modifiersLogic).applyRule();
|
||||
|
||||
new TransferItemRule(_modifiersLogic).applyRule();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,20 @@ import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.common.Zone;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.LotroCardBlueprint;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.actions.TransferPermanentAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractAttachableFPPossession;
|
||||
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersLogic;
|
||||
import com.gempukku.lotro.logic.modifiers.condition.PhaseCondition;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class TransferItemRule {
|
||||
@@ -28,47 +33,43 @@ public class TransferItemRule {
|
||||
Filters.and(Side.FREE_PEOPLE, Filters.inPlay(), Zone.ATTACHED, Filters.or(CardType.POSSESSION, CardType.ARTIFACT)),
|
||||
new PhaseCondition(Phase.FELLOWSHIP), ModifierEffect.EXTRA_ACTION_MODIFIER) {
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getExtraPhaseAction(LotroGame game, PhysicalCard card) {
|
||||
// if (game.getModifiersQuerying().canBeTransferred(game, card)) {
|
||||
// final AbstractAttachableFPPossession attachable = (AbstractAttachableFPPossession) card.getBlueprint();
|
||||
// attachable.getFullValidTargetFilter(card.getOwner(), game)
|
||||
// if (Filters.countActive(game, modifiersQuerying, validTargetFilter)>0
|
||||
// && gameState.getCurrentPhase() == Phase.FELLOWSHIP
|
||||
// && self.getZone() == Zone.ATTACHED) {
|
||||
//
|
||||
// Filter validTransferFilter;
|
||||
//
|
||||
// PhysicalCard attachedToCard = self.getAttachedTo();
|
||||
// LotroCardBlueprint attachedTo = attachedToCard.getBlueprint();
|
||||
// if (attachedTo.getCardType() == CardType.COMPANION) {
|
||||
// validTransferFilter = Filters.and(validTargetFilter,
|
||||
// Filters.or(
|
||||
// CardType.COMPANION,
|
||||
// Filters.allyAtHome));
|
||||
// } else if (attachedTo.isAllyAtHome(gameState.getCurrentSiteNumber(), gameState.getCurrentSiteBlock())) {
|
||||
// validTransferFilter = Filters.and(validTargetFilter,
|
||||
// Filters.or(
|
||||
// CardType.COMPANION,
|
||||
// Filters.allyWithSameHome(attachedToCard)));
|
||||
// } else {
|
||||
// validTransferFilter = Filters.and(validTargetFilter,
|
||||
// Filters.allyWithSameHome(attachedToCard));
|
||||
// }
|
||||
//
|
||||
// validTransferFilter = Filters.and(validTransferFilter,
|
||||
// Filters.not(self.getAttachedTo()),
|
||||
// new Filter() {
|
||||
// @Override
|
||||
// public boolean accepts(LotroGame game, PhysicalCard physicalCard) {
|
||||
// return game.getModifiersQuerying().canHaveTransferredOn(game, self, physicalCard);
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// if (Filters.countActive(game, validTransferFilter)>0)
|
||||
// actions.add(new TransferPermanentAction(self, validTransferFilter));
|
||||
// }
|
||||
// }
|
||||
// appendTransferPossessionAction(actions, game, self, getFullValidTargetFilter(playerId, game, self));
|
||||
public List<? extends ActivateCardAction> getExtraPhaseAction(LotroGame game, final PhysicalCard card) {
|
||||
if (game.getModifiersQuerying().canBeTransferred(game, card)) {
|
||||
final AbstractAttachableFPPossession attachable = (AbstractAttachableFPPossession) card.getBlueprint();
|
||||
final Filter validTargetFilter = attachable.getFullValidTargetFilter(card.getOwner(), game, card);
|
||||
if (Filters.countActive(game, validTargetFilter)>0) {
|
||||
Filter validTransferFilter;
|
||||
|
||||
PhysicalCard attachedToCard = card.getAttachedTo();
|
||||
LotroCardBlueprint attachedTo = attachedToCard.getBlueprint();
|
||||
if (attachedTo.getCardType() == CardType.COMPANION) {
|
||||
validTransferFilter = Filters.and(validTargetFilter,
|
||||
Filters.or(
|
||||
CardType.COMPANION,
|
||||
Filters.allyAtHome));
|
||||
} else if (attachedTo.isAllyAtHome(game.getGameState().getCurrentSiteNumber(), game.getGameState().getCurrentSiteBlock())) {
|
||||
validTransferFilter = Filters.and(validTargetFilter,
|
||||
Filters.or(
|
||||
CardType.COMPANION,
|
||||
Filters.allyWithSameHome(attachedToCard)));
|
||||
} else {
|
||||
validTransferFilter = Filters.and(validTargetFilter,
|
||||
Filters.allyWithSameHome(attachedToCard));
|
||||
}
|
||||
|
||||
validTransferFilter = Filters.and(validTransferFilter,
|
||||
Filters.not(card.getAttachedTo()),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(LotroGame game, PhysicalCard physicalCard) {
|
||||
return game.getModifiersQuerying().canHaveTransferredOn(game, card, physicalCard);
|
||||
}
|
||||
});
|
||||
|
||||
if (Filters.countActive(game, validTransferFilter)>0)
|
||||
return Collections.singletonList(new TransferPermanentAction(card, validTransferFilter));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.gempukku.lotro.at;
|
||||
|
||||
import com.gempukku.lotro.common.Zone;
|
||||
import com.gempukku.lotro.game.CardNotFoundException;
|
||||
import com.gempukku.lotro.game.PhysicalCardImpl;
|
||||
import com.gempukku.lotro.logic.decisions.AwaitingDecision;
|
||||
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
|
||||
public class TransferAtTest extends AbstractAtTest {
|
||||
@Test
|
||||
public void transfer() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
Map<String, Collection<String>> extraCards = new HashMap<String, Collection<String>>();
|
||||
initializeSimplestGame(extraCards);
|
||||
|
||||
PhysicalCardImpl athelas= new PhysicalCardImpl(100, "1_94", P1, _library.getLotroCardBlueprint("1_94"));
|
||||
PhysicalCardImpl aragorn= new PhysicalCardImpl(101, "1_89", P1, _library.getLotroCardBlueprint("1_89"));
|
||||
PhysicalCardImpl boromir= new PhysicalCardImpl(102, "1_96", P1, _library.getLotroCardBlueprint("1_96"));
|
||||
|
||||
_game.getGameState().addCardToZone(_game, aragorn, Zone.FREE_CHARACTERS);
|
||||
_game.getGameState().addCardToZone(_game, boromir, Zone.FREE_CHARACTERS);
|
||||
_game.getGameState().addCardToZone(_game, athelas, Zone.ATTACHED);
|
||||
athelas.attachTo(aragorn);
|
||||
|
||||
skipMulligans();
|
||||
|
||||
final String transferAction = getCardActionId(_userFeedback.getAwaitingDecision(P1), "Transfer");
|
||||
playerDecided(P1, transferAction);
|
||||
|
||||
assertEquals(boromir, athelas.getAttachedTo());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user