mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Sadistic Shell Game
This commit is contained in:
@@ -48,7 +48,6 @@ import forge.util.Lang;
|
||||
import forge.util.TextUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -832,12 +831,8 @@ public final class GameActionUtil {
|
||||
return list;
|
||||
}
|
||||
CardCollection completeList = new CardCollection();
|
||||
PlayerCollection players = new PlayerCollection(game.getPlayers());
|
||||
// CR 613.7m use APNAP
|
||||
int indexAP = players.indexOf(game.getPhaseHandler().getPlayerTurn());
|
||||
if (indexAP != -1) {
|
||||
Collections.rotate(players, - indexAP);
|
||||
}
|
||||
PlayerCollection players = game.getPlayersInTurnOrder(game.getPhaseHandler().getPlayerTurn());
|
||||
for (Player p : players) {
|
||||
CardCollection subList = new CardCollection();
|
||||
for (Card c : list) {
|
||||
|
||||
@@ -279,6 +279,7 @@ public abstract class SpellAbilityEffect {
|
||||
return getPlayers(definedFirst, definedParam, sa, null);
|
||||
}
|
||||
private static PlayerCollection getPlayers(final boolean definedFirst, final String definedParam, final SpellAbility sa, List<Player> resultDuplicate) {
|
||||
Game game = sa.getHostCard().getGame();
|
||||
PlayerCollection resultUnique = null;
|
||||
final boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam));
|
||||
if (useTargets) {
|
||||
@@ -301,10 +302,12 @@ public abstract class SpellAbilityEffect {
|
||||
}
|
||||
|
||||
// try sort in APNAP order
|
||||
int indexAP = resultDuplicate.indexOf(sa.getHostCard().getGame().getPhaseHandler().getPlayerTurn());
|
||||
if (indexAP != -1) {
|
||||
Collections.rotate(resultDuplicate, - indexAP);
|
||||
Player starter = game.getPhaseHandler().getPlayerTurn();
|
||||
if (sa.hasParam("StartingWith")) {
|
||||
starter = AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("StartingWith"), sa).getFirst();
|
||||
}
|
||||
PlayerCollection ordered = game.getPlayersInTurnOrder(starter);
|
||||
resultDuplicate.sort(Comparator.comparingInt(ordered::indexOf));
|
||||
return resultUnique;
|
||||
}
|
||||
|
||||
|
||||
@@ -56,8 +56,7 @@ public class RepeatEachEffect extends SpellAbilityEffect {
|
||||
} else {
|
||||
zone.add(ZoneType.Battlefield);
|
||||
}
|
||||
repeatCards = CardLists.getValidCards(game.getCardsIn(zone),
|
||||
sa.getParam("RepeatCards"), source.getController(), source, sa);
|
||||
repeatCards = CardLists.getValidCards(game.getCardsIn(zone), sa.getParam("RepeatCards"), source.getController(), source, sa);
|
||||
}
|
||||
else if (sa.hasParam(("RepeatSpellAbilities"))) {
|
||||
repeatSas = Lists.newArrayList();
|
||||
@@ -167,18 +166,13 @@ public class RepeatEachEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (sa.hasParam("RepeatPlayers")) {
|
||||
final FCollection<Player> repeatPlayers = AbilityUtils.getDefinedPlayers(source, sa.getParam("RepeatPlayers"), sa);
|
||||
final FCollection<Player> repeatPlayers = getDefinedPlayersOrTargeted(sa, "RepeatPlayers");
|
||||
if (sa.hasParam("ClearRememberedBeforeLoop")) {
|
||||
source.clearRemembered();
|
||||
}
|
||||
boolean optional = sa.hasParam("RepeatOptionalForEachPlayer");
|
||||
boolean nextTurn = sa.hasParam("NextTurnForEachPlayer");
|
||||
if (sa.hasParam("StartingWithActivator")) {
|
||||
int aidx = repeatPlayers.indexOf(activator);
|
||||
if (aidx != -1) {
|
||||
Collections.rotate(repeatPlayers, -aidx);
|
||||
}
|
||||
}
|
||||
|
||||
for (final Player p : repeatPlayers) {
|
||||
if (optional && !p.getController().confirmAction(repeat, null, sa.getParam("RepeatOptionalMessage"), null)) {
|
||||
continue;
|
||||
|
||||
@@ -300,7 +300,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
* Should keep player relations somewhere in the match structure
|
||||
*/
|
||||
public final PlayerCollection getOpponents() {
|
||||
return game.getPlayers().filter(PlayerPredicates.isOpponentOf(this));
|
||||
return game.getPlayersInTurnOrder(this).filter(PlayerPredicates.isOpponentOf(this));
|
||||
}
|
||||
|
||||
public final PlayerCollection getRegisteredOpponents() {
|
||||
|
||||
Reference in New Issue
Block a user