mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Use rendered cards for Adventure when no image file has been found.
This allows seeing cards that are yet to download as well as custom cards. Also, a card rendering is forced before showing the mode selection screen, a temporary fix with an issue with CardImageRenderer, where it fails the very first time.
This commit is contained in:
@@ -27,12 +27,16 @@ import forge.assets.AssetsDownloader;
|
|||||||
import forge.assets.FSkin;
|
import forge.assets.FSkin;
|
||||||
import forge.assets.FSkinFont;
|
import forge.assets.FSkinFont;
|
||||||
import forge.assets.ImageCache;
|
import forge.assets.ImageCache;
|
||||||
|
import forge.card.CardImageRenderer;
|
||||||
|
import forge.card.CardRenderer;
|
||||||
import forge.error.ExceptionHandler;
|
import forge.error.ExceptionHandler;
|
||||||
|
import forge.game.card.CardView;
|
||||||
import forge.gamemodes.limited.BoosterDraft;
|
import forge.gamemodes.limited.BoosterDraft;
|
||||||
import forge.gui.FThreads;
|
import forge.gui.FThreads;
|
||||||
import forge.gui.GuiBase;
|
import forge.gui.GuiBase;
|
||||||
import forge.gui.error.BugReporter;
|
import forge.gui.error.BugReporter;
|
||||||
import forge.interfaces.IDeviceAdapter;
|
import forge.interfaces.IDeviceAdapter;
|
||||||
|
import forge.item.PaperCard;
|
||||||
import forge.localinstance.properties.ForgeConstants;
|
import forge.localinstance.properties.ForgeConstants;
|
||||||
import forge.localinstance.properties.ForgePreferences;
|
import forge.localinstance.properties.ForgePreferences;
|
||||||
import forge.localinstance.properties.ForgePreferences.FPref;
|
import forge.localinstance.properties.ForgePreferences.FPref;
|
||||||
@@ -384,6 +388,11 @@ public class Forge implements ApplicationListener {
|
|||||||
FThreads.invokeInEdtLater(new Runnable() {
|
FThreads.invokeInEdtLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
//Force CardImageRenderer to render a card. This prevents a "fail on first run" scenario.
|
||||||
|
PaperCard dummy = StaticData.instance().fetchCard("Black Lotus", "LEB", "233");
|
||||||
|
graphics.getBatch().begin(); //Will throw an exception without this.
|
||||||
|
CardImageRenderer.drawCardImage(graphics, CardView.getCardForUi(dummy), false, 0, 0, 100, 100, CardRenderer.CardStackPosition.Top, false, false);
|
||||||
|
|
||||||
//selection
|
//selection
|
||||||
splashScreen.setShowModeSelector(true);
|
splashScreen.setShowModeSelector(true);
|
||||||
//start background music
|
//start background music
|
||||||
|
|||||||
@@ -200,6 +200,7 @@ public class RewardScene extends UIScene {
|
|||||||
|
|
||||||
float spacing = 2;
|
float spacing = 2;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
Forge.getGraphics().startClip(); //This allows to draw placeholder cards.
|
||||||
for (Reward reward : new Array.ArrayIterator<>(newRewards)) {
|
for (Reward reward : new Array.ArrayIterator<>(newRewards)) {
|
||||||
boolean skipCard = false;
|
boolean skipCard = false;
|
||||||
if (type == Type.Shop) {
|
if (type == Type.Shop) {
|
||||||
@@ -238,6 +239,7 @@ public class RewardScene extends UIScene {
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
updateBuyButtons();
|
updateBuyButtons();
|
||||||
|
Forge.getGraphics().endClip();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateBuyButtons() {
|
private void updateBuyButtons() {
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
package forge.adventure.util;
|
package forge.adventure.util;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.Gdx;
|
||||||
|
import com.badlogic.gdx.graphics.GL20;
|
||||||
import com.badlogic.gdx.graphics.Pixmap;
|
import com.badlogic.gdx.graphics.Pixmap;
|
||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
import com.badlogic.gdx.graphics.g2d.Batch;
|
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||||
import com.badlogic.gdx.graphics.g2d.Sprite;
|
import com.badlogic.gdx.graphics.g2d.Sprite;
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
|
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
|
import com.badlogic.gdx.graphics.glutils.FrameBuffer;
|
||||||
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
|
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
|
||||||
import com.badlogic.gdx.math.MathUtils;
|
import com.badlogic.gdx.math.MathUtils;
|
||||||
import com.badlogic.gdx.math.Matrix4;
|
import com.badlogic.gdx.math.Matrix4;
|
||||||
@@ -21,11 +24,17 @@ import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
|
|||||||
import com.badlogic.gdx.utils.Align;
|
import com.badlogic.gdx.utils.Align;
|
||||||
import com.badlogic.gdx.utils.Disposable;
|
import com.badlogic.gdx.utils.Disposable;
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
|
import forge.Graphics;
|
||||||
import forge.adventure.scene.RewardScene;
|
import forge.adventure.scene.RewardScene;
|
||||||
import forge.adventure.scene.Scene;
|
import forge.adventure.scene.Scene;
|
||||||
import forge.assets.FSkin;
|
import forge.assets.FSkin;
|
||||||
import forge.assets.ImageCache;
|
import forge.assets.ImageCache;
|
||||||
|
import forge.card.CardImageRenderer;
|
||||||
|
import forge.card.CardRenderer;
|
||||||
|
import forge.game.card.Card;
|
||||||
|
import forge.game.card.CardView;
|
||||||
import forge.gui.GuiBase;
|
import forge.gui.GuiBase;
|
||||||
|
import forge.item.PaperCard;
|
||||||
import forge.util.ImageFetcher;
|
import forge.util.ImageFetcher;
|
||||||
|
|
||||||
import static forge.adventure.util.Paths.ITEMS_ATLAS;
|
import static forge.adventure.util.Paths.ITEMS_ATLAS;
|
||||||
@@ -48,6 +57,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
|||||||
boolean flipOnClick;
|
boolean flipOnClick;
|
||||||
private boolean hover;
|
private boolean hover;
|
||||||
|
|
||||||
|
private FrameBuffer frameBuffer;
|
||||||
static final ImageFetcher fetcher = GuiBase.getInterface().getImageFetcher();
|
static final ImageFetcher fetcher = GuiBase.getInterface().getImageFetcher();
|
||||||
Image toolTipImage;
|
Image toolTipImage;
|
||||||
|
|
||||||
@@ -55,6 +65,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
|||||||
public void dispose() {
|
public void dispose() {
|
||||||
if (needsToBeDisposed)
|
if (needsToBeDisposed)
|
||||||
image.dispose();
|
image.dispose();
|
||||||
|
if (frameBuffer != null) frameBuffer.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Reward getReward() {
|
public Reward getReward() {
|
||||||
@@ -66,6 +77,24 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
|||||||
setCardImage(ImageCache.getImage(reward.getCard().getImageKey(false), false));
|
setCardImage(ImageCache.getImage(reward.getCard().getImageKey(false), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Texture renderPlaceholder(PaperCard card){
|
||||||
|
Gdx.gl.glDisable(GL20.GL_SCISSOR_TEST);
|
||||||
|
Graphics G = new Graphics();
|
||||||
|
Matrix4 m = new Matrix4();
|
||||||
|
if (frameBuffer == null)
|
||||||
|
this.frameBuffer = new FrameBuffer(Pixmap.Format.RGB888, 488, 680, false);
|
||||||
|
frameBuffer.begin();
|
||||||
|
m.setToOrtho2D(0,680,488, -680); //So it renders flipped.
|
||||||
|
G.begin(488, 680);
|
||||||
|
G.setProjectionMatrix(m);
|
||||||
|
CardImageRenderer.drawCardImage(G, CardView.getCardForUi(card), false, 0, 0, 488, 680, CardRenderer.CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true);
|
||||||
|
G.end();
|
||||||
|
G.dispose();
|
||||||
|
setCardImage(frameBuffer.getColorBufferTexture());
|
||||||
|
frameBuffer.end();
|
||||||
|
Gdx.gl.glEnable(GL20.GL_SCISSOR_TEST);
|
||||||
|
return frameBuffer.getColorBufferTexture();
|
||||||
|
}
|
||||||
public RewardActor(Reward reward, boolean flippable) {
|
public RewardActor(Reward reward, boolean flippable) {
|
||||||
this.flipOnClick = flippable;
|
this.flipOnClick = flippable;
|
||||||
this.reward = reward;
|
this.reward = reward;
|
||||||
@@ -79,7 +108,11 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false))) {
|
if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false))) {
|
||||||
fetcher.fetchImage(reward.getCard().getImageKey(false), this);
|
//Cannot find an image file, set up a rendered card until (if) a file is downloaded.
|
||||||
|
PaperCard C = reward.getCard();
|
||||||
|
Texture T = renderPlaceholder(C);
|
||||||
|
setCardImage(T);
|
||||||
|
fetcher.fetchImage(C.getImageKey(false), this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user