From 14e1f4216488099cfda94e4dd708360f8ccee63e Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 22 Nov 2022 02:15:38 +0800 Subject: [PATCH] update Transitionscreen, RewardScene & Hud --- forge-gui-android/src/forge/app/Main.java | 30 +++++++++- forge-gui-ios/src/forge/ios/Main.java | 6 ++ forge-gui-mobile-dev/src/forge/app/Main.java | 6 ++ forge-gui-mobile/src/forge/Forge.java | 15 ++++- .../forge/adventure/scene/MapViewScene.java | 2 +- .../forge/adventure/scene/RewardScene.java | 56 ++++++++----------- .../src/forge/adventure/util/KeyBinding.java | 2 +- .../src/forge/screens/TransitionScreen.java | 18 ++++-- forge-gui/res/adventure/Shandalar/ui/hud.json | 1 + .../adventure/Shandalar/ui/hud_landscape.json | 1 + .../adventure/Shandalar/ui/hud_portrait.json | 1 + .../java/forge/interfaces/IDeviceAdapter.java | 2 + 12 files changed, 97 insertions(+), 43 deletions(-) diff --git a/forge-gui-android/src/forge/app/Main.java b/forge-gui-android/src/forge/app/Main.java index 5de6111f25f..b7b83289f27 100644 --- a/forge-gui-android/src/forge/app/Main.java +++ b/forge-gui-android/src/forge/app/Main.java @@ -3,8 +3,10 @@ package forge.app; import java.io.File; import java.io.InputStream; import java.io.OutputStream; +import java.util.ArrayList; import android.graphics.Point; +import android.view.InputDevice; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Version; import com.badlogic.gdx.backends.android.AndroidApplication; @@ -59,11 +61,12 @@ import org.apache.commons.lang3.tuple.Pair; public class Main extends AndroidApplication { AndroidAdapter Gadapter; + ArrayList gamepads; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + gamepads = getGameControllers(); //init Sentry //SentryAndroid.init(this); @@ -475,6 +478,31 @@ public class Main extends AndroidApplication { } return Pair.of(size.x, size.y); } + + @Override + public ArrayList getGamepads() { + return gamepads; + } + } + private ArrayList getGameControllers() { + ArrayList gameControllerDeviceIds = new ArrayList(); + int[] deviceIds = InputDevice.getDeviceIds(); + for (int deviceId : deviceIds) { + InputDevice dev = InputDevice.getDevice(deviceId); + int sources = dev.getSources(); + String devNameId = dev.getName()+"["+deviceId+"]"; + + // Verify that the device has gamepad buttons, control sticks, or both. + if (((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) + || ((sources & InputDevice.SOURCE_JOYSTICK) + == InputDevice.SOURCE_JOYSTICK)) { + // This device is a game controller. Store its device ID. + if (!gameControllerDeviceIds.contains(devNameId)) { + gameControllerDeviceIds.add(devNameId); + } + } + } + return gameControllerDeviceIds; } public String getDeviceName() { diff --git a/forge-gui-ios/src/forge/ios/Main.java b/forge-gui-ios/src/forge/ios/Main.java index 3ecdf0dece1..fc9c20256b7 100644 --- a/forge-gui-ios/src/forge/ios/Main.java +++ b/forge-gui-ios/src/forge/ios/Main.java @@ -3,6 +3,7 @@ package forge.ios; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.ArrayList; import org.apache.commons.lang3.tuple.Pair; import org.robovm.apple.foundation.NSAutoreleasePool; @@ -120,5 +121,10 @@ public class Main extends IOSApplication.Delegate { public Pair getRealScreenSize(boolean real) { return Pair.of(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); } + + @Override + public ArrayList getGamepads() { + return new ArrayList<>(); + } } } \ No newline at end of file diff --git a/forge-gui-mobile-dev/src/forge/app/Main.java b/forge-gui-mobile-dev/src/forge/app/Main.java index 0d955bf4d8a..d6e168e5e39 100644 --- a/forge-gui-mobile-dev/src/forge/app/Main.java +++ b/forge-gui-mobile-dev/src/forge/app/Main.java @@ -26,6 +26,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.ArrayList; public class Main { public static void main(String[] args) { @@ -247,5 +248,10 @@ public class Main { public Pair getRealScreenSize(boolean real) { return Pair.of(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); } + + @Override + public ArrayList getGamepads() { + return new ArrayList<>(); + } } } diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 087b80eb098..8ada8dad3c4 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -9,6 +9,7 @@ import com.badlogic.gdx.controllers.Controller; import com.badlogic.gdx.controllers.ControllerAdapter; import com.badlogic.gdx.controllers.ControllerListener; import com.badlogic.gdx.controllers.Controllers; +import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.SpriteBatch; @@ -326,7 +327,8 @@ public class Forge implements ApplicationListener { altZoneTabs = true; //pixl cursor for adventure setCursor(null, "0"); - enableControllerListener(); + if (!GuiBase.isAndroid() || !getDeviceAdapter().getGamepads().isEmpty()) + enableControllerListener(); loadAdventureResources(true); } private static void loadAdventureResources(boolean startScene) { @@ -339,6 +341,17 @@ public class Forge implements ApplicationListener { } } protected void afterDbLoaded() { + //override transition & title bg + try { + FileHandle transitionFile = Config.instance().getFile("ui/transition.png"); + FileHandle titleBGFile = Forge.isLandscapeMode() ? Config.instance().getFile("ui/title_bg.png") : Config.instance().getFile("ui/title_bg_portrait.png"); + if (transitionFile.exists()) + Forge.getAssets().fallback_skins().put(1, new Texture(transitionFile)); + if (titleBGFile.exists()) + Forge.getAssets().fallback_skins().put(0, new Texture(titleBGFile)); + } catch (Exception e) { + e.printStackTrace(); + } destroyThis = false; //Allow back() Gdx.input.setCatchKey(Keys.MENU, true); diff --git a/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java b/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java index f0b916a2205..712aacd2d67 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java @@ -81,7 +81,7 @@ public class MapViewScene extends UIScene { @Override public boolean keyPressed(int keycode) { - if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) { + if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK || keycode == Input.Keys.BUTTON_B) { done(); } return true; diff --git a/forge-gui-mobile/src/forge/adventure/scene/RewardScene.java b/forge-gui-mobile/src/forge/adventure/scene/RewardScene.java index 4867bf7de5a..802831bdbf9 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/RewardScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/RewardScene.java @@ -23,7 +23,7 @@ import forge.sound.SoundSystem; * Displays the rewards of a fight or a treasure */ public class RewardScene extends UIScene { - private final TextraButton doneButton; + private final TextraButton doneButton, detailButton; private final TextraLabel goldLabel; private static RewardScene object; @@ -53,6 +53,9 @@ public class RewardScene extends UIScene { goldLabel=ui.findActor("gold"); ui.onButtonPress("done", () -> RewardScene.this.done()); ui.onButtonPress("detail",()->RewardScene.this.toggleToolTip()); + detailButton = ui.findActor("detail"); + if (Forge.getDeviceAdapter().getGamepads().isEmpty()) + detailButton.setVisible(false); doneButton = ui.findActor("done"); } @@ -103,42 +106,27 @@ public class RewardScene extends UIScene { ImageCache.unloadCardTextures(true); Forge.switchToLast(); } - public boolean done() { + return done(false); + } + boolean done(boolean skipShowLoot) { GameHUD.getInstance().getTouchpad().setVisible(false); - if (doneClicked) { - if(exitCountDown > 0.2f) { - clearGenerated(); - quitScene(); - } + if (!skipShowLoot) { + doneButton.setText(Forge.getLocalizer().getMessage("lblLeave")); + showLootOrDone(); return true; } - - if (type == Type.Loot) { - boolean wait = false; - for (Actor actor : new Array.ArrayIterator<>(generated)) { - if (!(actor instanceof RewardActor)) { - continue; - } - RewardActor reward = (RewardActor) actor; - AdventurePlayer.current().addReward(reward.getReward()); - if (!reward.isFlipped()) { - wait = true; - reward.flip(); - } - } - if (wait) { - flipCountDown = Math.min(1.0f + (generated.size * 0.3f), 5.0f); - exitCountDown = 0.0f; - doneClicked = true; - } else { - clearGenerated(); - quitScene(); - } - } else { - clearGenerated(); - quitScene(); + switch (type) { + case Shop: + doneButton.setText(Forge.getLocalizer().getMessage("lblLeave")); + break; + case Loot: + doneButton.setText(Forge.getLocalizer().getMessage("lblDone")); + break; } + shown = false; + clearGenerated(); + quitScene(); return true; } void clearGenerated() { @@ -182,7 +170,7 @@ public class RewardScene extends UIScene { } } if (exit) - performTouch(doneButton); + done(true); else if (type == Type.Loot && !shown) { shown = true; for (Actor actor : new Array.ArrayIterator<>(generated)) { @@ -201,7 +189,7 @@ public class RewardScene extends UIScene { } } } else { - performTouch(doneButton); + done(true); } } diff --git a/forge-gui-mobile/src/forge/adventure/util/KeyBinding.java b/forge-gui-mobile/src/forge/adventure/util/KeyBinding.java index 03a781205ee..81fb2a57051 100644 --- a/forge-gui-mobile/src/forge/adventure/util/KeyBinding.java +++ b/forge-gui-mobile/src/forge/adventure/util/KeyBinding.java @@ -15,7 +15,7 @@ public enum KeyBinding { Inventory("Inventory", Input.Keys.I,Input.Keys.BUTTON_X), Status("Status", Input.Keys.Q,Input.Keys.BUTTON_Y), Deck("Deck", Input.Keys.E,Input.Keys.BUTTON_A), - Map("Map", Input.Keys.M,Input.Keys.BUTTON_B), + Map("Map", Input.Keys.M,Input.Keys.BUTTON_SELECT), Equip("Equip", Input.Keys.E,Input.Keys.BUTTON_X), Use("Use", Input.Keys.ENTER,Input.Keys.BUTTON_A), Back("Back", Input.Keys.ESCAPE,Input.Keys.BUTTON_B), diff --git a/forge-gui-mobile/src/forge/screens/TransitionScreen.java b/forge-gui-mobile/src/forge/screens/TransitionScreen.java index 0ca1c325212..e8f7af7bed5 100644 --- a/forge-gui-mobile/src/forge/screens/TransitionScreen.java +++ b/forge-gui-mobile/src/forge/screens/TransitionScreen.java @@ -19,7 +19,7 @@ public class TransitionScreen extends FContainer { Runnable runnable; TextureRegion textureRegion; private String message = ""; - boolean matchTransition, isloading, isIntro, isFadeMusic; + boolean matchTransition, isloading, isIntro, isFadeMusic, advStartup; public TransitionScreen(Runnable proc, TextureRegion screen, boolean enterMatch, boolean loading) { this(proc, screen, enterMatch, loading, false, false); @@ -43,6 +43,7 @@ public class TransitionScreen extends FContainer { isIntro = intro; isFadeMusic = fadeMusic; message = loadingMessage; + advStartup = Forge.selector.equals("Adventure"); } public FProgressBar getProgressBar() { @@ -110,10 +111,17 @@ public class TransitionScreen extends FContainer { g.drawWarpImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), percentage); } else if (isIntro) { if (textureRegion != null) { - g.drawImage(Forge.isMobileAdventureMode ? FSkinTexture.ADV_BG_TEXTURE : FSkinTexture.BG_TEXTURE, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); - g.setAlphaComposite(1-percentage); - g.drawImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); - g.setAlphaComposite(oldAlpha); + if (advStartup) { + g.drawGrayTransitionImage(Forge.getAssets().fallback_skins().get(0), 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), false, percentage); + g.setAlphaComposite(1-percentage); + g.drawImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); + g.setAlphaComposite(oldAlpha); + } else { + g.drawImage(Forge.isMobileAdventureMode ? FSkinTexture.ADV_BG_TEXTURE : FSkinTexture.BG_TEXTURE, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); + g.setAlphaComposite(1-percentage); + g.drawImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); + g.setAlphaComposite(oldAlpha); + } } } else { if (textureRegion != null) diff --git a/forge-gui/res/adventure/Shandalar/ui/hud.json b/forge-gui/res/adventure/Shandalar/ui/hud.json index 95e96758dc1..f146b816890 100644 --- a/forge-gui/res/adventure/Shandalar/ui/hud.json +++ b/forge-gui/res/adventure/Shandalar/ui/hud.json @@ -131,6 +131,7 @@ "type": "TextButton", "name": "openmap", "text": "{Scale=80%}tr(lblZoom)", + "binding": "Map", "width": 80, "height": 18, "x": 0, diff --git a/forge-gui/res/adventure/Shandalar/ui/hud_landscape.json b/forge-gui/res/adventure/Shandalar/ui/hud_landscape.json index add678e6716..a6c9dcb47a6 100644 --- a/forge-gui/res/adventure/Shandalar/ui/hud_landscape.json +++ b/forge-gui/res/adventure/Shandalar/ui/hud_landscape.json @@ -131,6 +131,7 @@ "type": "TextButton", "name": "openmap", "text": "{Scale=80%}tr(lblZoom)", + "binding": "Map", "width": 80, "height": 18, "x": 0, diff --git a/forge-gui/res/adventure/Shandalar/ui/hud_portrait.json b/forge-gui/res/adventure/Shandalar/ui/hud_portrait.json index 4f9d9864ee4..d8cda8c3385 100644 --- a/forge-gui/res/adventure/Shandalar/ui/hud_portrait.json +++ b/forge-gui/res/adventure/Shandalar/ui/hud_portrait.json @@ -130,6 +130,7 @@ "type": "TextButton", "name": "openmap", "text": "{Scale=80%}tr(lblZoom)", + "binding": "Map", "width": 80, "height": 18, "x": 0, diff --git a/forge-gui/src/main/java/forge/interfaces/IDeviceAdapter.java b/forge-gui/src/main/java/forge/interfaces/IDeviceAdapter.java index 3fcf2cacb32..d324d5c703a 100644 --- a/forge-gui/src/main/java/forge/interfaces/IDeviceAdapter.java +++ b/forge-gui/src/main/java/forge/interfaces/IDeviceAdapter.java @@ -5,6 +5,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.ArrayList; public interface IDeviceAdapter { boolean isConnectedToInternet(); @@ -18,4 +19,5 @@ public interface IDeviceAdapter { void exit(); void convertToJPEG(InputStream input, OutputStream output) throws IOException; Pair getRealScreenSize(boolean real); + ArrayList getGamepads(); }