diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 2bab36fc3a..e758434d57 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -105,7 +105,7 @@ text.savefail=Failed to save game! text.save.delete.confirm=Are you sure you want to delete this save? text.save.delete=Delete text.save.export=Export Save -text.save.import.invalid=[orange]This save is invalid! +text.save.import.invalid=[orange]This save is invalid!\n\nNote that[scarlet]importing saves with custom maps[orange]\nfrom other devices does not work! text.save.import.fail=[crimson]Failed to import save: [orange]{0} text.save.export.fail=[crimson]Failed to export save: [orange]{0} text.save.import=Import Save diff --git a/core/src/io/anuke/mindustry/io/Saves.java b/core/src/io/anuke/mindustry/io/Saves.java index 89b07667b7..397d389a3c 100644 --- a/core/src/io/anuke/mindustry/io/Saves.java +++ b/core/src/io/anuke/mindustry/io/Saves.java @@ -86,7 +86,7 @@ public class Saves { current = slot; } - public void importSave(FileHandle file) throws IOException{ + public SaveSlot importSave(FileHandle file) throws IOException{ SaveSlot slot = new SaveSlot(nextSlot); slot.importFile(file); nextSlot ++; @@ -94,6 +94,7 @@ public class Saves { saves.add(slot); slot.meta = SaveIO.getData(slot.index); current = slot; + return slot; } public Array getSaveSlots(){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java index 93319d54fc..9afe4b2736 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java @@ -165,26 +165,30 @@ public class LoadDialog extends FloatingDialog{ }).fillX().margin(10f).minWidth(300f).height(70f).pad(4f).padRight(-4); } + public void runLoadSave(SaveSlot slot){ + ui.loadfrag.show(); + + Timers.runTask(3f, () -> { + ui.loadfrag.hide(); + hide(); + try{ + slot.load(); + state.set(State.playing); + ui.paused.hide(); + }catch(Exception e){ + Log.err(e); + ui.paused.hide(); + state.set(State.menu); + logic.reset(); + ui.showError("$text.save.corrupted"); + } + }); + } + public void modifyButton(TextButton button, SaveSlot slot){ button.clicked(() -> { if(!button.childrenPressed()){ - ui.loadfrag.show(); - - Timers.runTask(3f, () -> { - ui.loadfrag.hide(); - hide(); - try{ - slot.load(); - state.set(State.playing); - ui.paused.hide(); - }catch(Exception e){ - Log.err(e); - ui.paused.hide(); - state.set(State.menu); - logic.reset(); - ui.showError("$text.save.corrupted"); - } - }); + runLoadSave(slot); } }); } diff --git a/ios/Info.plist.xml b/ios/Info.plist.xml index 92b8ddf658..0d1faafcb0 100644 --- a/ios/Info.plist.xml +++ b/ios/Info.plist.xml @@ -34,6 +34,8 @@ UIRequiresFullScreen + NSPhotoLibraryAddUsageDescription + Mindustry UIDeviceFamily 1 @@ -66,6 +68,7 @@ LSItemContentTypes public.png + io.anuke.mindustry.savefile diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/data/Assets.xcassets/AppIcon.appiconset/Contents.json index 1db8cc8623..fdea475930 100644 --- a/ios/data/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/data/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,13 +1,15 @@ { "images" : [ { - "idiom" : "iphone", "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-40.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-60.png", "scale" : "3x" }, { @@ -23,13 +25,15 @@ "scale" : "3x" }, { - "idiom" : "iphone", "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-80.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-121.png", "scale" : "3x" }, { @@ -45,33 +49,39 @@ "scale" : "3x" }, { - "idiom" : "ipad", "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20.png", "scale" : "1x" }, { - "idiom" : "ipad", "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-42.png", "scale" : "2x" }, { - "idiom" : "ipad", "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29.png", "scale" : "1x" }, { - "idiom" : "ipad", "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-58.png", "scale" : "2x" }, { - "idiom" : "ipad", "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-41.png", "scale" : "1x" }, { - "idiom" : "ipad", "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-81.png", "scale" : "2x" }, { @@ -87,8 +97,9 @@ "scale" : "2x" }, { - "idiom" : "ipad", "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon-167.png", "scale" : "2x" }, { diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-121.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-121.png new file mode 100644 index 0000000000..195b90abfc Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-121.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-167.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-167.png new file mode 100644 index 0000000000..d1c17eaba6 Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-167.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-20.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-20.png new file mode 100644 index 0000000000..8431e6351e Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-20.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-29.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-29.png new file mode 100644 index 0000000000..ec7545e7e1 Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-29.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-40.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-40.png new file mode 100644 index 0000000000..3397585443 Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-40.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-41.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-41.png new file mode 100644 index 0000000000..3397585443 Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-41.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-42.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-42.png new file mode 100644 index 0000000000..3397585443 Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-42.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-58.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-58.png new file mode 100644 index 0000000000..7484fcaea3 Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-58.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-60.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-60.png new file mode 100644 index 0000000000..aa3d538703 Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-60.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-80.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-80.png new file mode 100644 index 0000000000..28f08c7589 Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-80.png differ diff --git a/ios/data/Assets.xcassets/AppIcon.appiconset/icon-81.png b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-81.png new file mode 100644 index 0000000000..28f08c7589 Binary files /dev/null and b/ios/data/Assets.xcassets/AppIcon.appiconset/icon-81.png differ diff --git a/ios/data/icon-167.png b/ios/data/icon-167.png new file mode 100644 index 0000000000..d1c17eaba6 Binary files /dev/null and b/ios/data/icon-167.png differ diff --git a/ios/data/icon-20.png b/ios/data/icon-20.png new file mode 100644 index 0000000000..8431e6351e Binary files /dev/null and b/ios/data/icon-20.png differ diff --git a/ios/data/icon-29.png b/ios/data/icon-29.png new file mode 100644 index 0000000000..ec7545e7e1 Binary files /dev/null and b/ios/data/icon-29.png differ diff --git a/ios/data/icon-40.png b/ios/data/icon-40.png new file mode 100644 index 0000000000..3397585443 Binary files /dev/null and b/ios/data/icon-40.png differ diff --git a/ios/data/icon-58.png b/ios/data/icon-58.png new file mode 100644 index 0000000000..7484fcaea3 Binary files /dev/null and b/ios/data/icon-58.png differ diff --git a/ios/data/icon-60.png b/ios/data/icon-60.png new file mode 100644 index 0000000000..aa3d538703 Binary files /dev/null and b/ios/data/icon-60.png differ diff --git a/ios/data/icon-80.png b/ios/data/icon-80.png new file mode 100644 index 0000000000..28f08c7589 Binary files /dev/null and b/ios/data/icon-80.png differ diff --git a/ios/robovm.properties b/ios/robovm.properties index 0c96df2bb1..2412bb9c72 100644 --- a/ios/robovm.properties +++ b/ios/robovm.properties @@ -2,5 +2,5 @@ app.version=1.0 app.id=io.anuke.mindustry app.mainclass=io.anuke.mindustry.IOSLauncher app.executable=IOSLauncher -app.build=4 +app.build=5 app.name=Mindustry diff --git a/ios/src/io/anuke/mindustry/IOSLauncher.java b/ios/src/io/anuke/mindustry/IOSLauncher.java index c2bbdda4d1..149b160300 100644 --- a/ios/src/io/anuke/mindustry/IOSLauncher.java +++ b/ios/src/io/anuke/mindustry/IOSLauncher.java @@ -10,6 +10,7 @@ import io.anuke.kryonet.KryoServer; import io.anuke.mindustry.core.Platform; import io.anuke.mindustry.core.ThreadHandler; import io.anuke.mindustry.io.SaveIO; +import io.anuke.mindustry.io.Saves.SaveSlot; import io.anuke.mindustry.net.Net; import io.anuke.ucore.core.Timers; import io.anuke.ucore.scene.ui.TextField; @@ -95,7 +96,7 @@ public class IOSLauncher extends IOSApplication.Delegate { @Override public boolean openURL(UIApplication app, NSURL url, UIApplicationOpenURLOptions options) { - System.out.println("Opened URL: " + url.getAbsoluteString()); + System.out.println("Opened URL: " + url.getPath()); openURL(url); return false; } @@ -105,7 +106,7 @@ public class IOSLauncher extends IOSApplication.Delegate { boolean b = super.didFinishLaunching(application, options); if(options != null && options.has(UIApplicationLaunchOptions.Keys.URL())){ - System.out.println("Opened URL at launch: " + ((NSURL)options.get(UIApplicationLaunchOptions.Keys.URL())).getAbsoluteString()); + System.out.println("Opened URL at launch: " + ((NSURL)options.get(UIApplicationLaunchOptions.Keys.URL())).getPath()); openURL(((NSURL)options.get(UIApplicationLaunchOptions.Keys.URL()))); } @@ -113,17 +114,17 @@ public class IOSLauncher extends IOSApplication.Delegate { } void openURL(NSURL url){ - String str = url.getAbsoluteURL().getAbsoluteString().toLowerCase(); - System.err.println("STR: " + str); + String str = url.getPath().toLowerCase(); Timers.runTask(30f, () -> { - FileHandle file = Gdx.files.absolute(url.getAbsoluteString()); + FileHandle file = Gdx.files.absolute(url.getPath()); if(str.endsWith("mins")){ //open save if(SaveIO.isSaveValid(file)){ try{ - control.getSaves().importSave(file); + SaveSlot slot = control.getSaves().importSave(file); + ui.load.runLoadSave(slot); }catch (IOException e){ ui.showError(Bundles.format("text.save.import.fail", Strings.parseException(e, false))); }