GUI: added stacked feature for a same creature tokens (#12256)

This commit is contained in:
grimreap124 2024-05-20 15:15:15 +10:00 committed by GitHub
parent 199345db07
commit f53c9da3e4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 66 additions and 23 deletions

View file

@ -63,7 +63,7 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane {
private javax.swing.Timer gameUpdateTimer; // timer for custom GUI re-drawing (example: update attack arrows) private javax.swing.Timer gameUpdateTimer; // timer for custom GUI re-drawing (example: update attack arrows)
//private static int iCounter = 0; // private static int iCounter = 0;
private boolean addedPermanent; private boolean addedPermanent;
private boolean addedArtifact; private boolean addedArtifact;
private boolean addedCreature; private boolean addedCreature;
@ -89,10 +89,10 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane {
} }
}); });
gameUpdateTimer = new Timer(GAME_REDRAW_TIMEOUT_MS, evt -> SwingUtilities.invokeLater(() -> { gameUpdateTimer = new Timer(GAME_REDRAW_TIMEOUT_MS, evt -> SwingUtilities.invokeLater(() -> {
gameUpdateTimer.stop(); gameUpdateTimer.stop();
ClientCallback updateMessage = new ClientCallback(ClientCallbackMethod.GAME_REDRAW_GUI, gameId); ClientCallback updateMessage = new ClientCallback(ClientCallbackMethod.GAME_REDRAW_GUI, gameId);
MageFrame.getInstance().onCallback(updateMessage); MageFrame.getInstance().onCallback(updateMessage);
})); }));
} }
@ -151,6 +151,32 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane {
} }
MageCard oldFound = permanents.get(permanent.getId()); MageCard oldFound = permanents.get(permanent.getId());
MagePermanent oldMagePermanent = oldFound == null ? null : (MagePermanent) oldFound.getMainPanel(); MagePermanent oldMagePermanent = oldFound == null ? null : (MagePermanent) oldFound.getMainPanel();
// Check if there was a change in the power or toughness of the permanent
int permanentPower = 0;
int permanentToughness = 0;
int oldMagePermanentPower = 0;
int oldMagePermanentToughness = 0;
if (permanent != null && oldMagePermanent != null && permanent.getOriginal() != null
&& oldMagePermanent.getOriginal() != null) {
permanentPower = permanent.getOriginal().getOriginalPower() != null
? permanent.getOriginal().getOriginalPower().getValue()
: 0;
permanentToughness = permanent.getOriginal().getOriginalToughness() != null
? permanent.getOriginal().getOriginalToughness().getValue()
: 0;
oldMagePermanentPower = oldMagePermanent.getOriginal().getOriginalPower() != null
? oldMagePermanent.getOriginal().getOriginalPower().getValue()
: 0;
oldMagePermanentToughness = oldMagePermanent.getOriginal().getOriginalToughness() != null
? oldMagePermanent.getOriginal().getOriginalToughness().getValue()
: 0;
if (permanentPower != oldMagePermanentPower || permanentToughness != oldMagePermanentToughness) {
changed = true;
}
}
if (oldMagePermanent == null) { if (oldMagePermanent == null) {
permanentsToAdd.add(permanent); permanentsToAdd.add(permanent);
changed = true; changed = true;
@ -182,7 +208,8 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane {
if (!changed) { if (!changed) {
UUID attachedToIdBefore = oldMagePermanent.getOriginalPermanent().getAttachedTo(); UUID attachedToIdBefore = oldMagePermanent.getOriginalPermanent().getAttachedTo();
UUID attachedToId = permanent.getAttachedTo(); UUID attachedToId = permanent.getAttachedTo();
if (attachedToIdBefore == null && attachedToId != null || attachedToId == null && attachedToIdBefore != null if (attachedToIdBefore == null && attachedToId != null
|| attachedToId == null && attachedToIdBefore != null
|| (attachedToIdBefore != null && !attachedToIdBefore.equals(attachedToId))) { || (attachedToIdBefore != null && !attachedToIdBefore.equals(attachedToId))) {
changed = true; changed = true;
} }
@ -219,7 +246,7 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane {
removedCreature = false; removedCreature = false;
for (Iterator<Entry<UUID, MageCard>> iterator = permanents.entrySet().iterator(); iterator.hasNext(); ) { for (Iterator<Entry<UUID, MageCard>> iterator = permanents.entrySet().iterator(); iterator.hasNext();) {
Entry<UUID, MageCard> entry = iterator.next(); Entry<UUID, MageCard> entry = iterator.next();
if (!battlefield.containsKey(entry.getKey()) || !battlefield.get(entry.getKey()).isPhasedIn()) { if (!battlefield.containsKey(entry.getKey()) || !battlefield.get(entry.getKey()).isPhasedIn()) {
removePermanent(entry.getKey(), 1); removePermanent(entry.getKey(), 1);
@ -254,13 +281,15 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane {
private void addPermanent(PermanentView permanent, final int count) { private void addPermanent(PermanentView permanent, final int count) {
if (cardDimension == null) { if (cardDimension == null) {
cardDimension = new Dimension(ClientDefaultSettings.dimensions.getFrameWidth(), ClientDefaultSettings.dimensions.getFrameHeight()); cardDimension = new Dimension(ClientDefaultSettings.dimensions.getFrameWidth(),
ClientDefaultSettings.dimensions.getFrameHeight());
} }
final MageCard perm = Plugins.instance.getMagePermanent(permanent, bigCard, new CardIconRenderSettings(), cardDimension, gameId, true, PreferencesDialog.getRenderMode(), true); final MageCard perm = Plugins.instance.getMagePermanent(permanent, bigCard, new CardIconRenderSettings(),
cardDimension, gameId, true, PreferencesDialog.getRenderMode(), true);
perm.setCardContainerRef(jPanel); perm.setCardContainerRef(jPanel);
perm.update(permanent); perm.update(permanent);
// cards sizes changes in parent call by sortLayout // cards sizes changes in parent call by sortLayout
//perm.setCardBounds // perm.setCardBounds
permanents.put(permanent.getId(), perm); permanents.put(permanent.getId(), perm);

View file

@ -113,7 +113,6 @@ public class CardPluginImpl implements CardPlugin {
needFullPermanentRender); needFullPermanentRender);
default: default:
throw new IllegalStateException("Unknown render mode " + renderMode); throw new IllegalStateException("Unknown render mode " + renderMode);
} }
} }
@ -145,7 +144,7 @@ public class CardPluginImpl implements CardPlugin {
continue; continue;
} }
if ((!perm.isLand() && !perm.isToken()) || (perm.isCreature())) { if ((!perm.isLand() && !perm.isToken()) || (perm.isCreature() && !perm.isToken())) {
Stack newStack = new Stack(); Stack newStack = new Stack();
newStack.add(perm); newStack.add(perm);
workingRow.add(newStack); workingRow.add(newStack);
@ -153,6 +152,17 @@ public class CardPluginImpl implements CardPlugin {
} }
int insertIndex = -1; int insertIndex = -1;
int cardPower = perm.getOriginal().getOriginalPower() != null
? perm.getOriginal().getOriginalPower().getValue()
: 0;
int cardToughness = perm.getOriginal().getOriginalToughness() != null
? perm.getOriginalPermanent().getOriginalToughness().getValue()
: 0;
List<CounterView> cardCounters = perm.getOriginalPermanent().getCounters() != null
? perm.getOriginalPermanent().getCounters()
: Collections.emptyList();
List<String> cardAbilities = perm.getOriginal().getRules() != null ? perm.getOriginal().getRules()
: new ArrayList<>();
// Find already added to with the same name. // Find already added to with the same name.
for (int i = 0, n = workingRow.size(); i < n; i++) { for (int i = 0, n = workingRow.size(); i < n; i++) {
@ -161,8 +171,23 @@ public class CardPluginImpl implements CardPlugin {
Stack stack = workingRow.get(i); Stack stack = workingRow.get(i);
MagePermanent firstPanelPerm = stack.get(0); MagePermanent firstPanelPerm = stack.get(0);
int stackPower = firstPanelPerm.getOriginal().getOriginalPower() != null
? firstPanelPerm.getOriginal().getOriginalPower().getValue()
: 0;
int stackToughness = firstPanelPerm.getOriginal().getOriginalToughness() != null
? firstPanelPerm.getOriginal().getOriginalToughness().getValue()
: 0;
List<CounterView> stackCounters = firstPanelPerm.getOriginalPermanent().getCounters() != null
? firstPanelPerm.getOriginalPermanent().getCounters()
: Collections.emptyList();
List<String> stackAbilities = firstPanelPerm.getOriginal().getRules() != null
? firstPanelPerm.getOriginal().getRules()
: new ArrayList<>();
// Check the names are equal and are creatures with the same summoning sickness // Check the names are equal and are creatures with the same summoning sickness
if (firstPanelPerm.getOriginal().getName().equals(perm.getOriginal().getName()) if (firstPanelPerm.getOriginal().getName().equals(perm.getOriginal().getName())
&& stackPower == cardPower && stackToughness == cardToughness
&& stackAbilities.equals(cardAbilities) && stackCounters.equals(cardCounters)
&& (!perm.isCreature() || firstPanelPerm.getOriginalPermanent().hasSummoningSickness() == perm && (!perm.isCreature() || firstPanelPerm.getOriginalPermanent().hasSummoningSickness() == perm
.getOriginalPermanent().hasSummoningSickness())) { .getOriginalPermanent().hasSummoningSickness())) {
@ -171,24 +196,13 @@ public class CardPluginImpl implements CardPlugin {
insertIndex = i; insertIndex = i;
break; break;
} }
List<CounterView> counters = firstPanelPerm.getOriginalPermanent().getCounters();
if (counters != null && !counters.isEmpty()) {
// don't put to first panel if it has counters
insertIndex = i;
break;
}
if (!empty(perm.getOriginalPermanent().getAttachments()) || stack.size() == cardStackMax) { if (!empty(perm.getOriginalPermanent().getAttachments()) || stack.size() == cardStackMax) {
// If this land has attachments or the stack is full, put it to the right. // If this land has attachments or the stack is full, put it to the right.
insertIndex = i + 1; insertIndex = i + 1;
continue; continue;
} }
counters = perm.getOriginalPermanent().getCounters();
if (counters != null && !counters.isEmpty()) {
// if a land has counter, put it to the right
insertIndex = i + 1;
continue;
}
// Add to stack. // Add to stack.
stack.add(0, perm); stack.add(0, perm);
continue outerLoop; continue outerLoop;