- Added three bid life cards

This commit is contained in:
swordshine
2014-05-03 12:54:33 +00:00
parent d4783e1b89
commit e933ecc70c
14 changed files with 209 additions and 3 deletions

View File

@@ -21,6 +21,7 @@ public enum ApiType {
Attach (AttachEffect.class),
Balance (BalanceEffect.class),
BecomesBlocked (BecomesBlockedEffect.class),
BidLife (BidLifeEffect.class),
Bond (BondEffect.class),
ChangeTargets (ChangeTargetsEffect.class),
ChangeZone (ChangeZoneEffect.class),

View File

@@ -0,0 +1,81 @@
package forge.game.ability.effects;
import com.google.common.collect.Iterables;
import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityUtils;
import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card;
import forge.game.player.Player;
import forge.game.player.PlayerActionConfirmMode;
import forge.game.spellability.AbilitySub;
import forge.game.spellability.SpellAbility;
import java.util.ArrayList;
import java.util.List;
public class BidLifeEffect extends SpellAbilityEffect {
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility)
*/
@Override
protected String getStackDescription(SpellAbility sa) {
return "Bid Life";
}
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility)
*/
@Override
public void resolve(SpellAbility sa) {
final Card host = sa.getHostCard();
final Player activator = sa.getActivatingPlayer();
final List<Player> bidPlayers = new ArrayList<Player>();
final int startBidding;
if (sa.hasParam("StartBidding")) {
String start = sa.getParam("StartBidding");
if ("Any".equals(start)) {
startBidding = activator.getController().announceRequirements(sa, "Choose a starting bid", true);
} else {
startBidding = AbilityUtils.calculateAmount(host, start, sa);
}
} else {
startBidding = 0;
}
if (sa.hasParam("OtherBidder")) {
bidPlayers.add(activator);
bidPlayers.addAll(AbilityUtils.getDefinedPlayers(host, sa.getParam("OtherBidder"), sa));
} else{
bidPlayers.addAll(activator.getGame().getPlayers());
int pSize = bidPlayers.size();
// start with the activator
while (bidPlayers.contains(activator) && !activator.equals(Iterables.getFirst(bidPlayers, null))) {
bidPlayers.add(pSize - 1, bidPlayers.remove(0));
}
}
boolean willBid = true;
Player winner = activator;
int bid = startBidding;
while (willBid) {
willBid = false;
for (final Player p : bidPlayers) {
final boolean result = p.getController().confirmBidAction(sa, PlayerActionConfirmMode.BidLife,
"Do you want to top bid? Current Bid =" + String.valueOf(bid), bid, winner);
willBid |= result;
if (result) { // a different choose number
bid += p.getController().chooseNumber(sa, "Bid life:", 1, 9);
winner = p;
}
}
}
host.setChosenNumber(bid);
host.addRemembered(winner);
final SpellAbility action = AbilityFactory.getAbility(host.getSVar(sa.getParam("BidSubAbility")), host);
action.setActivatingPlayer(sa.getActivatingPlayer());
((AbilitySub) action).setParent(sa);
AbilityUtils.resolve(action);
host.clearRemembered();
}
}

View File

@@ -11,6 +11,7 @@ public enum PlayerActionConfirmMode {
ChangeZoneToAltDestination,
ChangeZoneFromAltSource,
ChangeZoneGeneral,
BidLife,
Tribute;
// Ripple;

View File

@@ -143,6 +143,7 @@ public abstract class PlayerController {
public abstract SpellAbility chooseSingleSpellForEffect(List<SpellAbility> spells, SpellAbility sa, String title);
public abstract boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message);
public abstract boolean confirmBidAction(SpellAbility sa, PlayerActionConfirmMode bidlife, String string, int bid, Player winner);
public abstract boolean confirmStaticApplication(Card hostCard, GameEntity affected, String logic, String message);
public abstract boolean confirmTrigger(SpellAbility sa, Trigger regtrig, Map<String, String> triggerParams, boolean isMandatory);
public abstract boolean getWillPlayOnFirstTurn(boolean isFirstGame);
@@ -234,8 +235,6 @@ public abstract class PlayerController {
public abstract String chooseCardName(SpellAbility sa, Predicate<PaperCard> cpp, String valid, String message);
// better to have this odd method than those if playerType comparison in ChangeZone
public abstract Card chooseSingleCardForZoneChange(ZoneType destination, List<ZoneType> origin, SpellAbility sa, List<Card> fetchList, String selectPrompt, boolean b, Player decider);
public abstract Card chooseSingleCardForZoneChange(ZoneType destination, List<ZoneType> origin, SpellAbility sa, List<Card> fetchList, String selectPrompt, boolean b, Player decider);
}