Merge branch 'master' into BrawlFormat

This commit is contained in:
maustin
2018-03-30 08:06:39 +01:00
5 changed files with 81 additions and 25 deletions

View File

@@ -172,11 +172,12 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
Date today = new Date(); Date today = new Date();
for (CardEdition e : editions.getOrderedEditions()) { for (CardEdition e : editions.getOrderedEditions()) {
boolean isCoreExpSet = e.getType() == CardEdition.Type.CORE || e.getType() == CardEdition.Type.EXPANSION || e.getType() == CardEdition.Type.REPRINT; boolean coreOrExpSet = e.getType() == CardEdition.Type.CORE || e.getType() == CardEdition.Type.EXPANSION;
boolean isCoreExpSet = coreOrExpSet || e.getType() == CardEdition.Type.REPRINT;
if (logMissingPerEdition && isCoreExpSet) { if (logMissingPerEdition && isCoreExpSet) {
System.out.print(e.getName() + " (" + e.getCards().length + " cards)"); System.out.print(e.getName() + " (" + e.getCards().length + " cards)");
} }
if (e.getDate().after(today)) { if (coreOrExpSet && e.getDate().after(today)) {
upcomingSet = e; upcomingSet = e;
} }

View File

@@ -77,10 +77,14 @@ public class StaticAbilityCantTarget {
return false; return false;
} }
if (params.containsKey("SourceCanOnlyTarget") if (spellAbility.getParam("ValidTgts")!=null &&
(params.containsKey("SourceCanOnlyTarget")
&& (!spellAbility.getParam("ValidTgts").contains(params.get("SourceCanOnlyTarget")) && (!spellAbility.getParam("ValidTgts").contains(params.get("SourceCanOnlyTarget"))
|| spellAbility.getParam("ValidTgts").contains(",")) || spellAbility.getParam("ValidTgts").contains(","))
|| spellAbility.getParam("ValidTgts").contains("non" + params.get("SourceCanOnlyTarget"))) { || spellAbility.getParam("ValidTgts").contains("non" + params.get("SourceCanOnlyTarget")
)
)
){
return false; return false;
} }

View File

@@ -37,6 +37,7 @@ public class WrappedAbility extends Ability {
regtrig = regtrig0; regtrig = regtrig0;
sa = sa0; sa = sa0;
decider = decider0; decider = decider0;
sa.setDescription(this.getStackDescription());
} }
public SpellAbility getWrappedAbility() { public SpellAbility getWrappedAbility() {
@@ -48,7 +49,7 @@ public class WrappedAbility extends Ability {
return true; return true;
} }
public Trigger getTrigger(){ public Trigger getTrigger() {
return regtrig; return regtrig;
} }
@@ -289,8 +290,6 @@ public class WrappedAbility extends Ability {
return sa.isXCost(); return sa.isXCost();
} }
@Override @Override
public String getSvarWithFallback(String name) { public String getSvarWithFallback(String name) {
return sa.getSvarWithFallback(name); return sa.getSvarWithFallback(name);

View File

@@ -2,6 +2,7 @@ package forge.gui;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.FontMetrics;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter; import java.awt.event.FocusAdapter;
@@ -21,6 +22,7 @@ import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener; import javax.swing.event.ListSelectionListener;
import forge.Singletons;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardView; import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView; import forge.game.card.CardView.CardStateView;
@@ -176,10 +178,6 @@ public class DualListBox<T> extends FDialog {
rightPanel.add(new FScrollPane(destList, true), BorderLayout.CENTER); rightPanel.add(new FScrollPane(destList, true), BorderLayout.CENTER);
rightPanel.add(autoButton, BorderLayout.SOUTH); rightPanel.add(autoButton, BorderLayout.SOUTH);
add(leftPanel, "w 250, h 300");
add(centerPanel, "w 100, h 300");
add(rightPanel, "w 250, h 300");
_addListListeners(sourceList); _addListListeners(sourceList);
_addListListeners(destList); _addListListeners(destList);
@@ -205,6 +203,12 @@ public class DualListBox<T> extends FDialog {
}); });
} }
int columnWidth = getColumnWidth();
String listConstraints = "w " + columnWidth + ", h 300";
add(leftPanel, listConstraints);
add(centerPanel, "w 100, h 300");
add(rightPanel, listConstraints);
_setButtonState(); _setButtonState();
if (remainingSourcesMin <= sourceElements.size() && remainingSourcesMax >= sourceElements.size()) { if (remainingSourcesMin <= sourceElements.size() && remainingSourcesMax >= sourceElements.size()) {
@@ -218,6 +222,39 @@ public class DualListBox<T> extends FDialog {
} }
} }
private int getMaxElementWidth(UnsortedListModel<T> model) {
final FontMetrics metrics = this.getFontMetrics(this.getFont());
int width = 0;
for (int i = 0; i < model.getSize(); i++) {
final int itemWidth = metrics.stringWidth(model.getElementAt(i).toString());
if (itemWidth > width) {
width = itemWidth;
}
}
return width;
}
private int getColumnWidth() {
int width = 0;
int srcWidth = getMaxElementWidth(this.sourceListModel);
if (srcWidth > width) {
width = srcWidth;
}
int dstWidth = getMaxElementWidth(this.destListModel);
if (dstWidth > width) {
width = dstWidth;
}
final int minWidth = 250;
if (width < minWidth) {
width = minWidth;
}
final int maxWidth = (Singletons.getView().getFrame().getWidth()/2) - 100;
if (width > maxWidth) {
width = maxWidth;
}
return width;
}
public void setSecondColumnLabelText(String label) { public void setSecondColumnLabelText(String label) {
orderedLabel.setText(label); orderedLabel.setText(label);
} }

