package magic.model.choice; import java.util.ArrayList; import java.util.Collection; import java.util.List; import magic.data.GeneralConfig; import magic.exception.UndoClickedException; import magic.model.IUIGameController; import magic.model.MagicGame; import magic.model.MagicPlayer; import magic.model.MagicSource; import magic.model.event.MagicEvent; public class MagicOrChoice extends MagicChoice { // translatable UI text (prefix with _S). private static final String _S1 = "Choose the mode."; private final MagicChoice[] choices; public MagicOrChoice(final String description,final MagicChoice... aChoices) { super(description); choices = aChoices; } public MagicOrChoice(final MagicChoice... choices) { this(_S1, choices); } @Override public MagicTargetChoice getTargetChoice(final Object[] chosen) { final int idx = (Integer)chosen[0] - 1; return idx >= 0 ? choices[idx].getTargetChoice() : MagicTargetChoice.NONE; } @Override public boolean hasOptions(final MagicGame game,final MagicPlayer player,final MagicSource source,final boolean hints) { for (final MagicChoice choice: choices) { if (choice.hasOptions(game, player, source, hints)) { return true; } } return false; } @Override Collection<Object> getArtificialOptions(final MagicGame game, final MagicEvent event) { throw new UnsupportedOperationException(); } @Override public List<Object[]> getArtificialChoiceResults(final MagicGame game, final MagicEvent event) { final MagicPlayer player = event.getPlayer(); final MagicSource source = event.getSource(); final List<Object[]> choiceResultsList=new ArrayList<>(); for (int i = 0; i < choices.length; i++) { if (choices[i].hasOptions(game,player,source,true)) { for (final Object obj : choices[i].getArtificialOptions(game,event)) { choiceResultsList.add(new Object[] { i + 1, obj }); } if (choices[i].isValid() == false) { choiceResultsList.add(new Object[] { i + 1 }); } } } if (choiceResultsList.isEmpty()) { choiceResultsList.add(new Object[]{0}); } return choiceResultsList; } @Override public Object[] getPlayerChoiceResults(final IUIGameController controller, final MagicGame game, final MagicEvent event) throws UndoClickedException { final MagicPlayer player = event.getPlayer(); final MagicSource source = event.getSource(); final boolean hints = GeneralConfig.getInstance().getSmartTarget(); final List<Integer> availableModes = new ArrayList<>(); for (int i = 0; i < choices.length; i++) { if (choices[i].hasOptions(game,player,source,hints)) { availableModes.add(i + 1); } } if (availableModes.isEmpty()) { return new Object[]{0}; } controller.disableActionButton(false); final int mode = controller.getModeChoice(source, availableModes); return choices[mode - 1].isValid() ? new Object[] { mode, choices[mode - 1].getPlayerChoiceResults(controller,game,event)[0] }: new Object[] { mode }; } }