mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +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/ConquestDeckEditor.java -text
|
||||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.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/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/ConquestPrefsScreen.java -text
|
||||||
forge-gui-mobile/src/forge/screens/planarconquest/LoadConquestScreen.java -text
|
forge-gui-mobile/src/forge/screens/planarconquest/LoadConquestScreen.java -text
|
||||||
forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.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/FSpinner.java -text
|
||||||
forge-gui-mobile/src/forge/toolbox/FTextArea.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/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/FToggleSwitch.java -text
|
||||||
forge-gui-mobile/src/forge/toolbox/GuiChoose.java -text
|
forge-gui-mobile/src/forge/toolbox/GuiChoose.java -text
|
||||||
forge-gui-mobile/src/forge/toolbox/GuiDialog.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() {
|
public static void advanceAll() {
|
||||||
if (activeAnimations.isEmpty()) { return; }
|
if (activeAnimations.isEmpty()) { return; }
|
||||||
|
|
||||||
|
|||||||
@@ -81,12 +81,14 @@ public class CardRenderer {
|
|||||||
|
|
||||||
//extract card art from the given card
|
//extract card art from the given card
|
||||||
public static FImageComplex getCardArt(IPaperCard pc) {
|
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) {
|
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);
|
FImageComplex cardArt = cardArtCache.get(imageKey);
|
||||||
if (cardArt == null) {
|
if (cardArt == null) {
|
||||||
Texture image = ImageCache.getImage(imageKey, true);
|
Texture image = ImageCache.getImage(imageKey, true);
|
||||||
@@ -103,6 +105,16 @@ public class CardRenderer {
|
|||||||
y = 0; //delay adjusting y and h until drawn
|
y = 0; //delay adjusting y and h until drawn
|
||||||
w *= 106f / 250f;
|
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 {
|
else {
|
||||||
x = w * 0.1f;
|
x = w * 0.1f;
|
||||||
y = h * 0.11f;
|
y = h * 0.11f;
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
avatar = new FTextureRegionImage(FSkin.getAvatars().get(p.getAvatarIndex()));
|
avatar = new FTextureRegionImage(FSkin.getAvatars().get(p.getAvatarIndex()));
|
||||||
}
|
}
|
||||||
else { //handle lobby players with art from cards
|
else { //handle lobby players with art from cards
|
||||||
avatar = CardRenderer.getCardArt(p.getAvatarCardImageKey(), false);
|
avatar = CardRenderer.getCardArt(p.getAvatarCardImageKey(), false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return avatar;
|
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 class SelectStartingPlaneStep extends WizardStep<NewConquestScreenModel> {
|
||||||
private static final ConquestPlane[] planes = ConquestPlane.values();
|
private final ConquestPlaneSelector planeSelector = add(new ConquestPlaneSelector());
|
||||||
private int selectedIndex;
|
|
||||||
|
|
||||||
protected SelectStartingPlaneStep() {
|
protected SelectStartingPlaneStep() {
|
||||||
super("Select Starting Plane");
|
super("Select Starting Plane");
|
||||||
@@ -141,21 +140,27 @@ public class NewConquestScreen extends MultiStepWizardScreen<NewConquestScreenMo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doLayout(float width, float height) {
|
protected void doLayout(float width, float height) {
|
||||||
|
planeSelector.setBounds(0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void reset() {
|
protected void reset() {
|
||||||
selectedIndex = 0;
|
planeSelector.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivate(NewConquestScreenModel model) {
|
protected void onActivate(NewConquestScreenModel model) {
|
||||||
|
planeSelector.activate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean updateModelAndAdvance(NewConquestScreenModel model) {
|
protected boolean updateModelAndAdvance(NewConquestScreenModel model) {
|
||||||
model.startingPlane = planes[selectedIndex];
|
model.startingPlane = planeSelector.getSelectedPlane();
|
||||||
return model.startingPlane != null;
|
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;
|
return commanders;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FCollectionView<PaperCard> getPlaneCards() {
|
||||||
|
return planeCards;
|
||||||
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user