GUI: improved double faced tokens:

- added tokens support in test render dialog;
 - improved PT drawing;
 - fixed broken second side switch button (related to #10231);
 - fixed miss override in TokenImpl (all override with backFace must be removed, see todo);
This commit is contained in:
Oleg Agafonov 2023-04-29 19:13:13 +04:00
parent 8cb89a9a98
commit 583c5fe4e9
13 changed files with 270 additions and 140 deletions

View file

@ -60,10 +60,9 @@ public class TransformAbility extends SimpleStaticAbility {
for (SuperType type : sourceCard.getSuperType()) {
permanent.addSuperType(type);
}
if (sourceCard instanceof Card) {
permanent.setExpansionSetCode(((Card) sourceCard).getExpansionSetCode());
}
CardUtil.copySetAndCardNumber(permanent, sourceCard);
permanent.getAbilities().clear();
for (Ability ability : sourceCard.getAbilities()) {
// source == null -- call from init card (e.g. own abilities)

View file

@ -609,7 +609,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
return true;
}
protected MageObject getOtherFace() {
public MageObject getOtherFace() {
return transformed ? this.getMainCard() : this.getMainCard().getSecondCardFace();
}

View file

@ -139,7 +139,7 @@ public class PermanentToken extends PermanentImpl {
}
@Override
protected MageObject getOtherFace() {
public MageObject getOtherFace() {
return this.transformed ? token : this.token.getBackFace();
}

View file

@ -11,7 +11,7 @@ import java.util.Arrays;
*/
public class Phyrexian00Token extends TokenImpl {
Phyrexian00Token() {
public Phyrexian00Token() {
super("Phyrexian Token", "0/0 Phyrexian artifact creature token");
cardType.add(CardType.ARTIFACT);
cardType.add(CardType.CREATURE);

View file

@ -1,4 +1,3 @@
package mage.game.permanent.token;
import mage.MageObject;

View file

@ -87,6 +87,8 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
ability.setSourceId(this.getId());
abilities.add(ability);
abilities.addAll(ability.getSubAbilities());
// TODO: remove all override and backFace changes (bug example: active transform ability in back face)
if (backFace != null) {
backFace.addAbility(ability);
}
@ -443,6 +445,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.setStartingLoyalty(startingLoyalty);
}
@Override
public void setStartingDefense(int intArg) {
if (backFace != null) {
backFace.setStartingDefense(intArg);
@ -481,6 +484,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
return backFace;
}
@Override
public void retainAllArtifactSubTypes(Game game) {
if (backFace != null) {
backFace.retainAllArtifactSubTypes(game);
@ -488,6 +492,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.retainAllArtifactSubTypes(game);
}
@Override
public void retainAllEnchantmentSubTypes(Game game) {
if (backFace != null) {
backFace.retainAllEnchantmentSubTypes(game);
@ -495,6 +500,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.retainAllEnchantmentSubTypes(game);
}
@Override
public void addSuperType(SuperType superType) {
if (backFace != null) {
backFace.addSuperType(superType);
@ -502,6 +508,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.addSuperType(superType);
}
@Override
public void removeSuperType(SuperType superType) {
if (backFace != null) {
backFace.removeSuperType(superType);
@ -509,6 +516,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removeSuperType(superType);
}
@Override
public void addCardType(CardType... cardTypes) {
if (backFace != null) {
backFace.addCardType(cardTypes);
@ -516,6 +524,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.addCardType(cardTypes);
}
@Override
public void removeCardType(CardType... cardTypes) {
if (backFace != null) {
backFace.removeCardType(cardTypes);
@ -523,6 +532,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removeCardType(cardTypes);
}
@Override
public void removeAllCardTypes() {
if (backFace != null) {
backFace.removeAllCardTypes();
@ -530,6 +540,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removeAllCardTypes();
}
@Override
public void removeAllCardTypes(Game game) {
if (backFace != null) {
backFace.removeAllCardTypes(game);
@ -537,6 +548,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removeAllCardTypes(game);
}
@Override
public void addSubType(SubType... subTypes) {
if (backFace != null) {
backFace.addSubType(subTypes);
@ -544,6 +556,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.addSubType(subTypes);
}
@Override
public void removeAllSubTypes(Game game, SubTypeSet subTypeSet) {
if (backFace != null) {
backFace.removeAllSubTypes(game, subTypeSet);
@ -551,6 +564,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removeAllSubTypes(game, subTypeSet);
}
@Override
public void removeAllSubTypes(Game game) {
if (backFace != null) {
backFace.removeAllSubTypes(game);
@ -558,6 +572,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removeAllSubTypes(game);
}
@Override
public void retainAllLandSubTypes(Game game) {
if (backFace != null) {
backFace.retainAllLandSubTypes(game);
@ -565,6 +580,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.retainAllLandSubTypes(game);
}
@Override
public void removeAllCreatureTypes(Game game) {
if (backFace != null) {
backFace.removeAllCreatureTypes(game);
@ -572,6 +588,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removeAllCreatureTypes(game);
}
@Override
public void removeAllCreatureTypes() {
if (backFace != null) {
backFace.removeAllCreatureTypes();
@ -579,6 +596,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removeAllCreatureTypes();
}
@Override
public void removeSubType(Game game, SubType subType) {
if (backFace != null) {
backFace.removeSubType(game, subType);
@ -586,6 +604,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removeSubType(game, subType);
}
@Override
public void setIsAllCreatureTypes(boolean value) {
if (backFace != null) {
backFace.setIsAllCreatureTypes(value);
@ -593,6 +612,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.setIsAllCreatureTypes(value);
}
@Override
public void removePTCDA() {
if (backFace != null) {
backFace.removePTCDA();
@ -600,13 +620,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.removePTCDA();
}
public String getName() {
if (backFace != null) {
backFace.getName();
}
return super.getName();
}
@Override
public void setName(String name) {
if (backFace != null) {
backFace.setName(name);
@ -614,6 +628,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
super.setName(name);
}
@Override
public void setColor(ObjectColor color) {
if (backFace != null) {
backFace.setColor(color);

View file

@ -41,22 +41,22 @@ public final class ZombieToken extends TokenImpl {
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode().equals("ISD")) {
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("ISD")) {
this.setTokenType(RandomUtil.nextInt(3) + 1);
}
if (getOriginalExpansionSetCode().equals("C14")) {
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("C14")) {
this.setTokenType(1);
}
if (getOriginalExpansionSetCode().equals("EMN")) {
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("EMN")) {
this.setTokenType(RandomUtil.nextInt(3) + 1);
}
if (getOriginalExpansionSetCode().equals("C19")) {
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("C19")) {
this.setTokenType(RandomUtil.nextInt(2) + 1);
}
if (getOriginalExpansionSetCode().equals("MIC")) {
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("MIC")) {
this.setTokenType(1);
}
if (getOriginalExpansionSetCode().equals("VOW")) {
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("VOW")) {
this.setTokenType(1);
}
}

View file

@ -22,6 +22,7 @@ import mage.constants.ColoredManaSymbol;
import mage.constants.ManaType;
import mage.filter.FilterMana;
import mage.game.Game;
import mage.game.permanent.token.Token;
import mage.players.Player;
import java.util.*;
@ -638,6 +639,10 @@ public final class ManaUtil {
return getColorIdentity(card.getColor(), String.join("", card.getManaCostSymbols()), card.getRules(), secondSide);
}
public static FilterMana getColorIdentity(Token token) {
return getColorIdentity(token.getColor(), String.join("", token.getManaCostSymbols()), token.getAbilities().getRules(token.getName()), null);
}
public static int getColorIdentityHash(FilterMana colorIdentity) {
int hash = 3;
hash = 23 * hash + (colorIdentity.isWhite() ? 1 : 0);