mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Support extracting art from plane cards
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -1335,6 +1335,7 @@ forge-gui-mobile/src/forge/screens/online/OnlineMenu.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneSelector.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestPrefsScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/LoadConquestScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java -text
|
||||
@@ -1385,6 +1386,7 @@ forge-gui-mobile/src/forge/toolbox/FScrollPane.java -text
|
||||
forge-gui-mobile/src/forge/toolbox/FSpinner.java -text
|
||||
forge-gui-mobile/src/forge/toolbox/FTextArea.java -text
|
||||
forge-gui-mobile/src/forge/toolbox/FTextField.java -text
|
||||
forge-gui-mobile/src/forge/toolbox/FTimer.java -text
|
||||
forge-gui-mobile/src/forge/toolbox/FToggleSwitch.java -text
|
||||
forge-gui-mobile/src/forge/toolbox/GuiChoose.java -text
|
||||
forge-gui-mobile/src/forge/toolbox/GuiDialog.java -text
|
||||
|
||||
@@ -19,6 +19,16 @@ public abstract class ForgeAnimation {
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
if (!activeAnimations.contains(this)) { return; } //prevent stopping the same animation multiple times
|
||||
|
||||
activeAnimations.remove(this);
|
||||
onEnd(false);
|
||||
if (activeAnimations.isEmpty()) { //when all animations have stopped, turn continuous rendering back off
|
||||
Forge.stopContinuousRendering();
|
||||
}
|
||||
}
|
||||
|
||||
public static void advanceAll() {
|
||||
if (activeAnimations.isEmpty()) { return; }
|
||||
|
||||
|
||||
@@ -81,12 +81,14 @@ public class CardRenderer {
|
||||
|
||||
//extract card art from the given card
|
||||
public static FImageComplex getCardArt(IPaperCard pc) {
|
||||
return getCardArt(ImageKeys.getImageKey(pc, false), pc.getRules().getSplitType() == CardSplitType.Split);
|
||||
CardType type = pc.getRules().getType();
|
||||
return getCardArt(ImageKeys.getImageKey(pc, false), pc.getRules().getSplitType() == CardSplitType.Split, type.isPlane() || type.isPhenomenon());
|
||||
}
|
||||
public static FImageComplex getCardArt(CardView card) {
|
||||
return getCardArt(card.getCurrentState().getImageKey(), card.isSplitCard());
|
||||
CardTypeView type = card.getCurrentState().getType();
|
||||
return getCardArt(card.getCurrentState().getImageKey(), card.isSplitCard(), type.isPlane() || type.isPhenomenon());
|
||||
}
|
||||
public static FImageComplex getCardArt(String imageKey, boolean isSplitCard) {
|
||||
public static FImageComplex getCardArt(String imageKey, boolean isSplitCard, boolean isHorizontalCard) {
|
||||
FImageComplex cardArt = cardArtCache.get(imageKey);
|
||||
if (cardArt == null) {
|
||||
Texture image = ImageCache.getImage(imageKey, true);
|
||||
@@ -103,6 +105,16 @@ public class CardRenderer {
|
||||
y = 0; //delay adjusting y and h until drawn
|
||||
w *= 106f / 250f;
|
||||
}
|
||||
else if (isHorizontalCard) { //allow rotated image for horizontal cards
|
||||
if (h > w) { //rotate image if its not the correct orientation
|
||||
w = h;
|
||||
h = image.getWidth();
|
||||
}
|
||||
x = w * 40f / 430f;
|
||||
y = h * 40f / 300f;
|
||||
w *= 349f / 430f;
|
||||
h *= 156f / 300f;
|
||||
}
|
||||
else {
|
||||
x = w * 0.1f;
|
||||
y = h * 0.11f;
|
||||
|
||||
@@ -93,7 +93,7 @@ public class MatchController extends AbstractGuiGame {
|
||||
avatar = new FTextureRegionImage(FSkin.getAvatars().get(p.getAvatarIndex()));
|
||||
}
|
||||
else { //handle lobby players with art from cards
|
||||
avatar = CardRenderer.getCardArt(p.getAvatarCardImageKey(), false);
|
||||
avatar = CardRenderer.getCardArt(p.getAvatarCardImageKey(), false, false);
|
||||
}
|
||||
}
|
||||
return avatar;
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package forge.screens.planarconquest;
|
||||
|
||||
import forge.Graphics;
|
||||
import forge.assets.FImage;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.item.PaperCard;
|
||||
import forge.planarconquest.ConquestPlane;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
import forge.toolbox.FTimer;
|
||||
import forge.util.collect.FCollectionView;
|
||||
|
||||
public class ConquestPlaneSelector extends FDisplayObject {
|
||||
private static final ConquestPlane[] planes = ConquestPlane.values();
|
||||
|
||||
private final FTimer timer = new FTimer(2.5f) {
|
||||
@Override
|
||||
protected void tick() {
|
||||
FCollectionView<PaperCard> planeCards = getSelectedPlane().getPlaneCards();
|
||||
if (++artIndex == planeCards.size()) {
|
||||
artIndex = 0;
|
||||
}
|
||||
currentArt = CardRenderer.getCardArt(planeCards.get(artIndex));
|
||||
}
|
||||
};
|
||||
private int selectedIndex, artIndex;
|
||||
private FImage currentArt;
|
||||
|
||||
public ConquestPlaneSelector() {
|
||||
reset();
|
||||
}
|
||||
|
||||
public ConquestPlane getSelectedPlane() {
|
||||
return planes[selectedIndex];
|
||||
}
|
||||
|
||||
public void activate() {
|
||||
timer.start();
|
||||
}
|
||||
|
||||
public void deactivate() {
|
||||
timer.stop();
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
selectedIndex = 0;
|
||||
artIndex = 0;
|
||||
currentArt = CardRenderer.getCardArt(getSelectedPlane().getPlaneCards().get(artIndex));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Graphics g) {
|
||||
float w = getWidth();
|
||||
float h = getHeight();
|
||||
|
||||
if (currentArt != null) {
|
||||
float artHeight = w * currentArt.getHeight() / currentArt.getWidth();
|
||||
g.drawImage(currentArt, 0, (h - artHeight) / 2, w, artHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -132,8 +132,7 @@ public class NewConquestScreen extends MultiStepWizardScreen<NewConquestScreenMo
|
||||
}
|
||||
|
||||
private static class SelectStartingPlaneStep extends WizardStep<NewConquestScreenModel> {
|
||||
private static final ConquestPlane[] planes = ConquestPlane.values();
|
||||
private int selectedIndex;
|
||||
private final ConquestPlaneSelector planeSelector = add(new ConquestPlaneSelector());
|
||||
|
||||
protected SelectStartingPlaneStep() {
|
||||
super("Select Starting Plane");
|
||||
@@ -141,21 +140,27 @@ public class NewConquestScreen extends MultiStepWizardScreen<NewConquestScreenMo
|
||||
|
||||
@Override
|
||||
protected void doLayout(float width, float height) {
|
||||
planeSelector.setBounds(0, 0, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void reset() {
|
||||
selectedIndex = 0;
|
||||
planeSelector.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivate(NewConquestScreenModel model) {
|
||||
planeSelector.activate();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean updateModelAndAdvance(NewConquestScreenModel model) {
|
||||
model.startingPlane = planes[selectedIndex];
|
||||
return model.startingPlane != null;
|
||||
model.startingPlane = planeSelector.getSelectedPlane();
|
||||
if (model.startingPlane != null) {
|
||||
planeSelector.deactivate();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
29
forge-gui-mobile/src/forge/toolbox/FTimer.java
Normal file
29
forge-gui-mobile/src/forge/toolbox/FTimer.java
Normal file
@@ -0,0 +1,29 @@
|
||||
package forge.toolbox;
|
||||
|
||||
import forge.animation.ForgeAnimation;
|
||||
|
||||
public abstract class FTimer extends ForgeAnimation {
|
||||
private final float interval;
|
||||
private float elapsed;
|
||||
|
||||
public FTimer(float interval0) {
|
||||
interval = interval0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean advance(float dt) {
|
||||
elapsed += dt;
|
||||
while (elapsed >= interval) {
|
||||
tick();
|
||||
elapsed -= interval;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected abstract void tick();
|
||||
|
||||
@Override
|
||||
protected void onEnd(boolean endingAll) {
|
||||
elapsed = 0;
|
||||
}
|
||||
}
|
||||
@@ -295,6 +295,10 @@ public enum ConquestPlane {
|
||||
return commanders;
|
||||
}
|
||||
|
||||
public FCollectionView<PaperCard> getPlaneCards() {
|
||||
return planeCards;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user