Tokens rework: fixed morph support, fixed test (related to #10139)

This commit is contained in:
Oleg Agafonov 2023-05-01 19:41:25 +04:00
parent 94819ff91c
commit 3986196aa4
6 changed files with 110 additions and 66 deletions

View file

@ -1789,7 +1789,7 @@ public final class CardUtil {
* Copy image related data from one object to another (card number, set code, token type)
* Use it in copy/transform effects
*/
public static void copySetAndCardNumber(Permanent permanent, MageObject copyFromObject) {
public static void copySetAndCardNumber(MageObject targetObject, MageObject copyFromObject) {
String needSetCode;
String needCardNumber;
int needTokenType;
@ -1810,23 +1810,37 @@ public final class CardUtil {
needCardNumber = ((Card) copyFromObject).getCardNumber();
needTokenType = 0;
} else if (copyFromObject instanceof Token) {
// TODO: make this work
return;
needSetCode = ((Token) copyFromObject).getOriginalExpansionSetCode();
needCardNumber = ((Token) copyFromObject).getOriginalCardNumber();
needTokenType = ((Token) copyFromObject).getTokenType();
} else {
throw new IllegalStateException("Unsupported copyFromObject class: " + copyFromObject.getClass().getSimpleName());
}
copySetAndCardNumber(permanent, needSetCode, needCardNumber, needTokenType);
}
public static void copySetAndCardNumber(Permanent permanent, String newSetCode, String newCardNumber, Integer newTokenType) {
if (permanent instanceof PermanentToken) {
((PermanentToken) permanent).getToken().setOriginalExpansionSetCode(newSetCode);
((PermanentToken) permanent).getToken().setExpansionSetCodeForImage(newCardNumber);
((PermanentToken) permanent).getToken().setTokenType(newTokenType);
if (targetObject instanceof Permanent) {
copySetAndCardNumber((Permanent) targetObject, needSetCode, needCardNumber, needTokenType);
} else if (targetObject instanceof Token) {
copySetAndCardNumber((Token) targetObject, needSetCode, needCardNumber, needTokenType);
} else {
permanent.setExpansionSetCode(newSetCode);
permanent.setCardNumber(newCardNumber);
throw new IllegalStateException("Unsupported target object class: " + targetObject.getClass().getSimpleName());
}
}
private static void copySetAndCardNumber(Permanent targetPermanent, String newSetCode, String newCardNumber, Integer newTokenType) {
if (targetPermanent instanceof PermanentToken) {
copySetAndCardNumber(((PermanentToken) targetPermanent).getToken(), newSetCode, newCardNumber, newTokenType);
} else if (targetPermanent instanceof PermanentCard) {
targetPermanent.setExpansionSetCode(newSetCode);
targetPermanent.setCardNumber(newCardNumber);
} else {
throw new IllegalArgumentException("Wrong code usage: un-supported target permanent type: " + targetPermanent.getClass().getSimpleName());
}
}
private static void copySetAndCardNumber(Token targetToken, String newSetCode, String newCardNumber, Integer newTokenType) {
targetToken.setOriginalExpansionSetCode(newSetCode);
targetToken.setExpansionSetCodeForImage(newSetCode);
targetToken.setOriginalCardNumber(newCardNumber);
targetToken.setTokenType(newTokenType);
}
}