mirror of
https://github.com/correl/mage.git
synced 2024-12-25 03:00:15 +00:00
Added condition hints with good/bad icons for cards
This commit is contained in:
parent
2a63314714
commit
043a7af086
8 changed files with 70 additions and 70 deletions
|
@ -1,14 +1,9 @@
|
||||||
package mage.client.util.gui;
|
package mage.client.util.gui;
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Locale;
|
|
||||||
import javax.swing.*;
|
|
||||||
import mage.client.dialog.PreferencesDialog;
|
|
||||||
import static mage.client.dialog.PreferencesDialog.KEY_MAGE_PANEL_LAST_SIZE;
|
|
||||||
import mage.client.MageFrame;
|
import mage.client.MageFrame;
|
||||||
|
import mage.client.dialog.PreferencesDialog;
|
||||||
|
import mage.client.table.PlayersChatPanel;
|
||||||
import mage.client.util.GUISizeHelper;
|
import mage.client.util.GUISizeHelper;
|
||||||
import mage.client.table.*;
|
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import mage.view.CardView;
|
import mage.view.CardView;
|
||||||
import mage.view.CounterView;
|
import mage.view.CounterView;
|
||||||
|
@ -17,6 +12,13 @@ import org.jdesktop.swingx.JXPanel;
|
||||||
import org.mage.card.arcane.ManaSymbols;
|
import org.mage.card.arcane.ManaSymbols;
|
||||||
import org.mage.card.arcane.UI;
|
import org.mage.card.arcane.UI;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import static mage.client.dialog.PreferencesDialog.KEY_MAGE_PANEL_LAST_SIZE;
|
||||||
|
|
||||||
public final class GuiDisplayUtil {
|
public final class GuiDisplayUtil {
|
||||||
|
|
||||||
private static final Font cardNameFont = new Font("Calibri", Font.BOLD, 15);
|
private static final Font cardNameFont = new Font("Calibri", Font.BOLD, 15);
|
||||||
|
@ -30,32 +32,32 @@ public final class GuiDisplayUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void restoreDividerLocations(Rectangle bounds, String lastDividerLocation, JComponent component) {
|
public static void restoreDividerLocations(Rectangle bounds, String lastDividerLocation, JComponent component) {
|
||||||
String currentBounds = Double.toString(bounds.getWidth()) + 'x' + Double.toString(bounds.getHeight());
|
String currentBounds = Double.toString(bounds.getWidth()) + 'x' + bounds.getHeight();
|
||||||
String savedBounds = PreferencesDialog.getCachedValue(KEY_MAGE_PANEL_LAST_SIZE, null);
|
String savedBounds = PreferencesDialog.getCachedValue(KEY_MAGE_PANEL_LAST_SIZE, null);
|
||||||
// use divider positions only if screen size is the same as it was the time the settings were saved
|
// use divider positions only if screen size is the same as it was the time the settings were saved
|
||||||
if (savedBounds != null && savedBounds.equals(currentBounds)) {
|
if (savedBounds != null && savedBounds.equals(currentBounds)) {
|
||||||
if (lastDividerLocation != null && component != null) {
|
if (lastDividerLocation != null && component != null) {
|
||||||
if (component instanceof JSplitPane) {
|
if (component instanceof JSplitPane) {
|
||||||
JSplitPane jSplitPane = (JSplitPane) component;
|
JSplitPane jSplitPane = (JSplitPane) component;
|
||||||
jSplitPane.setDividerLocation(Integer.parseInt(lastDividerLocation));
|
jSplitPane.setDividerLocation(Integer.parseInt(lastDividerLocation));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (component instanceof PlayersChatPanel) {
|
if (component instanceof PlayersChatPanel) {
|
||||||
PlayersChatPanel playerChatPanel = (PlayersChatPanel) component;
|
PlayersChatPanel playerChatPanel = (PlayersChatPanel) component;
|
||||||
playerChatPanel.setSplitDividerLocation(Integer.parseInt(lastDividerLocation));
|
playerChatPanel.setSplitDividerLocation(Integer.parseInt(lastDividerLocation));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveCurrentBoundsToPrefs() {
|
public static void saveCurrentBoundsToPrefs() {
|
||||||
Rectangle rec = MageFrame.getDesktop().getBounds();
|
Rectangle rec = MageFrame.getDesktop().getBounds();
|
||||||
String currentBounds = Double.toString(rec.getWidth()) + 'x' + Double.toString(rec.getHeight());
|
String currentBounds = Double.toString(rec.getWidth()) + 'x' + rec.getHeight();
|
||||||
PreferencesDialog.saveValue(KEY_MAGE_PANEL_LAST_SIZE, currentBounds);
|
PreferencesDialog.saveValue(KEY_MAGE_PANEL_LAST_SIZE, currentBounds);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveDividerLocationToPrefs(String dividerPrefKey, int position) {
|
public static void saveDividerLocationToPrefs(String dividerPrefKey, int position) {
|
||||||
PreferencesDialog.saveValue(dividerPrefKey, Integer.toString(position));
|
PreferencesDialog.saveValue(dividerPrefKey, Integer.toString(position));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JXPanel getDescription(CardView card, int width, int height) {
|
public static JXPanel getDescription(CardView card, int width, int height) {
|
||||||
|
@ -204,6 +206,10 @@ public final class GuiDisplayUtil {
|
||||||
return textLines;
|
return textLines;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getHintIconHtml(String iconName, int symbolSize) {
|
||||||
|
return "<img src='" + getResourcePath("hint/" + iconName + ".png") + "' alt='" + iconName + "' width=" + symbolSize + " height=" + symbolSize + ">";
|
||||||
|
}
|
||||||
|
|
||||||
public static StringBuilder getRulefromCardView(CardView card, TextLines textLines) {
|
public static StringBuilder getRulefromCardView(CardView card, TextLines textLines) {
|
||||||
String manaCost = "";
|
String manaCost = "";
|
||||||
for (String m : card.getManaCost()) {
|
for (String m : card.getManaCost()) {
|
||||||
|
@ -236,7 +242,7 @@ public final class GuiDisplayUtil {
|
||||||
buffer.append("<tr><td valign='top'><b>");
|
buffer.append("<tr><td valign='top'><b>");
|
||||||
buffer.append(card.getDisplayName());
|
buffer.append(card.getDisplayName());
|
||||||
if (card.isGameObject()) {
|
if (card.isGameObject()) {
|
||||||
buffer.append(" [").append(card.getId().toString().substring(0, 3)).append(']');
|
buffer.append(" [").append(card.getId().toString(), 0, 3).append(']');
|
||||||
}
|
}
|
||||||
buffer.append("</b></td><td align='right' valign='top' style='width:");
|
buffer.append("</b></td><td align='right' valign='top' style='width:");
|
||||||
buffer.append(symbolCount * GUISizeHelper.cardTooltipFontSize);
|
buffer.append(symbolCount * GUISizeHelper.cardTooltipFontSize);
|
||||||
|
|
|
@ -1,43 +1,6 @@
|
||||||
package org.mage.card.arcane;
|
package org.mage.card.arcane;
|
||||||
|
|
||||||
import java.awt.Color;
|
import mage.abilities.hint.HintUtils;
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.awt.Graphics;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.Image;
|
|
||||||
import java.awt.Rectangle;
|
|
||||||
import java.awt.RenderingHints;
|
|
||||||
import java.awt.Toolkit;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.awt.image.FilteredImageSource;
|
|
||||||
import java.awt.image.ImageProducer;
|
|
||||||
import java.awt.image.RGBImageFilter;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.file.FileSystems;
|
|
||||||
import java.nio.file.FileVisitResult;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.PathMatcher;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.nio.file.SimpleFileVisitor;
|
|
||||||
import java.nio.file.StandardCopyOption;
|
|
||||||
import java.nio.file.attribute.BasicFileAttributes;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.StringTokenizer;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
import java.util.stream.IntStream;
|
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
import javax.swing.*;
|
|
||||||
|
|
||||||
import mage.cards.repository.ExpansionRepository;
|
import mage.cards.repository.ExpansionRepository;
|
||||||
import mage.client.MageFrame;
|
import mage.client.MageFrame;
|
||||||
import mage.client.constants.Constants;
|
import mage.client.constants.Constants;
|
||||||
|
@ -46,6 +9,7 @@ import mage.client.constants.Constants.ResourceSymbolSize;
|
||||||
import mage.client.util.GUISizeHelper;
|
import mage.client.util.GUISizeHelper;
|
||||||
import mage.client.util.ImageHelper;
|
import mage.client.util.ImageHelper;
|
||||||
import mage.client.util.gui.BufferedImageBuilder;
|
import mage.client.util.gui.BufferedImageBuilder;
|
||||||
|
import mage.client.util.gui.GuiDisplayUtil;
|
||||||
import mage.utils.StreamUtils;
|
import mage.utils.StreamUtils;
|
||||||
import org.apache.batik.dom.svg.SVGDOMImplementation;
|
import org.apache.batik.dom.svg.SVGDOMImplementation;
|
||||||
import org.apache.batik.transcoder.TranscoderException;
|
import org.apache.batik.transcoder.TranscoderException;
|
||||||
|
@ -57,6 +21,26 @@ import org.apache.batik.util.SVGConstants;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.mage.plugins.card.utils.CardImageUtils;
|
import org.mage.plugins.card.utils.CardImageUtils;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.FilteredImageSource;
|
||||||
|
import java.awt.image.ImageProducer;
|
||||||
|
import java.awt.image.RGBImageFilter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.*;
|
||||||
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import static org.mage.plugins.card.utils.CardImageUtils.getImagesDir;
|
import static org.mage.plugins.card.utils.CardImageUtils.getImagesDir;
|
||||||
|
|
||||||
public final class ManaSymbols {
|
public final class ManaSymbols {
|
||||||
|
@ -784,7 +768,15 @@ public final class ManaSymbols {
|
||||||
"<img src='" + filePathToUrl(htmlImagesPath) + "$1$2" + ".png' alt='$1$2' width="
|
"<img src='" + filePathToUrl(htmlImagesPath) + "$1$2" + ".png' alt='$1$2' width="
|
||||||
+ symbolSize + " height=" + symbolSize + '>');
|
+ symbolSize + " height=" + symbolSize + '>');
|
||||||
|
|
||||||
// ignore data restore
|
// replace hint icons
|
||||||
|
if (replaced.contains(HintUtils.HINT_ICON_GOOD)) {
|
||||||
|
replaced = replaced.replace(HintUtils.HINT_ICON_GOOD, GuiDisplayUtil.getHintIconHtml("good", symbolSize) + " ");
|
||||||
|
}
|
||||||
|
if (replaced.contains(HintUtils.HINT_ICON_BAD)) {
|
||||||
|
replaced = replaced.replace(HintUtils.HINT_ICON_BAD, GuiDisplayUtil.getHintIconHtml("bad", symbolSize) + " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
// ignored data restore
|
||||||
replaced = replaced
|
replaced = replaced
|
||||||
.replace("|source|", "{source}")
|
.replace("|source|", "{source}")
|
||||||
.replace("|this|", "{this}")
|
.replace("|this|", "{this}")
|
||||||
|
|
BIN
Mage.Client/src/main/resources/hint/bad.png
Normal file
BIN
Mage.Client/src/main/resources/hint/bad.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
BIN
Mage.Client/src/main/resources/hint/bad_old.png
Normal file
BIN
Mage.Client/src/main/resources/hint/bad_old.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
BIN
Mage.Client/src/main/resources/hint/good.png
Normal file
BIN
Mage.Client/src/main/resources/hint/good.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.4 KiB |
BIN
Mage.Client/src/main/resources/hint/good_old.png
Normal file
BIN
Mage.Client/src/main/resources/hint/good_old.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
|
@ -1,13 +1,12 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.condition.common.CitysBlessingCondition;
|
import mage.abilities.condition.common.CitysBlessingCondition;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
import mage.abilities.decorator.ConditionalActivatedAbility;
|
import mage.abilities.decorator.ConditionalActivatedAbility;
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.abilities.hint.ConditionHint;
|
||||||
import mage.abilities.keyword.AscendAbility;
|
import mage.abilities.keyword.AscendAbility;
|
||||||
import mage.abilities.mana.ColorlessManaAbility;
|
import mage.abilities.mana.ColorlessManaAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
@ -15,8 +14,9 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class ArchOfOrazca extends CardImpl {
|
public final class ArchOfOrazca extends CardImpl {
|
||||||
|
@ -36,6 +36,7 @@ public final class ArchOfOrazca extends CardImpl {
|
||||||
new GenericManaCost(5),
|
new GenericManaCost(5),
|
||||||
CitysBlessingCondition.instance);
|
CitysBlessingCondition.instance);
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
|
ability.addHint(new ConditionHint(CitysBlessingCondition.instance, "Have city's blessing"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,9 @@ import java.awt.*;
|
||||||
*/
|
*/
|
||||||
public class HintUtils {
|
public class HintUtils {
|
||||||
|
|
||||||
public static final String HINT_ICON_GOOD = " GOOD_ICON "; // TODO: icon
|
// icons changes to real files on client side (see mana icons replacement)
|
||||||
public static final String HINT_ICON_BAD = " BAD_ICON "; // TODO: icon
|
public static final String HINT_ICON_GOOD = "ICON_GOOD";
|
||||||
|
public static final String HINT_ICON_BAD = "ICON_BAD";
|
||||||
|
|
||||||
public static String prepareText(String text, Color color) {
|
public static String prepareText(String text, Color color) {
|
||||||
return prepareText(text, color, null);
|
return prepareText(text, color, null);
|
||||||
|
|
Loading…
Reference in a new issue