diff --git a/.gitattributes b/.gitattributes index d40e79e14ce..0f9c18d57e5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/forge-gui-mobile/src/forge/animation/ForgeAnimation.java b/forge-gui-mobile/src/forge/animation/ForgeAnimation.java index 0450e11ddcb..eac53c041df 100644 --- a/forge-gui-mobile/src/forge/animation/ForgeAnimation.java +++ b/forge-gui-mobile/src/forge/animation/ForgeAnimation.java @@ -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; } diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index d16dcd79c87..0823613064c 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -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; diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 998d7461d75..1f0e181b543 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -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; diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneSelector.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneSelector.java new file mode 100644 index 00000000000..b891436fbe3 --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneSelector.java @@ -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 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); + } + } +} diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java index e643c996074..df0ac9a3c28 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java @@ -132,8 +132,7 @@ public class NewConquestScreen extends MultiStepWizardScreen { - 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= interval) { + tick(); + elapsed -= interval; + } + return true; + } + + protected abstract void tick(); + + @Override + protected void onEnd(boolean endingAll) { + elapsed = 0; + } +} diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java b/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java index 58d383ef822..81a5b330414 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java @@ -295,6 +295,10 @@ public enum ConquestPlane { return commanders; } + public FCollectionView getPlaneCards() { + return planeCards; + } + public String toString() { return name; }