diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index e7a15839c43..9bd352d33db 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -35,6 +35,7 @@ import forge.screens.ClosingScreen; import forge.screens.FScreen; import forge.screens.SplashScreen; import forge.screens.TransitionScreen; +import forge.screens.home.AdventureScreen; import forge.screens.home.HomeScreen; import forge.screens.home.NewGameMenu; import forge.screens.match.MatchController; @@ -354,6 +355,7 @@ public class Forge implements ApplicationListener { Forge.getAssets().fallback_skins().put(1, new Texture(transitionFile)); if (titleBGFile.exists()) Forge.getAssets().fallback_skins().put(0, new Texture(titleBGFile)); + AdventureScreen.preload(); } catch (Exception e) { e.printStackTrace(); } @@ -641,7 +643,6 @@ public class Forge implements ApplicationListener { final List options = new ArrayList<>(); options.add(getLocalizer().getMessage("lblExit")); - options.add(getLocalizer().getMessage("lblAdventure")); options.add(getLocalizer().getMessage("lblCancel")); Callback callback = new Callback() { @@ -650,8 +651,6 @@ public class Forge implements ApplicationListener { if (result == 0) { exited = true; exitAnimation(false); - } else if (result == 1) { - switchToAdventure(); } } }; diff --git a/forge-gui-mobile/src/forge/animation/GifAnimation.java b/forge-gui-mobile/src/forge/animation/GifAnimation.java index 6cd7aa7cde5..744b092b908 100644 --- a/forge-gui-mobile/src/forge/animation/GifAnimation.java +++ b/forge-gui-mobile/src/forge/animation/GifAnimation.java @@ -16,6 +16,10 @@ public class GifAnimation extends ForgeAnimation { animation = GifDecoder.loadGIFAnimation(PlayMode.NORMAL, Gdx.files.absolute(filename).read()); } + public GifAnimation(String filename, PlayMode mode) { + animation = GifDecoder.loadGIFAnimation(mode, Gdx.files.absolute(filename).read()); + } + @Override public void start() { currentFrame = animation.getKeyFrame(0); diff --git a/forge-gui-mobile/src/forge/assets/FSkinImage.java b/forge-gui-mobile/src/forge/assets/FSkinImage.java index 2b1d83a4dc5..49034f19a6c 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinImage.java +++ b/forge-gui-mobile/src/forge/assets/FSkinImage.java @@ -232,6 +232,7 @@ public enum FSkinImage implements FImage { //adventure MANASHARD (FSkinProp.ICO_MANASHARD, SourceFile.ADVENTURE), + MENU_ADVLOGO (FSkinProp.ICO_ADVLOGO, SourceFile.ADVENTURE), //menu icon MENU_GALAXY (FSkinProp.ICO_MENU_GALAXY, SourceFile.ICONS), diff --git a/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java b/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java new file mode 100644 index 00000000000..809cacf5685 --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java @@ -0,0 +1,71 @@ +package forge.screens.home; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.Animation; +import com.badlogic.gdx.utils.Align; +import forge.Forge; +import forge.Graphics; +import forge.animation.GifAnimation; +import forge.assets.FSkinColor; +import forge.assets.FSkinFont; +import forge.localinstance.properties.ForgeConstants; +import forge.screens.LaunchScreen; +import forge.toolbox.FLabel; +import forge.toolbox.FTextArea; +import forge.util.Callback; +import forge.util.Utils; + +public class AdventureScreen extends LaunchScreen { + private static final float PADDING = Utils.scale(10); + private boolean loaded = false; + private static GifAnimation animation = null; + private final FTextArea lblDesc = new FTextArea(false, Forge.getLocalizer().getMessage("lblAdventureDescription"), animation); + public AdventureScreen() { + super(null, NewGameMenu.getMenu()); + lblDesc.setFont(FSkinFont.get(12)); + lblDesc.setTextColor(FLabel.getInlineLabelColor()); + } + + @Override + protected void doLayoutAboveBtnStart(float startY, float width, float height) { + float x = PADDING; + float y = startY + PADDING; + float w = width - 2 * PADDING; + float h = height - y - PADDING; + lblDesc.setBounds(x, y, w, h); + } + + @Override + public void onActivate() { + if (!loaded) { + loaded = true; + add(lblDesc); + } + if (animation != null) { + animation.start(); + } + Forge.startContinuousRendering(); + super.onActivate(); + } + + @Override + public void onSwitchAway(Callback canSwitchCallback) { + if (animation != null) { + animation.stop(); + } + Forge.stopContinuousRendering(); + super.onSwitchAway(canSwitchCallback); + } + + @Override + protected void startMatch() { + Forge.switchToAdventure(); + } + public static void preload() { + //keep low frame and under 1mb for performance + String demo = ForgeConstants.EFFECTS_DIR+"demo.gif"; + if (Gdx.files.absolute(demo).exists()) + animation = new GifAnimation(demo, Animation.PlayMode.LOOP); + } +} diff --git a/forge-gui-mobile/src/forge/screens/home/NewGameMenu.java b/forge-gui-mobile/src/forge/screens/home/NewGameMenu.java index fd40e334ae3..202d5f55d77 100644 --- a/forge-gui-mobile/src/forge/screens/home/NewGameMenu.java +++ b/forge-gui-mobile/src/forge/screens/home/NewGameMenu.java @@ -28,7 +28,8 @@ public class NewGameMenu extends FPopupMenu { QuestMode(Forge.getLocalizer().getMessageorUseDefault("lblQuestMode", "Quest Mode"), FSkinImage.QUEST_ZEP, NewQuestScreen.class), PuzzleMode(Forge.getLocalizer().getMessageorUseDefault("lblPuzzleMode", "Puzzle Mode"), FSkinImage.MENU_PUZZLE, PuzzleScreen.class), PlanarConquest(Forge.getLocalizer().getMessageorUseDefault("lblPlanarConquest", "Planar Conquest"), FSkinImage.MENU_GALAXY, NewConquestScreen.class), - Gauntlet(Forge.getLocalizer().getMessageorUseDefault("lblGauntlet", "Gauntlet"), FSkinImage.MENU_GAUNTLET, NewGauntletScreen.class); + Gauntlet(Forge.getLocalizer().getMessageorUseDefault("lblGauntlet", "Gauntlet"), FSkinImage.MENU_GAUNTLET, NewGauntletScreen.class), + Adventure(Forge.getLocalizer().getMessageorUseDefault("lblAdventureMode", "Adventure Mode"), FSkinImage.MENU_ADVLOGO, AdventureScreen.class); private final FMenuItem item; private final Class screenClass; @@ -98,7 +99,11 @@ public class NewGameMenu extends FPopupMenu { public static void setPreferredScreen(NewGameScreen preferredScreen0) { if (preferredScreen == preferredScreen0) { return; } preferredScreen = preferredScreen0; - prefs.setPref(FPref.NEW_GAME_SCREEN, preferredScreen.name()); + String prefName = preferredScreen.name(); + //don't save adventure mode launchscreen, default to constructed + if (NewGameScreen.Adventure.equals(preferredScreen)) + prefName = NewGameScreen.Constructed.name(); + prefs.setPref(FPref.NEW_GAME_SCREEN, prefName); prefs.save(); } diff --git a/forge-gui-mobile/src/forge/toolbox/FTextArea.java b/forge-gui-mobile/src/forge/toolbox/FTextArea.java index a580ebfe7ae..193124f4575 100644 --- a/forge-gui-mobile/src/forge/toolbox/FTextArea.java +++ b/forge-gui-mobile/src/forge/toolbox/FTextArea.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Align; import forge.Graphics; +import forge.animation.GifAnimation; import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.TextRenderer; @@ -15,17 +16,22 @@ public class FTextArea extends FScrollPane { private Vector2 insets; private FSkinColor textColor; private final TextRenderer renderer; + private GifAnimation animation; private boolean centerVertically; public FTextArea(boolean parseReminderText0) { this(parseReminderText0, ""); } public FTextArea(boolean parseReminderText0, String text0) { + this(parseReminderText0, text0, null); + } + public FTextArea(boolean parseReminderText0, String text0, GifAnimation gifAnimation) { text = text0; font = FSkinFont.get(14); alignment = Align.left; insets = new Vector2(1, 1); //prevent text getting cut off by clip textColor = FLabel.getDefaultTextColor(); + animation = gifAnimation; renderer = new TextRenderer(parseReminderText0); } @@ -81,4 +87,15 @@ public class FTextArea extends FScrollPane { protected void drawBackground(Graphics g) { renderer.drawText(g, text, font, textColor, insets.x - getScrollLeft(), insets.y - getScrollTop(), getScrollWidth() - 2 * insets.x, getScrollHeight() - 2 * insets.y, 0, getHeight(), true, alignment, centerVertically); } + + @Override + public void draw(Graphics g) { + if (animation != null) { + float w = getScrollWidth() - 2 * insets.x; + float h = w * 0.6f; + float y = getPreferredHeight(w); + animation.draw(g, insets.x - getScrollLeft(), (insets.y - getScrollTop()) + y, w, h); + } + super.draw(g); + } } diff --git a/forge-gui/res/effects/demo.gif b/forge-gui/res/effects/demo.gif new file mode 100644 index 00000000000..1da6bf29f05 Binary files /dev/null and b/forge-gui/res/effects/demo.gif differ diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index ef214f9efdf..cf67d120ae8 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -2939,4 +2939,5 @@ lblEffect=Wirkung lblEmblem=Emblem lblBoon=Vorteil lblExitToWoldMap=Zurück zur Weltkarte? -lblWouldYouLikeDestroy=Would you like to destroy {0} ? \ No newline at end of file +lblWouldYouLikeDestroy=Möchten Sie {0} zerstören? +lblAdventureDescription=In Abenteuermodus erkunden Sie die sich ständig ändernde Landschaft von Shandalar und Duell-Kreaturen, um Gold, Scherben, Ausrüstung und neue Karten zu gewinnen, um sie alle zu werden und alle zu sammeln! \ No newline at end of file diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 9f29896cd93..2c3d8820eb7 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -2946,4 +2946,5 @@ lblEffect=Effect lblEmblem=Emblem lblBoon=Boon lblExitToWoldMap=Exit to the World Map? -lblWouldYouLikeDestroy=Would you like to destroy {0} ? \ No newline at end of file +lblWouldYouLikeDestroy=Would you like to destroy {0}? +lblAdventureDescription=Adventure mode is where you explore the ever-changing landscape of Shandalar, and duel creatures to gain gold, shards, equipment and new cards to become the best and collect them all! \ No newline at end of file diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 0e34c9f8f83..643a5328b48 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -2942,4 +2942,5 @@ lblEffect=Efecto lblEmblem=Emblem lblBoon=Boon lblExitToWoldMap=Salir al mapa del mundo? -lblWouldYouLikeDestroy=Would you like to destroy {0} ? \ No newline at end of file +lblWouldYouLikeDestroy=¿Le gustaría destruir {0}? +lblAdventureDescription=¡El modo de aventura es donde exploras el paisaje siempre cambiante de Shandalar, y criaturas de duelo para ganar oro, fragmentos, equipos y nuevas tarjetas para convertirte en el mejor y recogerlas a todos! \ No newline at end of file diff --git a/forge-gui/res/languages/fr-FR.properties b/forge-gui/res/languages/fr-FR.properties index fc1339071e8..4b87d5eb1f7 100644 --- a/forge-gui/res/languages/fr-FR.properties +++ b/forge-gui/res/languages/fr-FR.properties @@ -2944,4 +2944,5 @@ lblEffect=Effet lblEmblem=Emblème lblBoon=Aubaine lblExitToWoldMap=Sortir sur la carte du monde? -lblWouldYouLikeDestroy=Would you like to destroy {0} ? \ No newline at end of file +lblWouldYouLikeDestroy=Souhaitez-vous détruire {0}? +lblAdventureDescription=Le mode aventure est l'endroit où vous explorez le paysage en constante évolution de Shandalar, et des créatures duel pour gagner de l'or, des éclats, de l'équipement et de nouvelles cartes pour devenir les meilleurs et les récupérer tous! \ No newline at end of file diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 49f84109138..0cda18224a8 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -2945,4 +2945,5 @@ lblEffect=Effetto lblEmblem=Emblema lblBoon=Boon lblExitToWoldMap=Esci alla mappa del mondo? -lblWouldYouLikeDestroy=Would you like to destroy {0} ? +lblWouldYouLikeDestroy=Vorresti distruggere {0}? +lblAdventureDescription=La modalità Adventure è dove esplori il paesaggio in continua evoluzione di Shandalar e le creature di duello per guadagnare oro, frammenti, attrezzature e nuove carte per diventare i migliori e raccoglierle tutte! diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 5ef0728ba0b..4624417e942 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -2941,4 +2941,5 @@ lblEffect=効果 lblEmblem=エンブレム lblBoon=ブーン lblExitToWoldMap=世界地図に終了しますか? -lblWouldYouLikeDestroy={0}を破壊しますか? \ No newline at end of file +lblWouldYouLikeDestroy={0}を破壊しますか? +lblAdventureDescription=アドベンチャーモードは、金、破片、機器、新しいカードを獲得して最高のものになり、すべてを集めるために、Shandalarの絶えず変化する風景と決闘の生き物を探求する場所です! \ No newline at end of file diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index 532893c5d67..0d9ad305f59 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -3031,4 +3031,5 @@ lblEffect=Efeito lblEmblem=Emblem lblBoon=Boon lblExitToWoldMap=Sair para o mapa do mundo? -lblWouldYouLikeDestroy=Would you like to destroy {0} ? \ No newline at end of file +lblWouldYouLikeDestroy=Você gostaria de destruir {0}? +lblAdventureDescription=O modo de aventura é onde você explora a paisagem em constante mudança de Shandalar, e duelo para ganhar ouro, fragmentos, equipamentos e novos cartões para se tornarem os melhores e colecioná-los! \ No newline at end of file diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 6cb46da506e..3659081e754 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -2924,4 +2924,5 @@ lblEffect=影响 lblEmblem=象征 lblBoon=恩赐 lblExitToWoldMap=退出世界地图? -lblWouldYouLikeDestroy=Would you like to destroy {0} ? \ No newline at end of file +lblWouldYouLikeDestroy=您想销毁{0}吗? +lblAdventureDescription=冒险模式是您探索山达尔(Shandalar)不断变化的景观,以及决斗生物获得黄金,碎片,设备和新卡片,使其成为最好的,并收集所有这些! \ No newline at end of file diff --git a/forge-gui/res/skins/default/sprite_adventure.png b/forge-gui/res/skins/default/sprite_adventure.png index 983d93548e8..2b70e44b68d 100644 Binary files a/forge-gui/res/skins/default/sprite_adventure.png and b/forge-gui/res/skins/default/sprite_adventure.png differ diff --git a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java index 4fdec22c6c7..cd3f65384d6 100644 --- a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java +++ b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java @@ -268,7 +268,8 @@ public enum FSkinProp { ICO_QUEST_BIG_BAG (new int[] {480, 1360, 160, 160}, PropType.ICON), //adventure icons - ICO_MANASHARD (new int[] {0,0, 100,100}, PropType.ICON), + ICO_MANASHARD (new int[] {2, 304, 100, 100}, PropType.ADVENTURE), + ICO_ADVLOGO (new int[] {2, 2, 300, 300}, PropType.ADVENTURE), //menu icon ICO_MENU_GALAXY (new int[] {0, 1520, 80, 80}, PropType.ICON),