mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
Merge branch 'Card-Forge:master' into master
This commit is contained in:
@@ -153,12 +153,7 @@ public class GuiMobile implements IGuiBase {
|
||||
@Override
|
||||
public void showImageDialog(final ISkinImage image, final String message, final String title) {
|
||||
if (Forge.isMobileAdventureMode) {
|
||||
FThreads.invokeInEdtNowOrLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MapStage.getInstance().showImageDialog("Achievement Earned\n"+message, (FBufferedImage)image);
|
||||
}
|
||||
});
|
||||
FThreads.invokeInEdtNowOrLater(() -> MapStage.getInstance().showImageDialog("Achievement Earned\n"+message, (FBufferedImage)image));
|
||||
return;
|
||||
}
|
||||
new WaitCallback<Integer>() {
|
||||
|
||||
@@ -347,8 +347,8 @@ public class GameHUD extends Stage {
|
||||
restorePlayerCollision();
|
||||
if (openMapActor != null) {
|
||||
String val = "[%80]" + Forge.getLocalizer().getMessageorUseDefault("lblZoom", "Zoom");
|
||||
for (AdventureQuestData adq: Current.player().getQuests()) {
|
||||
if (adq.getTargetPOI() !=null) {
|
||||
for (AdventureQuestData adq : Current.player().getQuests()) {
|
||||
if (adq.getTargetPOI() != null) {
|
||||
val = "[%80][+GPS] " + Forge.getLocalizer().getMessageorUseDefault("lblZoom", "Zoom");
|
||||
break;
|
||||
}
|
||||
@@ -357,12 +357,14 @@ public class GameHUD extends Stage {
|
||||
openMapActor.layout();
|
||||
}
|
||||
}
|
||||
|
||||
void clearAbility() {
|
||||
for (TextraButton button : abilityButtonMap) {
|
||||
button.remove();
|
||||
}
|
||||
abilityButtonMap.clear();
|
||||
}
|
||||
|
||||
void updateAbility() {
|
||||
clearAbility();
|
||||
setAbilityButton(AdventurePlayer.current().getEquippedAbility1());
|
||||
@@ -406,6 +408,7 @@ public class GameHUD extends Stage {
|
||||
playAudio();
|
||||
}
|
||||
}
|
||||
|
||||
public void playAudio() {
|
||||
switch (GameScene.instance().getAdventurePlayerLocation(false, false)) {
|
||||
case "capital":
|
||||
@@ -435,6 +438,12 @@ public class GameHUD extends Stage {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean audioIsPlaying() {
|
||||
if (audio == null)
|
||||
return false;
|
||||
return audio.getRight().isPlaying();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void act(float delta) {
|
||||
super.act(delta);
|
||||
@@ -610,6 +619,7 @@ public class GameHUD extends Stage {
|
||||
}
|
||||
opacity = visible ? 1f : 0.4f;
|
||||
}
|
||||
|
||||
void toggleConsole() {
|
||||
console.toggle();
|
||||
if (console.isVisible()) {
|
||||
@@ -679,6 +689,7 @@ public class GameHUD extends Stage {
|
||||
public void setDebug(boolean b) {
|
||||
debugMap = b;
|
||||
}
|
||||
|
||||
public void playerIdle() {
|
||||
if (MapStage.getInstance().isInMap()) {
|
||||
MapStage.getInstance().startPause(1f);
|
||||
@@ -688,6 +699,7 @@ public class GameHUD extends Stage {
|
||||
WorldStage.getInstance().getPlayerSprite().stop();
|
||||
}
|
||||
}
|
||||
|
||||
private void showDialog() {
|
||||
playerIdle();
|
||||
dialogButtonMap.clear();
|
||||
@@ -789,10 +801,11 @@ public class GameHUD extends Stage {
|
||||
}
|
||||
|
||||
void changeBGM(MusicPlaylist playlist) {
|
||||
if (!playlist.equals(SoundSystem.instance.getCurrentPlaylist())) {
|
||||
if (!audioIsPlaying() && !playlist.equals(SoundSystem.instance.getCurrentPlaylist())) {
|
||||
SoundSystem.instance.setBackgroundMusic(playlist);
|
||||
}
|
||||
}
|
||||
|
||||
void flicker(CharacterSprite sprite) {
|
||||
if (sprite.getCollisionHeight() == 0f) {
|
||||
SequenceAction flicker = new SequenceAction(Actions.fadeOut(0.25f), Actions.fadeIn(0.25f), Actions.fadeOut(0.25f), Actions.fadeIn(0.25f), new Action() {
|
||||
@@ -810,6 +823,7 @@ public class GameHUD extends Stage {
|
||||
sprite.addAction(flicker);
|
||||
}
|
||||
}
|
||||
|
||||
void restorePlayerCollision() {
|
||||
flicker(MapStage.getInstance().getPlayerSprite());
|
||||
flicker(WorldStage.getInstance().getPlayerSprite());
|
||||
|
||||
@@ -166,6 +166,7 @@ public class MapDialog {
|
||||
int vol = FModel.getPreferences().getPrefInt(ForgePreferences.FPref.UI_VOL_MUSIC);
|
||||
if (vol > 0) {
|
||||
fadeOut();
|
||||
audio.getRight().setOnCompletionListener(music -> fadeIn());
|
||||
audio.getRight().play();
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -33,6 +33,7 @@ import forge.adventure.scene.RewardScene;
|
||||
import forge.adventure.scene.Scene;
|
||||
import forge.adventure.scene.UIScene;
|
||||
import forge.assets.FSkin;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.assets.ImageCache;
|
||||
import forge.card.CardImageRenderer;
|
||||
import forge.card.CardRenderer;
|
||||
@@ -73,7 +74,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
boolean clicked = false;
|
||||
boolean sold = false;
|
||||
boolean flipOnClick;
|
||||
private boolean hover;
|
||||
private boolean hover, hasbackface;
|
||||
boolean loaded = true;
|
||||
boolean alternate = false, shown = false;
|
||||
|
||||
@@ -176,6 +177,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
}
|
||||
switch (reward.type) {
|
||||
case Card: {
|
||||
hasbackface = reward.getCard().hasBackFace();
|
||||
if (ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false)) && !Forge.enableUIMask.equals("Art")) {
|
||||
int count = 0;
|
||||
PaperCard card = ImageUtil.getPaperCardFromImageKey(reward.getCard().getImageKey(false));
|
||||
@@ -203,7 +205,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
}
|
||||
ImageCache.updateSynqCount(frontFace, count);
|
||||
//preload card back for performance
|
||||
if (reward.getCard().hasBackFace() && ImageCache.imageKeyFileExists(reward.getCard().getImageKey(true))) {
|
||||
if (hasbackface && ImageCache.imageKeyFileExists(reward.getCard().getImageKey(true))) {
|
||||
PaperCard cardBack = ImageUtil.getPaperCardFromImageKey(reward.getCard().getImageKey(true));
|
||||
File backFace = ImageKeys.getImageFile(cardBack.getCardAltImageKey());
|
||||
if (backFace != null) {
|
||||
@@ -276,14 +278,15 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
}
|
||||
ImageCache.updateSynqCount(file, 1);
|
||||
}
|
||||
} catch (Exception e) {}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
T = renderPlaceholder(new Graphics(), reward.getCard(), false); //Now we can render the card.
|
||||
setCardImage(T);
|
||||
loaded = false;
|
||||
if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false)))
|
||||
fetcher.fetchImage(reward.getCard().getImageKey(false), this);
|
||||
if (reward.getCard().hasBackFace()) {
|
||||
if (hasbackface) {
|
||||
if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(true))) {
|
||||
fetcher.fetchImage(reward.getCard().getImageKey(true), null);
|
||||
}
|
||||
@@ -317,7 +320,6 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
}
|
||||
|
||||
|
||||
|
||||
String imageKey = "";
|
||||
String editionCode = "";
|
||||
try {
|
||||
@@ -330,8 +332,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
artIndex = Aggregates.randomInt(1, 2);//MyRandom.getRandom().nextInt(maxIdx) + 1;
|
||||
imageKey = ImageKeys.BOOSTER_PREFIX + editionCode + ((1 >= maxIdx) ? "" : ("_" + artIndex));
|
||||
}
|
||||
}
|
||||
catch (Exception e){
|
||||
} catch (Exception e) {
|
||||
//Comment did not contain the edition code, this is not a basic booster pack
|
||||
}
|
||||
boolean isBooster = false;
|
||||
@@ -345,7 +346,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
}
|
||||
|
||||
setItemTooltips(item, backSprite, isBooster);
|
||||
processSprite(backSprite, item, Controls.newTextraLabel("[%200]" + editionCode + " Booster"), 0, -10, isBooster);
|
||||
processSprite(backSprite, item, Controls.newTextraLabel("[%200]" + editionCode + " Booster"), 0, -10, isBooster);
|
||||
needsToBeDisposed = true;
|
||||
break;
|
||||
}
|
||||
@@ -471,8 +472,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
} else if (realY > y) {
|
||||
y *= 1.1f;
|
||||
}
|
||||
float fW = x > y ? x : y;
|
||||
float fH = x > y ? y : x;
|
||||
float fW = Math.max(x, y);
|
||||
float fH = Math.min(x, y);
|
||||
float mul = fW / fH < AR ? AR / (fW / fH) : (fW / fH) / AR;
|
||||
Float custom = Forge.isLandscapeMode() ? Config.instance().getSettingData().cardTooltipAdjLandscape : Config.instance().getSettingData().cardTooltipAdj;
|
||||
if (custom != null && custom != 1f) {
|
||||
@@ -555,7 +556,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
}
|
||||
|
||||
private void processSprite(Sprite sprite, Sprite item, TextraLabel itemText, int modX, int modY, boolean isBooster) {
|
||||
int pw = 192; int ph = 256;
|
||||
int pw = 192;
|
||||
int ph = 256;
|
||||
FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGB888, pw, ph, false);
|
||||
SpriteBatch batch = new SpriteBatch();
|
||||
|
||||
@@ -574,9 +576,9 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
if (!isBooster) {
|
||||
float iw = item.getWidth() * 4;
|
||||
float ih = item.getHeight() * 4;
|
||||
batch.draw(item, pw / 2 - iw / 2, (ph / 2 - ih / 2), iw, ih);
|
||||
batch.draw(item, pw / 2f - iw / 2f, (ph / 2f - ih / 2f), iw, ih);
|
||||
} else
|
||||
batch.draw(item, pw / 4, ph / 4, pw / 2, ph / 2);
|
||||
batch.draw(item, pw / 4f, ph / 4f, pw / 2f, ph / 2f);
|
||||
}
|
||||
if (itemText != null) {
|
||||
itemText.setWrap(true);
|
||||
@@ -612,10 +614,11 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
getGraphics().startClip();
|
||||
getGraphics().drawImage(backSprite, 0, 0, preview_w, preview_h);
|
||||
if (!isBooster)
|
||||
getGraphics().drawImage(icon, preview_w / 2 - 75, 160, 160, 160);
|
||||
getGraphics().drawImage(icon, preview_w / 2f - 75, 160, 160, 160);
|
||||
else
|
||||
getGraphics().drawImage(icon, 0, 0, preview_w, preview_h);
|
||||
BitmapFont font = Controls.getBitmapFont("default", 4 / (preview_h / preview_w));
|
||||
float div = (float) preview_h / preview_w;
|
||||
BitmapFont font = Controls.getBitmapFont("default", 4 / div);
|
||||
layout.setText(font, itemExists ? item.name : getReward().type.name(), Color.WHITE, preview_w - 64, Align.center, true);
|
||||
getGraphics().drawText(font, layout, 32, preview_h - 70);
|
||||
align = itemExists ? Align.topLeft : Align.top;
|
||||
@@ -627,7 +630,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
} else {
|
||||
description = "Adds " + getReward().getCount() + " " + getReward().type;
|
||||
}
|
||||
if (description.isEmpty() && item.questItem)
|
||||
if (itemExists && description.isEmpty() && item.questItem)
|
||||
description = "Quest Item";
|
||||
getGraphics().end();
|
||||
getGraphics().endClip();
|
||||
@@ -783,7 +786,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
batch.end();
|
||||
shaderRoundRect.bind();
|
||||
shaderRoundRect.setUniformf("u_resolution", image.getWidth(), image.getHeight());
|
||||
shaderRoundRect.setUniformf("edge_radius", (image.getHeight() / image.getWidth()) * 20);
|
||||
shaderRoundRect.setUniformf("edge_radius", (float) (image.getHeight() / image.getWidth()) * 20);
|
||||
shaderRoundRect.setUniformf("u_gray", sold ? 1f : 0f);
|
||||
batch.setShader(shaderRoundRect);
|
||||
batch.begin();
|
||||
@@ -811,6 +814,11 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
batch.begin();
|
||||
}
|
||||
}
|
||||
if (hasbackface) {
|
||||
TextureRegion icon = FSkinImage.ADV_FLIPICON.getTextureRegion();
|
||||
float scale = getHeight() / 4f;
|
||||
batch.draw(icon, getOriginX() - scale / 2f, getOriginY() - scale / 2f, scale, scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -979,8 +987,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
if (!frontSideUp())
|
||||
return;
|
||||
tooltip_actor.setBounds(tooltip_actor.cImage.getX(), tooltip_actor.cImage.getY(), tooltip_actor.cImage.getPrefWidth(), tooltip_actor.cImage.getPrefHeight());
|
||||
tooltip_actor.cLabel.setX(Scene.getIntendedWidth() / 2 - tooltip_actor.width / 2);
|
||||
tooltip_actor.cLabel.setY(Scene.getIntendedHeight() / 2 - tooltip_actor.inset);
|
||||
tooltip_actor.cLabel.setX(Scene.getIntendedWidth() / 2f - tooltip_actor.width / 2);
|
||||
tooltip_actor.cLabel.setY(Scene.getIntendedHeight() / 2f - tooltip_actor.inset);
|
||||
getStage().addActor(tooltip_actor);
|
||||
TextraButton done = getStage().getRoot().findActor("done");
|
||||
if (done != null && Reward.Type.Card.equals(reward.type)) {
|
||||
@@ -1014,15 +1022,15 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
||||
TextureRegion tr = ((TextureRegionDrawable) getDrawable()).getRegion();
|
||||
Texture t = tr.getTexture();
|
||||
if (t != null) {
|
||||
float x = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedWidth() / 2 - holdTooltip.tooltip_actor.getWidth() / 2 : tooltip.getActor().getStoredImage().getImageX();
|
||||
float y = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedHeight() / 2 - holdTooltip.tooltip_actor.getHeight() / 2 : tooltip.getActor().getStoredImage().getImageY();
|
||||
float x = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedWidth() / 2f - holdTooltip.tooltip_actor.getWidth() / 2f : tooltip.getActor().getStoredImage().getImageX();
|
||||
float y = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedHeight() / 2f - holdTooltip.tooltip_actor.getHeight() / 2f : tooltip.getActor().getStoredImage().getImageY();
|
||||
float w = GuiBase.isAndroid() || Forge.hasGamepad() ? holdTooltip.tooltip_actor.getStoredImage().getPrefWidth() : tooltip.getActor().getStoredImage().getPrefWidth();
|
||||
float h = GuiBase.isAndroid() || Forge.hasGamepad() ? holdTooltip.tooltip_actor.getStoredImage().getPrefHeight() : tooltip.getActor().getStoredImage().getPrefHeight();
|
||||
if (t.toString().contains(".fullborder.") && Forge.enableUIMask.equals("Full")) {
|
||||
batch.end();
|
||||
shaderRoundRect.bind();
|
||||
shaderRoundRect.setUniformf("u_resolution", t.getWidth(), t.getHeight());
|
||||
shaderRoundRect.setUniformf("edge_radius", (t.getHeight() / t.getWidth()) * ImageCache.getRadius(t));
|
||||
shaderRoundRect.setUniformf("edge_radius", ((float) (t.getHeight() / t.getWidth())) * ImageCache.getRadius(t));
|
||||
shaderRoundRect.setUniformf("u_gray", sold ? 0.8f : 0f);
|
||||
batch.setShader(shaderRoundRect);
|
||||
batch.begin();
|
||||
|
||||
@@ -232,7 +232,8 @@ public enum FSkinImage implements FImage {
|
||||
//adventure
|
||||
MANASHARD (FSkinProp.ICO_MANASHARD, SourceFile.ADVENTURE),
|
||||
MENU_ADVLOGO (FSkinProp.ICO_ADVLOGO, SourceFile.ADVENTURE),
|
||||
ADV_DECKBOX (FSkinProp.ICO_ADVDECKBOX, SourceFile.ADVENTURE),
|
||||
ADV_DECKBOX (FSkinProp.ICO_ADVDECKBOX, SourceFile.ADVENTURE),
|
||||
ADV_FLIPICON (FSkinProp.ICO_ADVFLIP, SourceFile.ADVENTURE),
|
||||
|
||||
//menu icon
|
||||
MENU_GALAXY (FSkinProp.ICO_MENU_GALAXY, SourceFile.ICONS),
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.badlogic.gdx.audio.Music;
|
||||
import com.badlogic.gdx.audio.Music.OnCompletionListener;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import forge.Forge;
|
||||
import forge.adventure.stage.GameHUD;
|
||||
|
||||
public class AudioMusic implements IAudioMusic {
|
||||
private Music music;
|
||||
@@ -18,6 +19,10 @@ public class AudioMusic implements IAudioMusic {
|
||||
public void play(final Runnable onComplete) {
|
||||
if (music == null)
|
||||
return;
|
||||
if (Forge.isMobileAdventureMode) {
|
||||
if (GameHUD.getInstance().audioIsPlaying())
|
||||
return;
|
||||
}
|
||||
music.setOnCompletionListener(new OnCompletionListener() {
|
||||
@Override
|
||||
public void onCompletion(Music music) {
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Arwen's Gift
|
||||
ManaCost:3 U
|
||||
Types:Sorcery
|
||||
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | IsPresent$ Creature.Legendary+YouCtrl | PresentCompare$ GE2 | Description$ This spell costs {1} less to cast if you control two or more legendary creatures.
|
||||
A:SP$ Scry | Cost$ 1 U | ScryNum$ 2 | SubAbility$ DBDraw | SpellDescription$ Scry 2, then draw a card.
|
||||
A:SP$ Scry | Cost$ 3 U | ScryNum$ 2 | SubAbility$ DBDraw | SpellDescription$ Scry 2, then draw a card.
|
||||
SVar:DBDraw:DB$ Draw | NumCards$ 1
|
||||
DeckHints:Type$Legendary
|
||||
Oracle:This spell costs {1} less to cast if you control two or more legendary creatures.\nScry 2, then draw two cards.
|
||||
|
||||
@@ -6,20 +6,222 @@ Type=Commander
|
||||
ScryfallCode=CMM
|
||||
|
||||
[cards]
|
||||
79 M Capture of Jingzhou @Jack Wei
|
||||
1 S The Prismatic Piper @Seb McKinnon
|
||||
2 M Kozilek, the Great Distortion @Aleksi Briclot
|
||||
3 M Morophon, the Boundless @Victor Adame Minguez
|
||||
6 C Ulamog's Crusher @Todd Lockwood
|
||||
10 R Alms Collector @Bram Sels
|
||||
11 R Anafenza, Kin-Tree Spirit @Ryan Yee
|
||||
13 R Angelic Field Marshal @Scott Murphy
|
||||
16 R Balan, Wandering Knight @Svetlin Velinov
|
||||
17 U Battle Screech @Anastasia Ovchinnikova
|
||||
18 U Cartographer's Hawk @Donato Giancola
|
||||
22 U Elite Scaleguard @Steve Prescott
|
||||
27 R Grand Abolisher @Eric Deschamps
|
||||
35 U Kirtar's Wrath @Kev Walker
|
||||
37 M Land Tax @Chuck Lukacs
|
||||
50 U Pianna, Nomad Captain @D. Alexander Gregory
|
||||
51 R Puresteel Paladin @Jason Chan
|
||||
60 R Sublime Exhalation @Lake Hurwitz
|
||||
73 R Aminatou's Augury @Seb McKinnon
|
||||
74 R Azami, Lady of Scrolls @Ittoku
|
||||
75 R Braids, Conjurer Adept @Zoltan Boros & Gabor Szikszai
|
||||
79 R Capture of Jingzhou @Jack Wei
|
||||
84 R Cyclonic Rift @Chris Rahn
|
||||
89 R Evacuation @Franz Vohwinkel
|
||||
92 R Faerie Artisans @Tony Foti
|
||||
105 R Minds Aglow @Yeong-Hao Han
|
||||
108 R Mystic Confluence @Kieran Yanner
|
||||
110 R Personal Tutor @Julie Dillon
|
||||
118 R Sai, Master Thopterist @Adam Paquette
|
||||
120 M Spellseeker @Igor Kieryluk
|
||||
122 R Stormsurge Kraken @Svetlin Velinov
|
||||
125 R Teferi, Temporal Archmage @Tyler Jacobson
|
||||
128 R Torrential Gearhulk @Svetlin Velinov
|
||||
130 M Urza, Lord High Artificer @Grzegorz Rutkowski
|
||||
134 C Windrider Wizard @Slawomir Maniak
|
||||
137 M Archfiend of Despair @Josh Hass
|
||||
144 R Chainer, Dementia Master @Mark Zug
|
||||
146 R Curtains' Call @James Ryman
|
||||
157 U Extinguish All Hope @Aaron J. Riley
|
||||
161 R Ghoulcaller Gisa @Karla Ortiz
|
||||
169 R Kindred Dominance @Bram Sels
|
||||
176 M Ob Nixilis of the Black Oath @Daarken
|
||||
191 R Toxic Deluge @Svetlin Velinov
|
||||
197 R Wake the Dead @Christopher Moeller
|
||||
200 R Wretched Confluence @Kieran Yanner
|
||||
202 U Yargle, Glutton of Urborg @Jehan Choo
|
||||
205 R Ashling the Pilgrim @Wayne Reynolds
|
||||
208 C Blood Aspirant @Tyler Walpole
|
||||
213 R Daretti, Scrap Savant @Dan Scott
|
||||
218 R Drakuseth, Maw of Flames @Grzegorz Rutkowski
|
||||
222 R Fiery Confluence @Kieran Yanner
|
||||
231 R Heartless Hidetsugu @Carl Critchlow
|
||||
232 R Hellkite Charger @Jaime Jones
|
||||
236 M Insurrection @Mark Zug
|
||||
238 R Krenko, Mob Boss @Karl Kopinski
|
||||
241 R Magus of the Wheel @Carl Frank
|
||||
245 R Nesting Dragon @Jehan Choo
|
||||
259 M Star of Extinction @Chris Rahn
|
||||
265 R Treasure Nabber @Alex Konstad
|
||||
267 U Vandalblast @Seb McKinnon
|
||||
274 R Azusa, Lost but Seeking @Winona Nelson
|
||||
289 M Finale of Devastation @Bayard Wu
|
||||
294 M The Great Henge @Adam Paquette
|
||||
295 R Heroic Intervention @James Ryman
|
||||
297 C Ilysian Caryatid @Winona Nelson
|
||||
299 R Jolrael, Mwonvuli Recluse @Izzy
|
||||
303 R Lifeblood Hydra @Alex Horley-Orlandelli
|
||||
308 R Obscuring Haze @Campbell White
|
||||
309 R Ohran Frostfang @Torstein Nordstrand
|
||||
310 M Omnath, Locus of Mana @Mike Bierek
|
||||
316 R Regal Behemoth @Jakub Kasper
|
||||
317 R Rishkar, Peema Renegade @Todd Lockwood
|
||||
320 M Selvala, Heart of the Wilds @Tyler Jacobson
|
||||
321 C Skyshroud Claim @Anna Steinbauer
|
||||
331 R Wayward Swordtooth @Chris Rahn
|
||||
334 R Yisan, the Wanderer Bard @Chase Stone
|
||||
342 R Karador, Ghost Chieftain @Todd Lockwood
|
||||
344 R Maelstrom Wanderer @Victor Adame Minguez
|
||||
348 M Mizzix of the Izmagnus @Cliff Childs
|
||||
350 R Queen Marchesa @Kieran Yanner
|
||||
361 M The Ur-Dragon @Jaime Jones
|
||||
367 C Arcane Signet @Dan Scott
|
||||
371 R Boompile @Filip Burburan
|
||||
372 C Brass Knuckles @Yeong-Hao Han
|
||||
375 R Champion's Helm @Alan Pollack
|
||||
379 R Emerald Medallion @Daniel Ljunggren
|
||||
382 U Fellwar Stone @John Avon
|
||||
388 R Hammer of Nazahn @Victor Adame Minguez
|
||||
393 M The Immortal Sun @Kieran Yanner
|
||||
395 R Jet Medallion @Daniel Ljunggren
|
||||
396 M Jeweled Lotus @Alayna Danner
|
||||
483 M Capture of Jingzhou @Jack Wei
|
||||
401 R Pearl Medallion @Daniel Ljunggren
|
||||
405 R Ruby Medallion @Daniel Ljunggren
|
||||
407 R Sapphire Medallion @Daniel Ljunggren
|
||||
410 U Sol Ring @Mike Bierek
|
||||
415 U Thran Dynamo @Ron Spears
|
||||
420 C Command Tower @Ryan Yee
|
||||
423 C Path of Ancestry @Alayna Danner
|
||||
426 U Rogue's Passage @Christine Choi
|
||||
429 C Thriving Bluff @Johannes Voss
|
||||
430 C Thriving Grove @Ravenna Tran
|
||||
431 C Thriving Heath @Alayna Danner
|
||||
432 C Thriving Isle @Jonas De Ro
|
||||
433 C Thriving Moor @Titus Lunter
|
||||
437 L Plains @Alayna Danner
|
||||
438 L Plains @Rebecca Guay
|
||||
439 L Plains @Mark Poole
|
||||
440 L Island @Alayna Danner
|
||||
441 L Island @Rebecca Guay
|
||||
442 L Island @Mark Poole
|
||||
443 L Swamp @Alayna Danner
|
||||
444 L Swamp @Rebecca Guay
|
||||
445 L Swamp @Mark Poole
|
||||
446 L Mountain @Alayna Danner
|
||||
447 L Mountain @Rebecca Guay
|
||||
448 L Mountain @Mark Poole
|
||||
449 L Forest @Alayna Danner
|
||||
450 L Forest @Rebecca Guay
|
||||
451 L Forest @Mark Poole
|
||||
452 M Kozilek, the Great Distortion @Aleksi Briclot
|
||||
455 R Alms Collector @Bram Sels
|
||||
456 R Angelic Field Marshal @Scott Murphy
|
||||
458 R Balan, Wandering Knight @Svetlin Velinov
|
||||
460 R Grand Abolisher @Eric Deschamps
|
||||
462 M Heliod, Sun-Crowned @Lius Lasahido
|
||||
464 M Land Tax @Chuck Lukacs
|
||||
469 R Puresteel Paladin @Jason Chan
|
||||
475 R Sublime Exhalation @Lake Hurwitz
|
||||
479 R Aminatou's Augury @Seb McKinnon
|
||||
481 R Braids, Conjurer Adept @Zoltan Boros & Gabor Szikszai
|
||||
483 R Capture of Jingzhou @Jack Wei
|
||||
488 R Faerie Artisans @Tony Foti
|
||||
490 R Lorthos, the Tidemaker @Kekai Kotaki
|
||||
491 R Minds Aglow @Yeong-Hao Han
|
||||
492 R Mystic Confluence @Kieran Yanner
|
||||
493 R Personal Tutor @Julie Dillon
|
||||
495 M Spellseeker @Igor Kieryluk
|
||||
497 R Stormsurge Kraken @Svetlin Velinov
|
||||
500 R Teferi, Temporal Archmage @Tyler Jacobson
|
||||
502 M Urza, Lord High Artificer @Grzegorz Rutkowski
|
||||
503 M Archfiend of Despair @Josh Hass
|
||||
505 R Chainer, Dementia Master @Mark Zug
|
||||
507 R Deadly Rollick @Izzy
|
||||
517 M Ob Nixilis of the Black Oath @Daarken
|
||||
522 R Sower of Discord @Wisnu Tan
|
||||
523 R Toxic Deluge @Svetlin Velinov
|
||||
526 R Wake the Dead @Christopher Moeller
|
||||
527 R Wretched Confluence @Kieran Yanner
|
||||
529 R Avatar of Slaughter @Jason A. Engle
|
||||
531 R Daretti, Scrap Savant @Dan Scott
|
||||
542 M Insurrection @Mark Zug
|
||||
543 R Krenko, Mob Boss @Karl Kopinski
|
||||
544 R Magus of the Wheel @Carl Frank
|
||||
546 R Nesting Dragon @Jehan Choo
|
||||
548 R Savage Beating @Matt Thompson
|
||||
550 M Star of Extinction @Chris Rahn
|
||||
552 R Treasure Nabber @Alex Konstad
|
||||
554 R Azusa, Lost but Seeking @Winona Nelson
|
||||
559 M Finale of Devastation @Bayard Wu
|
||||
563 R Heroic Intervention @James Ryman
|
||||
564 R Jolrael, Mwonvuli Recluse @Izzy
|
||||
565 R Lifeblood Hydra @Alex Horley-Orlandelli
|
||||
566 R Obscuring Haze @Campbell White
|
||||
568 M Omnath, Locus of Mana @Mike Bierek
|
||||
569 R Regal Behemoth @Jakub Kasper
|
||||
571 M Selvala, Heart of the Wilds @Tyler Jacobson
|
||||
576 R Wayward Swordtooth @Chris Rahn
|
||||
577 R Yisan, the Wanderer Bard @Chase Stone
|
||||
578 R Experiment Kraj @Mark Tedin
|
||||
581 R Karador, Ghost Chieftain @Todd Lockwood
|
||||
583 R Maelstrom Wanderer @Victor Adame Minguez
|
||||
586 M Mizzix of the Izmagnus @Cliff Childs
|
||||
587 M Nekusar, the Mindrazer @Mark Winters
|
||||
588 R Queen Marchesa @Kieran Yanner
|
||||
594 M The Ur-Dragon @Jaime Jones
|
||||
600 R Boompile @Filip Burburan
|
||||
601 R Champion's Helm @Alan Pollack
|
||||
602 R Chromatic Lantern @Jung Park
|
||||
603 R Emerald Medallion @Daniel Ljunggren
|
||||
606 R Hammer of Nazahn @Victor Adame Minguez
|
||||
608 M The Immortal Sun @Kieran Yanner
|
||||
610 R Jet Medallion @Daniel Ljunggren
|
||||
611 M Jeweled Lotus @Alayna Danner
|
||||
612 R Pearl Medallion @Daniel Ljunggren
|
||||
613 R Ruby Medallion @Daniel Ljunggren
|
||||
614 R Sapphire Medallion @Daniel Ljunggren
|
||||
625 R Grand Abolisher @
|
||||
627 R Puresteel Paladin @Richard Kane Ferguson
|
||||
633 R Personal Tutor @Jeff Miracola
|
||||
635 M Spellseeker @
|
||||
640 R Kindred Dominance @Thomas M. Baxa
|
||||
643 R Magus of the Wheel @Scott M. Fischer
|
||||
645 R Treasure Nabber @Pete Venters
|
||||
646 U Vandalblast @
|
||||
651 R Regal Behemoth @
|
||||
653 U Arcane Signet @Drew Tucker
|
||||
654 R Champion's Helm @Paolo Parente
|
||||
656 R Extraplanar Lens @Ron Spears
|
||||
657 U Fellwar Stone @Randy Gallegos
|
||||
658 U Thran Dynamo @
|
||||
661 C Path of Ancestry @
|
||||
663 U Reliquary Tower @Mark Poole
|
||||
668 M Kozilek, the Great Distortion @Grant Griffin
|
||||
671 U Kemba, Kha Regent @Peter Diamond
|
||||
679 R Azusa, Lost but Seeking @Benjamin Ee
|
||||
680 M Omnath, Locus of Mana @
|
||||
681 M Selvala, Heart of the Wilds @Jack Hughes
|
||||
683 R Kykar, Wind's Fury @April Prime
|
||||
684 R Maelstrom Wanderer @
|
||||
689 M The Ur-Dragon @Tyler Walpole
|
||||
693 M Smothering Tithe @Jeff Miracola
|
||||
695 R Deadly Rollick @Izzy
|
||||
699 M Insurrection @
|
||||
700 M Finale of Devastation @Daren Bader
|
||||
701 R Obscuring Haze @Daren Bader
|
||||
702 M Jeweled Lotus @Olena Richards
|
||||
703 U Sol Ring @Mark Poole
|
||||
704 M Zhulodok, Void Gorger @Lius Lasahido
|
||||
705 M Anikthea, Hand of Erebos @Magali Villeneuve
|
||||
706 M Commodore Guff @Matt Stewart
|
||||
@@ -31,6 +233,10 @@ ScryfallCode=CMM
|
||||
780 M Anikthea, Hand of Erebos @Magali Villeneuve
|
||||
781 M Commodore Guff @Matt Stewart
|
||||
782 M Sliver Gravemother @Chris Rahn
|
||||
1057 M Kozilek, the Great Distortion @Grant Griffin
|
||||
1060 M Urza, Lord High Artificer @
|
||||
1063 M Omnath, Locus of Mana @
|
||||
1064 M Selvala, Heart of the Wilds @Jack Hughes
|
||||
1065 M The Ur-Dragon @Tyler Walpole
|
||||
1066 M Jeweled Lotus @Olena Richards
|
||||
1067 R Disrupt Decorum @Ron Spencer
|
||||
|
||||
@@ -9,19 +9,25 @@ ScryfallCode=EA3
|
||||
1 R Cyclonic Rift @Chris Rahn
|
||||
2 R Abbot of Keral Keep @Deruchenko Alexander
|
||||
3 U Shrapnel Blast @Hideaki Takamura
|
||||
4 R Eidolon of Blossoms @Min Yum
|
||||
5 R Chord of Calling @Karl Kopinski
|
||||
6 M Worldspine Wurm @Richard Wright
|
||||
7 U Golgari Charm @Zoltan Boros
|
||||
8 U Simic Charm @Zoltan Boros
|
||||
9 C Izzet Charm @Zoltan Boros
|
||||
10 U Gruul Charm @Zoltan Boros
|
||||
11 U Orzhov Charm @Zoltan Boros
|
||||
12 R Voice of Resurgence @Winona Nelson
|
||||
13 R Deathrite Shaman @Steve Argyle
|
||||
14 R Canopy Vista @Adam Paquette
|
||||
15 R Cinder Glade @Adam Paquette
|
||||
16 R Smoldering Marsh @Adam Paquette
|
||||
17 R Sunken Hollow @Adam Paquette
|
||||
18 R Prairie Stream @Adam Paquette
|
||||
19 R Thespian's Stage @John Avon
|
||||
4 U Sylvan Scrying @Daniel Ljunggren
|
||||
5 R Eidolon of Blossoms @Min Yum
|
||||
6 R Chord of Calling @Karl Kopinski
|
||||
7 M Worldspine Wurm @Richard Wright
|
||||
8 U Judge's Familiar @Jack Wang
|
||||
9 U Golgari Charm @Zoltan Boros
|
||||
10 U Simic Charm @Zoltan Boros
|
||||
11 U Izzet Charm @Zoltan Boros
|
||||
12 U Gruul Charm @Zoltan Boros
|
||||
13 U Orzhov Charm @Zoltan Boros
|
||||
14 M Voice of Resurgence @Winona Nelson
|
||||
15 R Deathrite Shaman @Steve Argyle
|
||||
16 M Obzedat, Ghost Council @Svetlin Velinov
|
||||
17 M Omnath, Locus of Rage @Brad Rigney
|
||||
18 M Xenagos, God of Revels @Jason Chan
|
||||
19 U Accorder's Shield @Alan Pollack
|
||||
20 R Canopy Vista @Adam Paquette
|
||||
21 R Cinder Glade @Adam Paquette
|
||||
22 R Smoldering Marsh @Adam Paquette
|
||||
23 R Sunken Hollow @Adam Paquette
|
||||
24 R Prairie Stream @Adam Paquette
|
||||
25 R Thespian's Stage @John Avon
|
||||
|
||||
@@ -7,21 +7,27 @@ ScryfallCode=HA7
|
||||
|
||||
[cards]
|
||||
1 M Sun Titan @Todd Lockwood
|
||||
2 M Frost Titan @Mike Bierek
|
||||
3 M Vendilion Clique @Willian Murai
|
||||
4 M Grave Titan @Nils Hamm
|
||||
5 M Inferno Titan @Kev Walker
|
||||
6 C Tribal Flames @Zack Stella
|
||||
7 M Primeval Titan @Aleksi Briclot
|
||||
8 C Wild Nacatl @Wayne Reynolds
|
||||
9 U Acidic Slime @Karl Kopinski
|
||||
10 R Tooth and Nail @Jesper Ejsing
|
||||
11 U Bloodbraid Elf @Raymond Swanland
|
||||
12 U Mortarpod @Eric Deschamps
|
||||
13 U Worn Powerstone @Henry G. Higginbotham
|
||||
14 R Sword of Fire and Ice @Mark Zug
|
||||
15 R Fiery Islet @Richard Wright
|
||||
16 R Sunbaked Canyon @Yeong-Hao Han
|
||||
17 R Nurturing Peatland @Sam Burley
|
||||
18 R Silent Clearing @Seb McKinnon
|
||||
19 R Waterlogged Grove @John Avon
|
||||
2 R Giver of Runes @Seb McKinnon
|
||||
3 M Frost Titan @Mike Bierek
|
||||
4 C Repeal @Dan Scott
|
||||
5 M Vendilion Clique @Willian Murai
|
||||
6 M Grave Titan @Nils Hamm
|
||||
7 C Echoing Decay @Greg Staples
|
||||
8 C Unearth @Jehan Choo
|
||||
9 R Bloodghast @Daarken
|
||||
10 M Inferno Titan @Kev Walker
|
||||
11 U Tribal Flames @Zack Stella
|
||||
12 M Primeval Titan @Aleksi Briclot
|
||||
13 C Wild Nacatl @Wayne Reynolds
|
||||
14 U Acidic Slime @Karl Kopinski
|
||||
15 R Tooth and Nail @Jesper Ejsing
|
||||
16 U Bloodbraid Elf @Raymond Swanland
|
||||
17 U Mortarpod @Eric Deschamps
|
||||
18 U Worn Powerstone @Henry G. Higginbotham
|
||||
19 C Wayfarer's Bauble @Darrell Riche
|
||||
20 R Sword of Fire and Ice @Mark Zug
|
||||
21 R Fiery Islet @Richard Wright
|
||||
22 R Sunbaked Canyon @Yeong-Hao Han
|
||||
23 R Nurturing Peatland @Sam Burley
|
||||
24 R Silent Clearing @Seb McKinnon
|
||||
25 R Waterlogged Grove @John Avon
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 75 KiB |
@@ -2,13 +2,14 @@ package forge.gamemodes.match.input;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.GameObject;
|
||||
@@ -34,7 +35,7 @@ import forge.util.TextUtil;
|
||||
public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
private final List<Card> choices;
|
||||
// some cards can be targeted several times (eg: distribute damage as you choose)
|
||||
private final Map<GameEntity, Integer> targetDepth = new HashMap<>();
|
||||
private final Set<GameEntity> targets = Sets.newHashSet();
|
||||
private final TargetRestrictions tgt;
|
||||
private final SpellAbility sa;
|
||||
private final Collection<Integer> divisionValues;
|
||||
@@ -60,7 +61,7 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
|
||||
this.mustTargetFiltered = mustTargetFiltered;
|
||||
for (final Card card : sa.getTargets().getTargetCards()) {
|
||||
targetDepth.put(card, Integer.valueOf(1));
|
||||
targets.add(card);
|
||||
lastTarget = card;
|
||||
}
|
||||
|
||||
@@ -72,7 +73,7 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
FThreads.invokeInEdtNowOrLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (final GameEntity c : targetDepth.keySet()) {
|
||||
for (final GameEntity c : targets) {
|
||||
if (c instanceof Card) {
|
||||
controller.getGui().setUsedToPay(CardView.get((Card) c), true);
|
||||
}
|
||||
@@ -98,20 +99,17 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
} else {
|
||||
sb.append(sa.getHostCard()).append(" - ").append(tgt.getVTSelection());
|
||||
}
|
||||
if (!targetDepth.entrySet().isEmpty()) {
|
||||
if (!targets.isEmpty()) {
|
||||
sb.append("\nTargeted: ");
|
||||
}
|
||||
for (final Entry<GameEntity, Integer> o : targetDepth.entrySet()) {
|
||||
for (final GameEntity o : targets) {
|
||||
//if it's not in gdx port landscape mode, append the linebreak
|
||||
if (!ForgeConstants.isGdxPortLandscape)
|
||||
sb.append("\n");
|
||||
sb.append(o.getKey());
|
||||
sb.append(o);
|
||||
//if it's in gdx port landscape mode, instead append the comma with space...
|
||||
if (ForgeConstants.isGdxPortLandscape)
|
||||
sb.append(", ");
|
||||
if (o.getValue() > 1) {
|
||||
sb.append(TextUtil.concatNoSpace(" (", String.valueOf(o.getValue()), " times)"));
|
||||
}
|
||||
}
|
||||
if (!sa.getUniqueTargets().isEmpty()) {
|
||||
sb.append("\nParent Targeted:");
|
||||
@@ -164,7 +162,8 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
|
||||
@Override
|
||||
protected final boolean onCardSelected(final Card card, final List<Card> otherCardsToSelect, final ITriggerEvent triggerEvent) {
|
||||
if (tgt.isUniqueTargets() && targetDepth.containsKey(card)) {
|
||||
if (targets.contains(card)) {
|
||||
removeTarget(card);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -230,7 +229,7 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
// If all cards must have same controllers
|
||||
if (tgt.isSameController()) {
|
||||
final List<Player> targetedControllers = new ArrayList<>();
|
||||
for (final GameObject o : targetDepth.keySet()) {
|
||||
for (final GameObject o : targets) {
|
||||
if (o instanceof Card) {
|
||||
final Player p = ((Card) o).getController();
|
||||
targetedControllers.add(p);
|
||||
@@ -245,7 +244,7 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
// If all cards must have different controllers
|
||||
if (tgt.isDifferentControllers()) {
|
||||
final List<Player> targetedControllers = new ArrayList<>();
|
||||
for (final GameObject o : targetDepth.keySet()) {
|
||||
for (final GameObject o : targets) {
|
||||
if (o instanceof Card) {
|
||||
final Player p = ((Card) o).getController();
|
||||
targetedControllers.add(p);
|
||||
@@ -260,7 +259,7 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
// If all cards must have different mana values
|
||||
if (tgt.isDifferentCMC()) {
|
||||
final List<Integer> targetedCMCs = new ArrayList<>();
|
||||
for (final GameObject o : targetDepth.keySet()) {
|
||||
for (final GameObject o : targets) {
|
||||
if (o instanceof Card) {
|
||||
final Integer cmc = ((Card) o).getCMC();
|
||||
targetedCMCs.add(cmc);
|
||||
@@ -289,7 +288,7 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
|
||||
@Override
|
||||
public String getActivateAction(final Card card) {
|
||||
if (!tgt.isUniqueTargets() && targetDepth.containsKey(card)) {
|
||||
if (!tgt.isUniqueTargets() && targets.contains(card)) {
|
||||
return null;
|
||||
}
|
||||
if (choices.contains(card)) {
|
||||
@@ -300,7 +299,8 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
|
||||
@Override
|
||||
protected final void onPlayerSelected(final Player player, final ITriggerEvent triggerEvent) {
|
||||
if (!tgt.isUniqueTargets() && targetDepth.containsKey(player)) {
|
||||
if (targets.contains(player)) {
|
||||
removeTarget(player);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -360,8 +360,7 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
else if (ge instanceof Player) {
|
||||
getController().getGui().setHighlighted(PlayerView.get((Player) ge), true);
|
||||
}
|
||||
final Integer val = targetDepth.get(ge);
|
||||
targetDepth.put(ge, val == null ? Integer.valueOf(1) : Integer.valueOf(val.intValue() + 1) );
|
||||
targets.add(ge);
|
||||
|
||||
if (hasAllTargets()) {
|
||||
bOk = true;
|
||||
@@ -376,8 +375,23 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
}
|
||||
}
|
||||
|
||||
private void removeTarget(final GameEntity ge) {
|
||||
targets.remove(ge);
|
||||
sa.getTargets().remove(ge);
|
||||
if (ge instanceof Card) {
|
||||
getController().getGui().setUsedToPay(CardView.get((Card) ge), false);
|
||||
// try to get last selected card
|
||||
lastTarget = Iterables.getLast(Iterables.filter(targets, Card.class), null);
|
||||
}
|
||||
else if (ge instanceof Player) {
|
||||
getController().getGui().setHighlighted(PlayerView.get((Player) ge), false);
|
||||
}
|
||||
|
||||
this.showMessage();
|
||||
}
|
||||
|
||||
private void done() {
|
||||
for (final GameEntity c : targetDepth.keySet()) {
|
||||
for (final GameEntity c : targets) {
|
||||
if (c instanceof Card) {
|
||||
getController().getGui().setUsedToPay(CardView.get((Card) c), false);
|
||||
}
|
||||
|
||||
@@ -271,6 +271,7 @@ public enum FSkinProp {
|
||||
ICO_MANASHARD (new int[] {2, 304, 100, 100}, PropType.ADVENTURE),
|
||||
ICO_ADVLOGO (new int[] {2, 2, 300, 300}, PropType.ADVENTURE),
|
||||
ICO_ADVDECKBOX (new int[] {111, 365, 192, 240}, PropType.ADVENTURE),
|
||||
ICO_ADVFLIP (new int[] {10, 504, 80, 80}, PropType.ADVENTURE),
|
||||
|
||||
//menu icon
|
||||
ICO_MENU_GALAXY (new int[] {0, 1520, 80, 80}, PropType.ICON),
|
||||
|
||||
@@ -832,7 +832,13 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
|
||||
}
|
||||
}
|
||||
if (GuiBase.getInterface().isLibgdxPort()) {
|
||||
return this.getGui().confirm(wrapper.getView().getHostCard(), buildQuestion.toString().replaceAll("\n", " "));
|
||||
CardView cardView;
|
||||
SpellAbilityView spellAbilityView = wrapper.getView();
|
||||
if (spellAbilityView != null) //updated view
|
||||
cardView = spellAbilityView.getHostCard();
|
||||
else
|
||||
cardView = wrapper.getCardView();
|
||||
return this.getGui().confirm(cardView, buildQuestion.toString().replaceAll("\n", " "));
|
||||
} else {
|
||||
final InputConfirm inp = new InputConfirm(this, buildQuestion.toString(), wrapper);
|
||||
inp.showAndWait();
|
||||
@@ -1431,7 +1437,13 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
|
||||
public boolean confirmReplacementEffect(final ReplacementEffect replacementEffect, final SpellAbility effectSA,
|
||||
GameEntity affected, final String question) {
|
||||
if (GuiBase.getInterface().isLibgdxPort()) {
|
||||
return this.getGui().confirm(effectSA.getView().getHostCard(), question.replaceAll("\n", " "));
|
||||
CardView cardView;
|
||||
SpellAbilityView spellAbilityView = effectSA.getView();
|
||||
if (spellAbilityView != null) //updated view
|
||||
cardView = spellAbilityView.getHostCard();
|
||||
else //fallback
|
||||
cardView = effectSA.getCardView();
|
||||
return this.getGui().confirm(cardView, question.replaceAll("\n", " "));
|
||||
} else {
|
||||
final InputConfirm inp = new InputConfirm(this, question, effectSA);
|
||||
inp.showAndWait();
|
||||
@@ -1861,7 +1873,11 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
|
||||
try {
|
||||
cardView = CardView.getCardForUi(ImageUtil.getPaperCardFromImageKey(sa.getView().getHostCard().getCurrentState().getTrackableImageKey()));
|
||||
} catch (Exception e) {
|
||||
cardView = sa.getView().getHostCard();
|
||||
SpellAbilityView spellAbilityView = sa.getView();
|
||||
if (spellAbilityView != null) //updated view
|
||||
cardView = spellAbilityView.getHostCard();
|
||||
else //fallback
|
||||
cardView = sa.getCardView();
|
||||
}
|
||||
return this.getGui().confirm(cardView, question.replaceAll("\n", " "));
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user