mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
- Added three bid life cards
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ public enum PlayerActionConfirmMode {
|
||||
ChangeZoneToAltDestination,
|
||||
ChangeZoneFromAltSource,
|
||||
ChangeZoneGeneral,
|
||||
BidLife,
|
||||
Tribute;
|
||||
// Ripple;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user