foul-magics/Mage.Common/src/main/java/mage/view/PermanentView.java
ssouders412 2d3247d732
Updated pronouns to reflect current rules and oracle text
Replaced all instances of "her or she", "him or her", and "his or her", with "they", "them", and "their", or sometimes "that player". Updated verbs where appropriate.
2019-12-06 14:29:36 -05:00

191 lines
6.4 KiB
Java

package mage.view;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.TurnFaceUpAbility;
import mage.cards.Card;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.PermanentToken;
import mage.players.Player;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public class PermanentView extends CardView {
private static final long serialVersionUID = 1L;
private boolean tapped;
private final boolean flipped;
private final boolean phasedIn;
private final boolean summoningSickness;
private final int damage;
private List<UUID> attachments;
private final CardView original;
private final boolean copy;
private final String nameOwner; // only filled if != controller
private final boolean controlled;
private final UUID attachedTo;
private final boolean morphed;
private final boolean manifested;
private final boolean attachedToPermanent;
public PermanentView(Permanent permanent, Card card, UUID createdForPlayerId, Game game) {
super(permanent, game, (permanent.getControllerId() == null) ? false : permanent.getControllerId().equals(createdForPlayerId));
this.controlled = (permanent.getControllerId() == null) ? false : permanent.getControllerId().equals(createdForPlayerId);
this.rules = permanent.getRules(game);
this.tapped = permanent.isTapped();
this.flipped = permanent.isFlipped();
this.phasedIn = permanent.isPhasedIn();
this.summoningSickness = permanent.hasSummoningSickness();
this.morphed = permanent.isMorphed();
this.manifested = permanent.isManifested();
this.damage = permanent.getDamage();
if (!permanent.getAttachments().isEmpty()) {
attachments = new ArrayList<>();
attachments.addAll(permanent.getAttachments());
}
this.attachedTo = permanent.getAttachedTo();
if (isToken()) {
original = new CardView(((PermanentToken) permanent).getToken());
original.expansionSetCode = permanent.getExpansionSetCode();
tokenSetCode = original.getTokenSetCode();
tokenDescriptor = original.getTokenDescriptor();
} else {
if (card != null) {
// original may not be face down
original = new CardView(card);
} else {
original = null;
}
}
this.transformed = permanent.isTransformed();
this.copy = permanent.isCopy();
// for fipped, transformed or copied cards, switch the names
if (original != null && !original.getName().equals(this.getName())) {
if (permanent.isCopy() && permanent.isFlipCard()) {
this.alternateName = permanent.getFlipCardName();
this.originalName = this.getName();
} else {
if (controlled // controller may always know
|| (!morphed && !manifested)) { // others don't know for morph or transformed cards
this.alternateName = original.getName();
this.originalName = this.getName();
}
}
}
if (permanent.getOwnerId() != null && !permanent.getOwnerId().equals(permanent.getControllerId())) {
Player owner = game.getPlayer(permanent.getOwnerId());
if (owner != null) {
this.nameOwner = owner.getName();
} else {
this.nameOwner = "";
}
} else {
this.nameOwner = "";
}
if (permanent.isFaceDown(game) && card != null) {
if (controlled) {
// must be a morphed or manifested card
for (Ability permanentAbility : permanent.getAbilities()) {
if (permanentAbility instanceof TurnFaceUpAbility && !permanentAbility.getRuleVisible()) {
this.rules.add(permanentAbility.getRule(true));
}
if (permanentAbility.getWorksFaceDown()) {
this.rules.add(permanentAbility.getRule());
}
}
this.name = card.getName();
this.displayName = card.getName();
this.expansionSetCode = card.getExpansionSetCode();
this.cardNumber = card.getCardNumber();
} else {
if (permanent.isManifested()) {
this.rules.add("A manifested creature card can be turned face up any time for it's mana cost."
+ " A face-down card can also be turned face up for its morph cost.");
} else if (permanent.isMorphed()) {
this.rules.add("If the controller has priority, they may turn this permanent face up."
+ " This is a special action; it doesn't use the stack. To do this they pay the morph costs,"
+ " then turns this permanent face up.");
}
}
}
// determines if shown in it's own column
if (permanent.getAttachedTo() != null) {
attachedToPermanent = game.getPermanent(permanent.getAttachedTo()) != null;
} else {
attachedToPermanent = false;
}
}
public boolean isTapped() {
return tapped;
}
public int getDamage() {
return damage;
}
public boolean isFlipped() {
return flipped;
}
public boolean isCopy() {
return copy;
}
public boolean isPhasedIn() {
return phasedIn;
}
public boolean hasSummoningSickness() {
return summoningSickness;
}
public List<UUID> getAttachments() {
return attachments;
}
public CardView getOriginal() {
return original;
}
public void overrideTapped(boolean tapped) {
this.tapped = tapped;
}
public String getNameOwner() {
return nameOwner;
}
public boolean isControlled() {
return controlled;
}
public UUID getAttachedTo() {
return attachedTo;
}
public boolean isAttachedTo() {
return attachedTo != null;
}
public boolean isAttachedToPermanent() {
return attachedToPermanent;
}
public boolean isMorphed() {
return morphed;
}
public boolean isManifested() {
return manifested;
}
}