mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 04:52:07 -08:00
* Performance: memory usage optimization for deck editor (removed bloated usage of ManaCosts -> ManaColor objects, see #7515);
This commit is contained in:
parent
c3d55ea12a
commit
275e996c08
23 changed files with 170 additions and 143 deletions
|
|
@ -1398,11 +1398,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
}
|
||||
// Casting cost
|
||||
if (!s) {
|
||||
String mc = "";
|
||||
for (String m : card.getManaCost()) {
|
||||
mc += m;
|
||||
}
|
||||
s |= mc.toLowerCase(Locale.ENGLISH).contains(searchStr);
|
||||
s |= card.getManaCostStr().toLowerCase(Locale.ENGLISH).contains(searchStr);
|
||||
}
|
||||
// Rules
|
||||
if (!s) {
|
||||
|
|
@ -1473,10 +1469,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
}
|
||||
|
||||
// Mana Cost
|
||||
String mc = "";
|
||||
for (String m : card.getManaCost()) {
|
||||
mc += m;
|
||||
}
|
||||
String mc = card.getManaCostStr();
|
||||
mc = mc.replaceAll("\\{([WUBRG]).([WUBRG])\\}", "{$1}{$2}");
|
||||
mc = mc.replaceAll("\\{", "#");
|
||||
mc = mc.replaceAll("#2\\/", "#");
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
|
|||
return c.getDisplayFullName(); // show full name in deck editor table, e.g. adventure with spell name
|
||||
case 2:
|
||||
// new svg images version
|
||||
return ManaSymbols.getStringManaCost(c.getManaCost());
|
||||
return ManaSymbols.getClearManaCost(c.getManaCostStr());
|
||||
/*
|
||||
// old html images version
|
||||
String manaCost = "";
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public class CardViewColorIdentityComparator implements CardViewComparator {
|
|||
}
|
||||
|
||||
public static FilterMana calcIdentity(CardView cardView) {
|
||||
return ManaUtil.getColorIdentity(cardView.getColor(), cardView.getManaCost(), cardView.getRules(), null);
|
||||
return ManaUtil.getColorIdentity(cardView.getColor(), cardView.getManaCostStr(), cardView.getRules(), null);
|
||||
}
|
||||
|
||||
public static int calcHash(CardView cardView) {
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ public final class GuiDisplayUtil {
|
|||
j.add(cardText);
|
||||
|
||||
TextLines textLines = GuiDisplayUtil.getTextLinesfromCardView(card);
|
||||
cardText.setText(getRulefromCardView(card, textLines).toString());
|
||||
cardText.setText(getRulesFromCardView(card, textLines).toString());
|
||||
|
||||
descriptionPanel.add(j);
|
||||
|
||||
|
|
@ -227,11 +227,8 @@ public final class GuiDisplayUtil {
|
|||
return "<img src='" + getResourcePath("hint/" + iconName + ".png") + "' alt='" + iconName + "' width=" + symbolSize + " height=" + symbolSize + ">";
|
||||
}
|
||||
|
||||
public static StringBuilder getRulefromCardView(CardView card, TextLines textLines) {
|
||||
String manaCost = "";
|
||||
for (String m : card.getManaCost()) {
|
||||
manaCost += m;
|
||||
}
|
||||
public static StringBuilder getRulesFromCardView(CardView card, TextLines textLines) {
|
||||
String manaCost = card.getManaCostStr();
|
||||
String castingCost = UI.getDisplayManaCost(manaCost);
|
||||
castingCost = ManaSymbols.replaceSymbolsWithHTML(castingCost, ManaSymbols.Type.TOOLTIP);
|
||||
|
||||
|
|
@ -347,9 +344,9 @@ public final class GuiDisplayUtil {
|
|||
rule.append("<tr><td valign='top'><b>");
|
||||
rule.append(card.getLeftSplitName());
|
||||
rule.append("</b></td><td align='right' valign='top' style='width:");
|
||||
rule.append(card.getLeftSplitCosts().getSymbols().size() * GUISizeHelper.symbolTooltipSize + 1);
|
||||
rule.append(ManaSymbols.getClearManaSymbolsCount(card.getLeftSplitCostsStr()) * GUISizeHelper.symbolTooltipSize + 1);
|
||||
rule.append("px'>");
|
||||
rule.append(card.getLeftSplitCosts().getText());
|
||||
rule.append(card.getLeftSplitCostsStr());
|
||||
rule.append("</td></tr></table>");
|
||||
for (String ruling : card.getLeftSplitRules()) {
|
||||
if (ruling != null && !ruling.replace(".", "").trim().isEmpty()) {
|
||||
|
|
@ -362,9 +359,9 @@ public final class GuiDisplayUtil {
|
|||
rule.append("<tr><td valign='top'><b>");
|
||||
rule.append(card.getRightSplitName());
|
||||
rule.append("</b></td><td align='right' valign='top' style='width:");
|
||||
rule.append(card.getRightSplitCosts().getSymbols().size() * GUISizeHelper.symbolTooltipSize + 1);
|
||||
rule.append(ManaSymbols.getClearManaSymbolsCount(card.getRightSplitCostsStr()) * GUISizeHelper.symbolTooltipSize + 1);
|
||||
rule.append("px'>");
|
||||
rule.append(card.getRightSplitCosts().getText());
|
||||
rule.append(card.getRightSplitCostsStr());
|
||||
rule.append("</td></tr></table>");
|
||||
for (String ruling : card.getRightSplitRules()) {
|
||||
if (ruling != null && !ruling.replace(".", "").trim().isEmpty()) {
|
||||
|
|
|
|||
|
|
@ -789,8 +789,8 @@ public abstract class CardPanel extends MagePermanent implements ComponentListen
|
|||
}
|
||||
} else {
|
||||
sb.append(card.getName());
|
||||
if (!card.getManaCost().isEmpty()) {
|
||||
sb.append('\n').append(card.getManaCost());
|
||||
if (!card.getManaCostStr().isEmpty()) {
|
||||
sb.append('\n').append(card.getManaCostStr());
|
||||
}
|
||||
sb.append('\n').append(cardType);
|
||||
if (card.getColor().hasColor()) {
|
||||
|
|
|
|||
|
|
@ -529,7 +529,7 @@ public class CardPanelRenderModeImage extends CardPanel {
|
|||
|
||||
int symbolMarginX = 2; // 2 px between icons
|
||||
|
||||
String manaCost = ManaSymbols.getStringManaCost(getGameCard().getManaCost());
|
||||
String manaCost = ManaSymbols.getClearManaCost(getGameCard().getManaCostStr());
|
||||
int manaWidth = getManaWidth(manaCost, symbolMarginX);
|
||||
|
||||
// right top corner with margin (sizes from any sample card, length from black border to mana icon)
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ public class CardPanelRenderModeMTGO extends CardPanel {
|
|||
if (!a.getSuperTypes().equals(b.getSuperTypes())) {
|
||||
return false;
|
||||
}
|
||||
if (!a.getManaCost().equals(b.getManaCost())) {
|
||||
if (!a.getManaCostStr().equals(b.getManaCostStr())) {
|
||||
return false;
|
||||
}
|
||||
if (!a.getRules().equals(b.getRules())) {
|
||||
|
|
@ -166,9 +166,7 @@ public class CardPanelRenderModeMTGO extends CardPanel {
|
|||
for (SubType s : this.view.getSubTypes()) {
|
||||
sb.append(s);
|
||||
}
|
||||
for (String s : this.view.getManaCost()) {
|
||||
sb.append(s);
|
||||
}
|
||||
sb.append(this.view.getManaCostStr());
|
||||
for (String s : this.view.getRules()) {
|
||||
sb.append(s);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -550,18 +550,35 @@ public final class ManaSymbols {
|
|||
|
||||
}
|
||||
|
||||
public static String getStringManaCost(java.util.List<String> manaCost) {
|
||||
public static String getClearManaCost(java.util.List<String> manaCost) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (String s : manaCost) {
|
||||
sb.append(s);
|
||||
}
|
||||
return sb.toString()
|
||||
return getClearManaCost(sb.toString());
|
||||
}
|
||||
|
||||
public static String getClearManaCost(String manaCost) {
|
||||
return manaCost
|
||||
.replace("/", "")
|
||||
.replace("{", "")
|
||||
.replace("}", " ")
|
||||
.replace("}", " ") // each mana symbol splits by space
|
||||
.trim();
|
||||
}
|
||||
|
||||
public static int getClearManaSymbolsCount(String manaCost) {
|
||||
// find mana symbols amount in the cost
|
||||
if (manaCost.isEmpty()) {
|
||||
return 0;
|
||||
} else {
|
||||
String clearManaCost = getClearManaCost(manaCost);
|
||||
String checkManaCost = clearManaCost.replace(" ", "");
|
||||
return clearManaCost.length() - checkManaCost.length() + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum Type {
|
||||
TABLE,
|
||||
CHAT,
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ public class ModernCardRenderer extends CardRenderer {
|
|||
super(card);
|
||||
|
||||
// Mana cost string
|
||||
manaCostString = ManaSymbols.getStringManaCost(cardView.getManaCost());
|
||||
manaCostString = ManaSymbols.getClearManaCost(cardView.getManaCostStr());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package org.mage.card.arcane;
|
||||
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.costs.mana.ManaCosts;
|
||||
import mage.cards.ArtRect;
|
||||
import mage.constants.CardType;
|
||||
import mage.view.CardView;
|
||||
|
|
@ -50,11 +49,11 @@ public class ModernSplitCardRenderer extends ModernCardRenderer {
|
|||
public ModernSplitCardRenderer(CardView view) {
|
||||
super(view);
|
||||
|
||||
rightHalf.manaCostString = ManaSymbols.getStringManaCost(cardView.getRightSplitCosts().getSymbols());
|
||||
leftHalf.manaCostString = ManaSymbols.getStringManaCost(cardView.getLeftSplitCosts().getSymbols());
|
||||
rightHalf.manaCostString = ManaSymbols.getClearManaCost(cardView.getRightSplitCostsStr());
|
||||
leftHalf.manaCostString = ManaSymbols.getClearManaCost(cardView.getLeftSplitCostsStr());
|
||||
|
||||
rightHalf.color = getColorFromManaCostHack(cardView.getRightSplitCosts());
|
||||
leftHalf.color = getColorFromManaCostHack(cardView.getLeftSplitCosts());
|
||||
rightHalf.color = getColorFromManaCostHack(cardView.getRightSplitCostsStr());
|
||||
leftHalf.color = getColorFromManaCostHack(cardView.getLeftSplitCostsStr());
|
||||
|
||||
parseRules(view.getRightSplitRules(), rightHalf.keywords, rightHalf.rules);
|
||||
parseRules(view.getLeftSplitRules(), leftHalf.keywords, leftHalf.rules);
|
||||
|
|
@ -129,21 +128,18 @@ public class ModernSplitCardRenderer extends ModernCardRenderer {
|
|||
|
||||
// Ugly hack used here because the card database doesn't actually store color
|
||||
// for each half of split cards separately.
|
||||
private ObjectColor getColorFromManaCostHack(ManaCosts costs) {
|
||||
private ObjectColor getColorFromManaCostHack(String costs) {
|
||||
ObjectColor c = new ObjectColor();
|
||||
List<String> symbols = costs.getSymbols();
|
||||
for (String symbol : symbols) {
|
||||
if (symbol.contains("W")) {
|
||||
c.setWhite(true);
|
||||
} else if (symbol.contains("U")) {
|
||||
c.setBlue(true);
|
||||
} else if (symbol.contains("B")) {
|
||||
c.setBlack(true);
|
||||
} else if (symbol.contains("R")) {
|
||||
c.setRed(true);
|
||||
} else if (symbol.contains("G")) {
|
||||
c.setGreen(true);
|
||||
}
|
||||
if (costs.contains("W")) {
|
||||
c.setWhite(true);
|
||||
} else if (costs.contains("U")) {
|
||||
c.setBlue(true);
|
||||
} else if (costs.contains("B")) {
|
||||
c.setBlack(true);
|
||||
} else if (costs.contains("R")) {
|
||||
c.setRed(true);
|
||||
} else if (costs.contains("G")) {
|
||||
c.setGreen(true);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ public class CardInfoPaneImpl extends JEditorPane implements CardInfoPane {
|
|||
try {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
TextLines textLines = GuiDisplayUtil.getTextLinesfromCardView(card);
|
||||
StringBuilder buffer = GuiDisplayUtil.getRulefromCardView(card, textLines);
|
||||
StringBuilder buffer = GuiDisplayUtil.getRulesFromCardView(card, textLines);
|
||||
resizeTooltipIfNeeded(container, textLines.getBasicTextLength(), textLines.getLines().size());
|
||||
setText(buffer.toString());
|
||||
setCaretPosition(0);
|
||||
|
|
|
|||
|
|
@ -308,6 +308,10 @@ public final class CardImageUtils {
|
|||
// search broken files and delete it (zero size files)
|
||||
// search temp files and delete it (.tmp files from zip library)
|
||||
Path rootPath = new File(CardImageUtils.getImagesDir()).toPath();
|
||||
if (!Files.exists(rootPath)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Collection<Path> brokenFilesList = new ArrayList<>();
|
||||
Collection<Path> tempFilesList = new ArrayList<>();
|
||||
try {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue