From 93bdec1f2d2662528106d17deae4cb673cf1e5ac Mon Sep 17 00:00:00 2001 From: Grimm Date: Sun, 18 Sep 2022 17:44:28 +0200 Subject: [PATCH] integrated Textra for Labels and Buttons fixed executables for release --- forge-adventure/pom.xml | 17 +++++----- ...e-mac.sh => forge-adventure-editor-mac.sh} | 0 ...venture.cmd => forge-adventure-editor.cmd} | 0 ...command => forge-adventure-editor.command} | 0 .../main/config/forge-adventure-editor.ico | Bin 0 -> 92586 bytes ...adventure.sh => forge-adventure-editor.sh} | 0 forge-gui-desktop/pom.xml | 21 +++++++++--- forge-gui-mobile-dev/src/forge/app/Main.java | 20 ++++++++--- .../adventure/character/CharacterSprite.java | 6 +--- .../forge/adventure/character/MapActor.java | 6 ++-- .../adventure/character/RewardSprite.java | 2 +- .../forge/adventure/data/BiomeSpriteData.java | 2 +- .../adventure/data/BiomeStructureData.java | 4 +++ .../src/forge/adventure/data/EffectData.java | 2 +- .../src/forge/adventure/data/EnemyData.java | 2 ++ .../src/forge/adventure/data/ItemData.java | 7 ++-- .../adventure/data/PointOfInterestData.java | 2 ++ .../adventure/player/AdventurePlayer.java | 14 ++++---- .../PointOfInterestChanges.java | 2 +- .../adventure/scene/AdventureDeckEditor.java | 2 +- .../src/forge/adventure/scene/ArenaScene.java | 32 +++++++++--------- .../src/forge/adventure/scene/GameScene.java | 5 --- .../forge/adventure/scene/InventoryScene.java | 21 +++++++----- .../forge/adventure/scene/MapViewScene.java | 4 +-- .../forge/adventure/scene/NewGameScene.java | 20 ++++++----- .../forge/adventure/scene/RewardScene.java | 10 +++--- .../forge/adventure/scene/SaveLoadScene.java | 1 - .../forge/adventure/scene/SettingsScene.java | 2 +- .../adventure/scene/SpellSmithScene.java | 8 ++--- .../forge/adventure/scene/TileMapScene.java | 5 --- .../src/forge/adventure/scene/UIScene.java | 6 ++-- .../src/forge/adventure/stage/Console.java | 17 +++++++--- .../stage/ConsoleCommandInterpreter.java | 4 +-- .../src/forge/adventure/stage/GameHUD.java | 11 +++--- .../src/forge/adventure/stage/GameStage.java | 9 +++-- .../forge/adventure/stage/IAfterMatch.java | 2 +- .../src/forge/adventure/stage/MapStage.java | 14 +++----- .../stage/PointOfInterestMapRenderer.java | 1 - .../src/forge/adventure/stage/WorldStage.java | 4 +-- .../src/forge/adventure/util/Controls.java | 2 +- .../src/forge/adventure/util/MapDialog.java | 4 +-- .../src/forge/adventure/util/RewardActor.java | 23 ++++++------- .../forge/adventure/util/SaveFileData.java | 25 +++++++------- .../forge/adventure/world/BiomeSprites.java | 3 -- .../forge/adventure/world/BiomeStructure.java | 14 ++++---- .../forge/adventure/world/BiomeTexture.java | 7 ++-- .../adventure/world/OverlappingModel.java | 10 +++--- .../forge/adventure/world/SpritesDataMap.java | 2 +- .../src/forge/adventure/world/World.java | 9 +++-- local.properties | 8 +++++ 50 files changed, 214 insertions(+), 178 deletions(-) rename forge-adventure/src/main/config/{forge-adventure-mac.sh => forge-adventure-editor-mac.sh} (100%) rename forge-adventure/src/main/config/{forge-adventure.cmd => forge-adventure-editor.cmd} (100%) rename forge-adventure/src/main/config/{forge-adventure.command => forge-adventure-editor.command} (100%) create mode 100644 forge-adventure/src/main/config/forge-adventure-editor.ico rename forge-adventure/src/main/config/{forge-adventure.sh => forge-adventure-editor.sh} (100%) create mode 100644 local.properties diff --git a/forge-adventure/pom.xml b/forge-adventure/pom.xml index cb4ca672937..3d696393376 100644 --- a/forge-adventure/pom.xml +++ b/forge-adventure/pom.xml @@ -19,6 +19,13 @@ jitpack.io https://jitpack.io + + 4thline-repo + http://4thline.org/m2 + + false + + src/main/java @@ -62,7 +69,7 @@ ${project.build.finalName}-jar-with-dependencies.jar true forge - src/main/config/forge-adventure.ico + src/main/config/forge-adventure-editor.ico forge.adventure.Main false @@ -110,7 +117,7 @@ true forge https://www.oracle.com/java/technologies/downloads/ - src/main/config/forge-adventure.ico + src/main/config/forge-adventure-editor.ico forge.adventure.Main false @@ -297,12 +304,6 @@ 22.0.0 compile - - forge - forge-gui-mobile - 1.6.54-SNAPSHOT - compile - com.badlogicgames.gdx-controllers gdx-controllers-desktop diff --git a/forge-adventure/src/main/config/forge-adventure-mac.sh b/forge-adventure/src/main/config/forge-adventure-editor-mac.sh similarity index 100% rename from forge-adventure/src/main/config/forge-adventure-mac.sh rename to forge-adventure/src/main/config/forge-adventure-editor-mac.sh diff --git a/forge-adventure/src/main/config/forge-adventure.cmd b/forge-adventure/src/main/config/forge-adventure-editor.cmd similarity index 100% rename from forge-adventure/src/main/config/forge-adventure.cmd rename to forge-adventure/src/main/config/forge-adventure-editor.cmd diff --git a/forge-adventure/src/main/config/forge-adventure.command b/forge-adventure/src/main/config/forge-adventure-editor.command similarity index 100% rename from forge-adventure/src/main/config/forge-adventure.command rename to forge-adventure/src/main/config/forge-adventure-editor.command diff --git a/forge-adventure/src/main/config/forge-adventure-editor.ico b/forge-adventure/src/main/config/forge-adventure-editor.ico new file mode 100644 index 0000000000000000000000000000000000000000..d9d869a7dfb02d1eb0e83d6bbefe49794c71eede GIT binary patch literal 92586 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%0DG)?>BM5G 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

