Skip to content

Commit

Permalink
images: added The Ring image support (part of #12274, #12899);
Browse files Browse the repository at this point in the history
images: fixed miss dungeon image in choose dungeon dialog (part of #12274);
  • Loading branch information
JayDi85 committed Sep 21, 2024
1 parent 7d1ab71 commit f7d702d
Show file tree
Hide file tree
Showing 9 changed files with 50 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ private void choiceHintShow(int modelIndex) {
// as card name
cardInfo.init(item.getHint(), this.bigCard, this.gameId);
} else if (item.getHintType() == ChoiceHintType.CARD_DUNGEON) {
// as card name
// as dungeon name
CardView cardView = new CardView(new DungeonView(Dungeon.createDungeon(item.getHint(), true)));
cardInfo.init(cardView, this.bigCard, this.gameId);
} else if (item.getHintType() == ChoiceHintType.GAME_OBJECT) {
Expand Down
4 changes: 4 additions & 0 deletions Mage/src/main/java/mage/cards/repository/TokenRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public enum TokenRepository {
public static final String XMAGE_IMAGE_NAME_NIGHT = "Night";
public static final String XMAGE_IMAGE_NAME_THE_MONARCH = "The Monarch";
public static final String XMAGE_IMAGE_NAME_RADIATION = "Radiation";
public static final String XMAGE_IMAGE_NAME_THE_RING = "The Ring";
public static final String XMAGE_IMAGE_NAME_HELPER_EMBLEM = "Helper Emblem";

private static final Logger logger = Logger.getLogger(TokenRepository.class);
Expand Down Expand Up @@ -306,6 +307,9 @@ private static ArrayList<TokenInfo> loadXmageTokens() {
// Radiation (for trigger)
res.add(createXmageToken(XMAGE_IMAGE_NAME_RADIATION, 1, "https://api.scryfall.com/cards/tpip/22/en?format=image"));

// The Ring
res.add(createXmageToken(XMAGE_IMAGE_NAME_THE_RING, 1, "https://api.scryfall.com/cards/tltr/H13/en?format=image"));

// Helper emblem (for global card hints)
// use backface for it
res.add(createXmageToken(XMAGE_IMAGE_NAME_HELPER_EMBLEM, 1, "https://upload.wikimedia.org/wikipedia/en/a/aa/Magic_the_gathering-card_back.jpg"));
Expand Down
17 changes: 5 additions & 12 deletions Mage/src/main/java/mage/game/GameImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -583,11 +583,10 @@ private TheRingEmblem getOrCreateTheRing(UUID playerId) {
if (emblem != null) {
return emblem;
}
TheRingEmblem newEmblem = new TheRingEmblem(playerId);

// TODO: add image info

TheRingEmblem newEmblem = new TheRingEmblem(playerId);
state.addCommandObject(newEmblem);

return newEmblem;
}

Expand Down Expand Up @@ -1966,16 +1965,13 @@ public void addEmblem(Emblem emblem, MageObject sourceObject, Ability source) {
@Override
public void addEmblem(Emblem emblem, MageObject sourceObject, UUID toPlayerId) {
Emblem newEmblem = emblem.copy();
newEmblem.setSourceObject(sourceObject);
newEmblem.setSourceObjectAndInitImage(sourceObject);
newEmblem.setControllerId(toPlayerId);
newEmblem.assignNewId();
newEmblem.getAbilities().newId();
for (Ability ability : newEmblem.getAbilities()) {
ability.setSourceId(newEmblem.getId());
}

// image info setup in setSourceObject

state.addCommandObject(newEmblem);
}

Expand All @@ -1997,17 +1993,15 @@ public boolean addPlane(Plane plane, UUID toPlayerId) {
}
}
Plane newPlane = plane.copy();
newPlane.setSourceObject();
newPlane.setSourceObjectAndInitImage();
newPlane.setControllerId(toPlayerId);
newPlane.assignNewId();
newPlane.getAbilities().newId();
for (Ability ability : newPlane.getAbilities()) {
ability.setSourceId(newPlane.getId());
}

// image info setup in setSourceObject

state.addCommandObject(newPlane);

informPlayers("You have planeswalked to " + newPlane.getLogName());

// Fire off the planeswalked event
Expand All @@ -2028,7 +2022,6 @@ public void addCommander(Commander commander) {
@Override
public Dungeon addDungeon(Dungeon dungeon, UUID playerId) {
dungeon.setControllerId(playerId);
dungeon.setSourceObject();
state.addCommandObject(dungeon);
return dungeon;
}
Expand Down
5 changes: 5 additions & 0 deletions Mage/src/main/java/mage/game/GameState.java
Original file line number Diff line number Diff line change
Expand Up @@ -1239,6 +1239,11 @@ public void setPlaneChase(Game game, boolean isPlaneChase) {
this.isPlaneChase = isPlaneChase;
}

/**
* Add object to command zone.
* <p>
* Warning, all object data must be initialized before adding, including image info
*/
public void addCommandObject(CommandObject commandObject) {
getCommand().add(commandObject);
setZone(commandObject.getId(), Zone.COMMAND);
Expand Down
23 changes: 17 additions & 6 deletions Mage/src/main/java/mage/game/command/Dungeon.java
Original file line number Diff line number Diff line change
Expand Up @@ -154,24 +154,35 @@ public static Dungeon selectDungeon(UUID playerId, Game game) {
}

public static Dungeon createDungeon(String name, boolean isNameMustExists) {
Dungeon res;
switch (name) {
case "Tomb of Annihilation":
return new TombOfAnnihilationDungeon();
res = new TombOfAnnihilationDungeon();
break;
case "Lost Mine of Phandelver":
return new LostMineOfPhandelverDungeon();
res = new LostMineOfPhandelverDungeon();
break;
case "Dungeon of the Mad Mage":
return new DungeonOfTheMadMageDungeon();
res = new DungeonOfTheMadMageDungeon();
break;
default:
if (isNameMustExists) {
throw new UnsupportedOperationException("A dungeon should have been chosen");
} else {
return null;
res = null;
}
}

// source don't have source, so image data can be initialized immediately
if (res != null) {
res.setSourceObjectAndInitImage();
}

return res;
}

public void setSourceObject() {
// choose set code due source
public void setSourceObjectAndInitImage() {
// image
TokenInfo foundInfo = TokenRepository.instance.findPreferredTokenInfoForClass(this.getClass().getName(), null);
if (foundInfo != null) {
this.setExpansionSetCode(foundInfo.getSetCode());
Expand Down
3 changes: 1 addition & 2 deletions Mage/src/main/java/mage/game/command/Emblem.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import mage.constants.SuperType;
import mage.game.Game;
import mage.game.events.ZoneChangeEvent;
import mage.util.CardUtil;
import mage.util.SubTypes;

import java.util.Collections;
Expand Down Expand Up @@ -59,7 +58,7 @@ public FrameStyle getFrameStyle() {
return frameStyle;
}

public void setSourceObject(MageObject sourceObject) {
public void setSourceObjectAndInitImage(MageObject sourceObject) {
this.sourceObject = sourceObject;

// choose set code due source
Expand Down
2 changes: 1 addition & 1 deletion Mage/src/main/java/mage/game/command/Plane.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public FrameStyle getFrameStyle() {
return frameStyle;
}

public void setSourceObject() {
public void setSourceObjectAndInitImage() {
this.sourceObject = null;

// choose set code due source
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public EmblemOfCard copy() {
}

@Override
public void setSourceObject(MageObject sourceObject) {
public void setSourceObjectAndInitImage(MageObject sourceObject) {
this.sourceObject = sourceObject;
// super method would try and fail to find the emblem image here
// (not sure why that would be setSoureObject's job; we get our image during construction)
Expand Down
15 changes: 15 additions & 0 deletions Mage/src/main/java/mage/game/command/emblems/TheRingEmblem.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import mage.abilities.effects.common.DrawDiscardControllerEffect;
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
import mage.abilities.effects.common.SacrificeTargetEffect;
import mage.cards.repository.TokenInfo;
import mage.cards.repository.TokenRepository;
import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
Expand Down Expand Up @@ -41,6 +43,19 @@ public final class TheRingEmblem extends Emblem {
public TheRingEmblem(UUID controllerId) {
super("The Ring");
this.setControllerId(controllerId);

// ring don't have source, so image can be initialized immediately
TokenInfo foundInfo = TokenRepository.instance.findPreferredTokenInfoForXmage(TokenRepository.XMAGE_IMAGE_NAME_THE_RING, null);
if (foundInfo != null) {
this.setExpansionSetCode(foundInfo.getSetCode());
this.setUsesVariousArt(false);
this.setCardNumber("");
this.setImageFileName(""); // use default
this.setImageNumber(foundInfo.getImageNumber());
} else {
// how-to fix: add emblem to the tokens-database TokenRepository->loadXmageTokens
throw new IllegalArgumentException("Wrong code usage: can't find xmage token info for: " + TokenRepository.XMAGE_IMAGE_NAME_THE_RING);
}
}

private TheRingEmblem(final TheRingEmblem card) {
Expand Down

0 comments on commit f7d702d

Please sign in to comment.