View File

@@ -1537,23 +1537,38 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
} }
if (needPrompt) { if (needPrompt) {
List<Integer> savedOrder = orderedSALookup.get(saLookupKey); List<Integer> savedOrder = orderedSALookup.get(saLookupKey);
List<SpellAbilityView> orderedSAVs = Lists.newArrayList();
// create a mapping between a spell's view and the spell itself
HashMap<SpellAbilityView, SpellAbility> spellViewCache = new HashMap<>();
for (SpellAbility spellAbility : orderedSAs) {
spellViewCache.put(spellAbility.getView(), spellAbility);
}
if (savedOrder != null) { if (savedOrder != null) {
orderedSAs = Lists.newArrayList(); orderedSAVs = Lists.newArrayList();
for (Integer index : savedOrder) { for (Integer index : savedOrder) {
orderedSAs.add(activePlayerSAs.get(index)); orderedSAVs.add(activePlayerSAs.get(index).getView());
}
} else {
for (SpellAbility spellAbility : orderedSAs) {
orderedSAVs.add(spellAbility.getView());
} }
} }
if (savedOrder != null) { if (savedOrder != null) {
boolean preselect = FModel.getPreferences() boolean preselect = FModel.getPreferences()
.getPrefBoolean(FPref.UI_PRESELECT_PREVIOUS_ABILITY_ORDER); .getPrefBoolean(FPref.UI_PRESELECT_PREVIOUS_ABILITY_ORDER);
orderedSAs = getGui().order("Reorder simultaneous abilities", "Resolve first", 0, 0, orderedSAVs = getGui().order("Reorder simultaneous abilities", "Resolve first", 0, 0,
preselect ? Lists.<SpellAbility>newArrayList() : orderedSAs, preselect ? Lists.<SpellAbilityView>newArrayList() : orderedSAVs,
preselect ? orderedSAs : Lists.<SpellAbility>newArrayList(), null, false); preselect ? orderedSAVs : Lists.<SpellAbilityView>newArrayList(), null, false);
} else { } else {
orderedSAs = getGui().order("Select order for simultaneous abilities", "Resolve first", orderedSAs, orderedSAVs = getGui().order("Select order for simultaneous abilities", "Resolve first", orderedSAVs,
null); null);
} }
orderedSAs = Lists.newArrayList();
for (SpellAbilityView spellAbilityView : orderedSAVs) {
orderedSAs.add(spellViewCache.get(spellAbilityView));
}
// save order to avoid needing to prompt a second time to order // save order to avoid needing to prompt a second time to order
// the same abilities // the same abilities
savedOrder = Lists.newArrayListWithCapacity(activePlayerSAs.size()); savedOrder = Lists.newArrayListWithCapacity(activePlayerSAs.size());