Tokens and command objects reworked (part 1 of 2):

- fixed that copy effect doesn't restore original image after effect's end;
 - removed outdated availableImageSetCodes (all images auto-selected from tokens database now, related to #10139);
 - refactor command objects to use CommandObjectImpl;
 - refactor planes/emblems/etc objects to use MageObjectImpl, added copyable support;
 - refactor another game objects to remove some duplicated fields;
This commit is contained in:
Oleg Agafonov 2023-05-08 02:15:07 +04:00
parent 46f6593da8
commit 5f55c7c667
45 changed files with 517 additions and 477 deletions

View file

@ -1786,61 +1786,40 @@ public final class CardUtil {
/**
* Copy image related data from one object to another (card number, set code, token type)
* Copy image related data from one object to another (set code, card number, image number)
* Use it in copy/transform effects
*/
public static void copySetAndCardNumber(MageObject targetObject, MageObject copyFromObject) {
String needSetCode;
String needCardNumber;
int needTokenType;
if (copyFromObject instanceof CommandObject) {
needSetCode = ((CommandObject) copyFromObject).getExpansionSetCodeForImage();
needCardNumber = "0";
needTokenType = 0;
} else if (copyFromObject instanceof PermanentCard) {
needSetCode = ((PermanentCard) copyFromObject).getExpansionSetCode();
needCardNumber = ((PermanentCard) copyFromObject).getCardNumber();
needTokenType = 0;
} else if (copyFromObject instanceof PermanentToken) {
needSetCode = ((PermanentToken) copyFromObject).getToken().getOriginalExpansionSetCode();
needCardNumber = ((PermanentToken) copyFromObject).getToken().getOriginalCardNumber();
needTokenType = ((PermanentToken) copyFromObject).getToken().getTokenType();
} else if (copyFromObject instanceof Card) {
needSetCode = ((Card) copyFromObject).getExpansionSetCode();
needCardNumber = ((Card) copyFromObject).getCardNumber();
needTokenType = 0;
} else if (copyFromObject instanceof Token) {
needSetCode = ((Token) copyFromObject).getOriginalExpansionSetCode();
needCardNumber = ((Token) copyFromObject).getOriginalCardNumber();
needTokenType = ((Token) copyFromObject).getTokenType();
} else {
throw new IllegalStateException("Unsupported copyFromObject class: " + copyFromObject.getClass().getSimpleName());
}
int needImageNumber;
needSetCode = copyFromObject.getExpansionSetCode();
needCardNumber = copyFromObject.getCardNumber();
needImageNumber = copyFromObject.getImageNumber();
if (targetObject instanceof Permanent) {
copySetAndCardNumber((Permanent) targetObject, needSetCode, needCardNumber, needTokenType);
copySetAndCardNumber((Permanent) targetObject, needSetCode, needCardNumber, needImageNumber);
} else if (targetObject instanceof Token) {
copySetAndCardNumber((Token) targetObject, needSetCode, needCardNumber, needTokenType);
copySetAndCardNumber((Token) targetObject, needSetCode, needCardNumber, needImageNumber);
} else {
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) {
private static void copySetAndCardNumber(Permanent targetPermanent, String newSetCode, String newCardNumber, Integer newImageNumber) {
if (targetPermanent instanceof PermanentCard
|| targetPermanent instanceof PermanentToken) {
targetPermanent.setExpansionSetCode(newSetCode);
targetPermanent.setCardNumber(newCardNumber);
targetPermanent.setImageNumber(newImageNumber);
} 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);
private static void copySetAndCardNumber(Token targetToken, String newSetCode, String newCardNumber, Integer newImageNumber) {
targetToken.setExpansionSetCode(newSetCode);
targetToken.setCardNumber(newCardNumber);
targetToken.setImageNumber(newImageNumber);
}
}