* Performance: memory usage optimization for deck editor (removed bloated usage of ManaCosts -> ManaColor objects, see #7515);

This commit is contained in:
Oleg Agafonov 2021-02-12 14:08:17 +04:00
parent c3d55ea12a
commit 275e996c08
23 changed files with 170 additions and 143 deletions

View file

@ -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()) {

View file

@ -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)

View file

@ -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);
}

View file

@ -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,

View file

@ -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

View file

@ -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;
}

View file

@ -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);

View file

@ -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 {