E^;4`TThGq8Fd9eB-q9U!XV zU5nyYeZp@)v^)5l>rJ2CI`z#rXaD`}iLbxe@z=Y1KTlx`dF$wu?xU}Pv$i2o>)yPo zc=?i|h)dVz(R6r-OCW%MNSlM$RKKdB_wqYO?%qB8_iu;4{Kwu~U+wwJZ5rE5;__RULSUi?5^0fCN#X+z2~L2Ge`WdyyV!r zTED8<(Cz>qOjR6KseYt$zQKSfegz+oduz|CbH`r$_@lF*e{uAa&ko$UF?{{Et3Lc7 ze&urL!l{~*Bi;kM;CIAxXs>_&?y9ZpUE4M;9vUbch~_SH=f$15;D`8FCslwcI$<3m zZQKP90UR$bU$%dE>5EXz6n;+T|Wi%*hdd zVc&hNA@ab_5%?3zJ9QSWaO!(~#$KO3?t=(^3YYuAbrgP3%;^X4%mLB=z5{QJu?To) z2;rC_!haV-UMI+=gbLw1gk!v5GDNQr(c42FCgoNnQP+Tl8 z*28KYi7v>5YMD1FTtHIR@+McUg2su54?|Q_a;SjE2N}qQ zl1cnf1Ij@IY?B2=gj!aR6S7l?wO}%#drk7oQg)E|CHCXBvTQz^pD*Z|6pL~q)#ZzI zQF0*zl+_jJ1O>F1?;%hHt1Bod&=LLMv?72LdJ*(!g;XA-Nn+5z_jyu(esb>@RRDY< zP3roBlmtAxaG;XzJNkX(-u`=rd;8&TBLchm9^7@nEeXGqIJpZU`#8g7lYNX~6c8#% zcmQ@r*h!qEjSKn2a-hQu`Xc{jnEm{n%NV&A;%{vD`xkPbqJ`Z8JIgG9W9m)3M@hav zNq28T?n&tTkqL&G7-uFX#@`Qc@M?Nu{DXjxCDh literal 0 HcmV?d00001 diff --git a/forge-adventure/src/main/config/forge-adventure.sh b/forge-adventure/src/main/config/forge-adventure-editor.sh similarity index 100% rename from forge-adventure/src/main/config/forge-adventure.sh rename to forge-adventure/src/main/config/forge-adventure-editor.sh diff --git a/forge-gui-desktop/pom.xml b/forge-gui-desktop/pom.xml index ac3df2e206b..809b03181a0 100644 --- a/forge-gui-desktop/pom.xml +++ b/forge-gui-desktop/pom.xml @@ -560,11 +560,17 @@ - - - - - + + + + + + + + + + + @@ -575,10 +581,15 @@ + + + + + diff --git a/forge-gui-mobile-dev/src/forge/app/Main.java b/forge-gui-mobile-dev/src/forge/app/Main.java index d44e10a6b25..363d83480c9 100644 --- a/forge-gui-mobile-dev/src/forge/app/Main.java +++ b/forge-gui-mobile-dev/src/forge/app/Main.java @@ -22,6 +22,8 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; public class Main { public static void main(String[] args) { @@ -46,18 +48,27 @@ public class Main { } // Set this to "true" to make the mobile game port run as a full-screen desktop application - boolean desktopMode = cmd.hasOption("fullscreen"); + boolean desktopMode = true;//cmd.hasOption("fullscreen"); // Set this to the location where you want the mobile game port to look for assets when working as a full-screen desktop application // (uncomment the bottom version and comment the top one to load the res folder from the current folder the .jar is in if you would // like to make the game load from a desktop game folder configuration). - String desktopModeAssetsDir = "../forge-gui/"; - //String desktopModeAssetsDir = "./"; + //String desktopModeAssetsDir = "../forge-gui/"; + String desktopModeAssetsDir = "./"; + if(!Files.exists(Paths.get(desktopModeAssetsDir+"res"))) + desktopModeAssetsDir = "../forge-gui/";//try IDE run // Assets directory used when the game fully emulates smartphone/tablet mode (desktopMode = false), useful when debugging from IDE - String assetsDir = AssetsDownloader.SHARE_DESKTOP_ASSETS ? "../forge-gui/" : "testAssets/"; + String assetsDir ; if (!AssetsDownloader.SHARE_DESKTOP_ASSETS) { + assetsDir= "testAssets/"; FileUtil.ensureDirectoryExists(assetsDir); } + else + { + assetsDir= "./"; + if(!Files.exists(Paths.get(assetsDir+"res"))) + assetsDir = "../forge-gui/"; + } // Place the file "switch_orientation.ini" to your assets folder to make the game switch to landscape orientation (unless desktopMode = true) String switchOrientationFile = assetsDir + "switch_orientation.ini"; @@ -73,6 +84,7 @@ public class Main { screenWidth = Integer.parseInt(res[0].trim()); screenHeight = Integer.parseInt(res[1].trim()); } + desktopMode=false; } // Fullscreen width and height for desktop mode (desktopMode = true) diff --git a/forge-gui-mobile/src/forge/adventure/character/CharacterSprite.java b/forge-gui-mobile/src/forge/adventure/character/CharacterSprite.java index 8fd5205f4e0..4604d138c5d 100644 --- a/forge-gui-mobile/src/forge/adventure/character/CharacterSprite.java +++ b/forge-gui-mobile/src/forge/adventure/character/CharacterSprite.java @@ -20,7 +20,7 @@ public class CharacterSprite extends MapActor { private Animation currentAnimation = null; private AnimationTypes currentAnimationType = AnimationTypes.Idle; private AnimationDirections currentAnimationDir = AnimationDirections.None; - private Array avatar=new Array<>(); + private final Array avatar=new Array<>(); public boolean hidden = false; public CharacterSprite(int id,String path) { @@ -40,10 +40,6 @@ public class CharacterSprite extends MapActor { protected void load(String path) { if(path==null||path.isEmpty())return; TextureAtlas atlas = Config.instance().getAtlas(path); - /* - for (Texture texture : new ObjectSet.ObjectSetIterator<>( atlas.getTextures())) - texture.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest); - */ animations.clear(); for (AnimationTypes stand : AnimationTypes.values()) { if (stand == AnimationTypes.Avatar) { diff --git a/forge-gui-mobile/src/forge/adventure/character/MapActor.java b/forge-gui-mobile/src/forge/adventure/character/MapActor.java index e6a39646a85..fd8e4de2215 100644 --- a/forge-gui-mobile/src/forge/adventure/character/MapActor.java +++ b/forge-gui-mobile/src/forge/adventure/character/MapActor.java @@ -25,7 +25,7 @@ public class MapActor extends Actor { removeIfEffectsAreFinished=true; } - class CurrentEffect + static class CurrentEffect { public CurrentEffect(String path,ParticleEffect effect,Vector2 offset,boolean overlay) { @@ -35,7 +35,7 @@ public class MapActor extends Actor { this.overlay=overlay; } - private String path; + private final String path; public ParticleEffect effect; public Vector2 offset; public boolean overlay=true; @@ -63,7 +63,7 @@ public class MapActor extends Actor { { ParticleEffect effect = new ParticleEffect(); effect.load(Config.instance().getFile(path),Config.instance().getFile(path).parent()); - effects.add(new CurrentEffect(path,effect,offset,overlay)); + effects.add(new CurrentEffect(path, effect, offset, overlay)); if(duration!=0)//ParticleEffect.setDuration uses an integer for some reason { for(ParticleEmitter emitter:effect.getEmitters()){ diff --git a/forge-gui-mobile/src/forge/adventure/character/RewardSprite.java b/forge-gui-mobile/src/forge/adventure/character/RewardSprite.java index a6ba72c8b55..47cd0fe395c 100644 --- a/forge-gui-mobile/src/forge/adventure/character/RewardSprite.java +++ b/forge-gui-mobile/src/forge/adventure/character/RewardSprite.java @@ -11,7 +11,7 @@ import forge.adventure.util.Reward; */ public class RewardSprite extends CharacterSprite { - private final String default_reward = "[\n" + + private final static String default_reward = "[\n" + "\t\t{\n" + "\t\t\t\"type\": \"gold\",\n" + "\t\t\t\"count\": 10,\n" + diff --git a/forge-gui-mobile/src/forge/adventure/data/BiomeSpriteData.java b/forge-gui-mobile/src/forge/adventure/data/BiomeSpriteData.java index 3043eadce73..bd188ebb3b8 100644 --- a/forge-gui-mobile/src/forge/adventure/data/BiomeSpriteData.java +++ b/forge-gui-mobile/src/forge/adventure/data/BiomeSpriteData.java @@ -26,7 +26,7 @@ public class BiomeSpriteData implements SaveFileContent { startArea=data.readDouble("startArea"); endArea=data.readDouble("endArea"); density=data.readDouble("density"); - resolution=data.readDouble("resolution");; + resolution=data.readDouble("resolution"); layer=data.readInt("layer"); } diff --git a/forge-gui-mobile/src/forge/adventure/data/BiomeStructureData.java b/forge-gui-mobile/src/forge/adventure/data/BiomeStructureData.java index cc2271953be..60117944564 100644 --- a/forge-gui-mobile/src/forge/adventure/data/BiomeStructureData.java +++ b/forge-gui-mobile/src/forge/adventure/data/BiomeStructureData.java @@ -45,10 +45,14 @@ public class BiomeStructureData { this.structureAtlasPath=biomeStructureData.structureAtlasPath; this.sourcePath=biomeStructureData.sourcePath; this.maskPath=biomeStructureData.maskPath; + this.periodicInput=biomeStructureData.periodicInput; this.x=biomeStructureData.x; this.y=biomeStructureData.y; this.width=biomeStructureData.width; this.height=biomeStructureData.height; + this.periodicOutput=biomeStructureData.periodicOutput; + this.symmetry=biomeStructureData.symmetry; + this.ground=biomeStructureData.ground; this.randomPosition=biomeStructureData.randomPosition; if(biomeStructureData.mappingInfo!=null) { diff --git a/forge-gui-mobile/src/forge/adventure/data/EffectData.java b/forge-gui-mobile/src/forge/adventure/data/EffectData.java index a41f9e7bfc1..77c12986070 100644 --- a/forge-gui-mobile/src/forge/adventure/data/EffectData.java +++ b/forge-gui-mobile/src/forge/adventure/data/EffectData.java @@ -65,7 +65,7 @@ public class EffectData implements Serializable { if(name != null && !name.isEmpty()) description += name + "\n"; if(colorView) description += "Manasight.\n"; if(lifeModifier != 0) - description += "Life: " + ((lifeModifier > 0) ? "+" : "") + lifeModifier + "\n"; + description += "[+Life] " + ((lifeModifier > 0) ? "+" : "") + lifeModifier + "\n"; if(startBattleWithCard != null && startBattleWithCard.length != 0) description+="Cards on battlefield: \n" + cardNames() + "\n"; if(changeStartCards != 0) diff --git a/forge-gui-mobile/src/forge/adventure/data/EnemyData.java b/forge-gui-mobile/src/forge/adventure/data/EnemyData.java index b4cb9db9622..a1c94c200a5 100644 --- a/forge-gui-mobile/src/forge/adventure/data/EnemyData.java +++ b/forge-gui-mobile/src/forge/adventure/data/EnemyData.java @@ -42,6 +42,8 @@ public class EnemyData { life = enemyData.life; equipment = enemyData.equipment; colors = enemyData.colors; + teamNumber = enemyData.teamNumber; + nextEnemy =enemyData.nextEnemy==null?null: new EnemyData(enemyData.nextEnemy); if(enemyData.rewards == null) { rewards=null; } else { diff --git a/forge-gui-mobile/src/forge/adventure/data/ItemData.java b/forge-gui-mobile/src/forge/adventure/data/ItemData.java index 294f47b7308..65c337e9dcc 100644 --- a/forge-gui-mobile/src/forge/adventure/data/ItemData.java +++ b/forge-gui-mobile/src/forge/adventure/data/ItemData.java @@ -43,6 +43,9 @@ public class ItemData { iconName = cpy.iconName; questItem = cpy.questItem; cost = cpy.cost; + usableInPoi = cpy.usableInPoi; + usableOnWorldMap = cpy.usableOnWorldMap; + commandOnUse = cpy.commandOnUse; manaNeeded = cpy.manaNeeded; } @@ -62,7 +65,7 @@ public class ItemData { Json json = new Json(); FileHandle handle = Config.instance().getFile(Paths.ITEMS); if (handle.exists()) { - Array readJson = json.fromJson(Array.class, ItemData.class, handle); + Array readJson = json.fromJson(Array.class, ItemData.class, handle); itemList = readJson; } @@ -88,7 +91,7 @@ public class ItemData { if(effect != null) result += effect.getDescription(); if(manaNeeded != 0) - result += "Mana cost: "+manaNeeded; + result += manaNeeded+" [Mana]"; return result; } diff --git a/forge-gui-mobile/src/forge/adventure/data/PointOfInterestData.java b/forge-gui-mobile/src/forge/adventure/data/PointOfInterestData.java index 412af979dcd..fe888ff566f 100644 --- a/forge-gui-mobile/src/forge/adventure/data/PointOfInterestData.java +++ b/forge-gui-mobile/src/forge/adventure/data/PointOfInterestData.java @@ -58,5 +58,7 @@ public class PointOfInterestData { sprite=other.sprite; map=other.map; radiusFactor=other.radiusFactor; + offsetX=other.offsetX; + offsetY=other.offsetY; } } diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index a409d3ad5cd..39d63041b0a 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -66,12 +66,12 @@ public class AdventurePlayer implements Serializable, SaveFileContent { private boolean announceCustom = false; // Signals - SignalList onLifeTotalChangeList = new SignalList(); - SignalList onManaTotalChangeList = new SignalList(); - SignalList onGoldChangeList = new SignalList(); - SignalList onPlayerChangeList = new SignalList(); - SignalList onEquipmentChange = new SignalList(); - SignalList onBlessing = new SignalList(); + final SignalList onLifeTotalChangeList = new SignalList(); + final SignalList onManaTotalChangeList = new SignalList(); + final SignalList onGoldChangeList = new SignalList(); + final SignalList onPlayerChangeList = new SignalList(); + final SignalList onEquipmentChange = new SignalList(); + final SignalList onBlessing = new SignalList(); public AdventurePlayer() { clear(); } @@ -458,7 +458,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { public boolean fullHeal() { if (life < maxLife) { - life = Math.max(maxLife, life); + life = maxLife; onLifeTotalChangeList.emit(); return true; } diff --git a/forge-gui-mobile/src/forge/adventure/pointofintrest/PointOfInterestChanges.java b/forge-gui-mobile/src/forge/adventure/pointofintrest/PointOfInterestChanges.java index 9130d385aac..ec5a953008f 100644 --- a/forge-gui-mobile/src/forge/adventure/pointofintrest/PointOfInterestChanges.java +++ b/forge-gui-mobile/src/forge/adventure/pointofintrest/PointOfInterestChanges.java @@ -13,7 +13,7 @@ import java.util.HashSet; public class PointOfInterestChanges implements SaveFileContent { private final HashSet deletedObjects=new HashSet<>(); private final HashMap> cardsBought = new HashMap<>(); - private java.util.Map mapFlags = new HashMap<>(); + private final java.util.Map mapFlags = new HashMap<>(); public static class Map extends HashMap implements SaveFileContent { @Override diff --git a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java index dcc922651ca..0422b15c4d2 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java +++ b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java @@ -97,7 +97,7 @@ import java.util.Map; private final FLabel btnMoreOptions = deckHeader.add(new FLabel.Builder().text("...").font(FSkinFont.get(20)).align(Align.center).pressedColor(Header.BTN_PRESSED_COLOR).build()); - boolean isShop=false; + boolean isShop; public AdventureDeckEditor(boolean createAsShop) { super(e -> leave(),getPages()); diff --git a/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java b/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java index f2374230a72..283b397d5dc 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java @@ -29,7 +29,7 @@ public class ArenaScene extends UIScene implements IAfterMatch { private static ArenaScene object; private final float gridSize; private ArenaData arenaData; - private TextraButton startButton; + private final TextraButton startButton; public static ArenaScene instance() { if(object==null) @@ -37,24 +37,24 @@ public class ArenaScene extends UIScene implements IAfterMatch { return object; } - private TextraButton doneButton; + private final TextraButton doneButton; Dialog startDialog; Dialog areYouSureDialog; - private TextraLabel goldLabel; + private final TextraLabel goldLabel; - private Group arenaPlane; - private Random rand=new Random(); + private final Group arenaPlane; + private final Random rand=new Random(); - Sprite fighterSpot; - Sprite lostOverlay; - Sprite up; - Sprite upWin; - Sprite side; - Sprite sideWin; - Sprite edge; - Sprite edgeM; - Sprite edgeWin; - Sprite edgeWinM; + final Sprite fighterSpot; + final Sprite lostOverlay; + final Sprite up; + final Sprite upWin; + final Sprite side; + final Sprite sideWin; + final Sprite edge; + final Sprite edgeM; + final Sprite edgeWin; + final Sprite edgeWinM; boolean arenaStarted=false; private ArenaScene() { super(Forge.isLandscapeMode() ? "ui/arena.json" : "ui/arena_portrait.json"); @@ -98,7 +98,7 @@ public class ArenaScene extends UIScene implements IAfterMatch { if(object!=null&&object.equals(true)) startArena(); startDialog.hide(); - }; + } }; startDialog.text("Do you want to go into the Arena?"); startDialog.button(Forge.getLocalizer().getMessage("lblYes"), true); diff --git a/forge-gui-mobile/src/forge/adventure/scene/GameScene.java b/forge-gui-mobile/src/forge/adventure/scene/GameScene.java index e5f0fd7577d..f6376d54828 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/GameScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/GameScene.java @@ -10,14 +10,9 @@ import forge.adventure.stage.WorldStage; * does render the WorldStage and HUD */ public class GameScene extends HudScene { - private float cameraWidth = 0f, cameraHeight = 0f; public GameScene() { super(WorldStage.getInstance()); - if (cameraWidth == 0f) - cameraWidth = stage.getCamera().viewportWidth; - if (cameraHeight == 0f) - cameraHeight = stage.getCamera().viewportHeight; } diff --git a/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java b/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java index 3f023c735d4..388cf1e581f 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java @@ -30,9 +30,9 @@ public class InventoryScene extends UIScene { TextraLabel itemDescription; Dialog confirm; Dialog useDialog; - private Table inventory; - Array