Fixed Issue#438: Enchanted permanent can't be clicked because out of sight

This commit is contained in:
magenoxx 2014-07-11 14:40:37 +04:00
parent 045a81e66a
commit 2b76bbf2c6
2 changed files with 30 additions and 6 deletions

View file

@ -157,6 +157,7 @@ public class CardPluginImpl implements CardPlugin {
Row allCreatures = new Row(permanents, RowType.creature); Row allCreatures = new Row(permanents, RowType.creature);
Row allOthers = new Row(permanents, RowType.other); Row allOthers = new Row(permanents, RowType.other);
Row allAttached = new Row(permanents, RowType.attached);
boolean othersOnTheRight = true; boolean othersOnTheRight = true;
if (options != null && options.containsKey("nonLandPermanentsInOnePile")) { if (options != null && options.containsKey("nonLandPermanentsInOnePile")) {
@ -268,6 +269,14 @@ public class CardPluginImpl implements CardPlugin {
y = rowBottom; y = rowBottom;
} }
// we need this only for defining card size
// attached permanents will be handled separately
for (Stack stack : allAttached) {
for (MagePermanent panel : stack) {
panel.setCardBounds(0, 0, cardWidth, cardHeight);
}
}
return y; return y;
} }
@ -340,7 +349,7 @@ public class CardPluginImpl implements CardPlugin {
} }
private static enum RowType { private static enum RowType {
land, creature, other; land, creature, other, attached;
public boolean isType(MagePermanent card) { public boolean isType(MagePermanent card) {
switch (this) { switch (this) {
@ -350,6 +359,8 @@ public class CardPluginImpl implements CardPlugin {
return CardUtil.isCreature(card); return CardUtil.isCreature(card);
case other: case other:
return !CardUtil.isLand(card) && !CardUtil.isCreature(card); return !CardUtil.isLand(card) && !CardUtil.isCreature(card);
case attached:
return card.getOriginalPermanent().isAttachedTo();
default: default:
throw new RuntimeException("Unhandled type: " + this); throw new RuntimeException("Unhandled type: " + this);
} }
@ -373,6 +384,10 @@ public class CardPluginImpl implements CardPlugin {
if (!type.isType(panel)) { if (!type.isType(panel)) {
continue; continue;
} }
// all attached permanents are grouped separately later
if (!type.equals(RowType.attached) && RowType.attached.isType(panel)) {
continue;
}
Stack stack = new Stack(); Stack stack = new Stack();
stack.add(panel); stack.add(panel);
if (panel.getOriginalPermanent().getAttachments() != null) { if (panel.getOriginalPermanent().getAttachments() != null) {

View file

@ -28,9 +28,6 @@
package mage.view; package mage.view;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.TurnFaceUpAbility; import mage.abilities.common.TurnFaceUpAbility;
import mage.abilities.common.TurnedFaceUpTriggeredAbility; import mage.abilities.common.TurnedFaceUpTriggeredAbility;
@ -38,10 +35,13 @@ import mage.cards.Card;
import mage.constants.Rarity; import mage.constants.Rarity;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.permanent.PermanentCard;
import mage.game.permanent.PermanentToken; import mage.game.permanent.PermanentToken;
import mage.players.Player; import mage.players.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/** /**
* *
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
@ -59,6 +59,7 @@ public class PermanentView extends CardView {
private final boolean copy; private final boolean copy;
private final String nameOwner; // only filled if != controller private final String nameOwner; // only filled if != controller
private final boolean controlled; private final boolean controlled;
private UUID attachedTo;
public PermanentView(Permanent permanent, Card card, UUID createdForPlayerId, Game game) { public PermanentView(Permanent permanent, Card card, UUID createdForPlayerId, Game game) {
super(permanent, null, permanent.getControllerId().equals(createdForPlayerId)); super(permanent, null, permanent.getControllerId().equals(createdForPlayerId));
@ -73,6 +74,7 @@ public class PermanentView extends CardView {
attachments = new ArrayList<>(); attachments = new ArrayList<>();
attachments.addAll(permanent.getAttachments()); attachments.addAll(permanent.getAttachments());
} }
this.attachedTo = permanent.getAttachedTo();
if (isToken()) { if (isToken()) {
original = new CardView(((PermanentToken)permanent).getToken()); original = new CardView(((PermanentToken)permanent).getToken());
original.expansionSetCode = permanent.getExpansionSetCode(); original.expansionSetCode = permanent.getExpansionSetCode();
@ -180,4 +182,11 @@ public class PermanentView extends CardView {
return controlled; return controlled;
} }
public UUID getAttachedTo() {
return attachedTo;
}
public boolean isAttachedTo() {
return attachedTo != null;
}
} }