diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 3016155d2b..d52c2b1067 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -33,6 +33,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java
index bf03462dad..3be1b5d428 100644
--- a/android/src/io/anuke/mindustry/AndroidLauncher.java
+++ b/android/src/io/anuke/mindustry/AndroidLauncher.java
@@ -102,7 +102,7 @@ public class AndroidLauncher extends AndroidApplication{
@Override
public boolean isDebug() {
- return true;
+ return false;
}
@Override
diff --git a/build.gradle b/build.gradle
index 3b3a9f5585..95c4e6dc6d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -86,7 +86,7 @@ project(":desktop") {
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
compile "com.badlogicgames.gdx:gdx-controllers-lwjgl3:$gdxVersion"
compile 'com.github.MinnDevelopment:java-discord-rpc:v2.0.0'
- //compile 'com.yuvimasory:orange-extensions:1.3.0'
+ compile 'com.yuvimasory:orange-extensions:1.3.0'
}
}
diff --git a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java
index eabea94d02..ca4571d325 100644
--- a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java
+++ b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java
@@ -26,6 +26,8 @@ public class OverlayRenderer {
for(Player player : players) {
InputHandler input = control.input(player.playerIndex);
+ if(!input.isDrawing()) continue;
+
Shaders.outline.color.set(Palette.accent);
Graphics.beginShaders(Shaders.outline);
diff --git a/core/src/io/anuke/mindustry/input/AndroidInput.java b/core/src/io/anuke/mindustry/input/AndroidInput.java
index 0cda261ec7..65b435d61e 100644
--- a/core/src/io/anuke/mindustry/input/AndroidInput.java
+++ b/core/src/io/anuke/mindustry/input/AndroidInput.java
@@ -215,6 +215,11 @@ public class AndroidInput extends InputHandler implements GestureListener{
}}.visible(() -> !state.is(State.menu)).end();
}
+ @Override
+ public boolean isDrawing(){
+ return selection.size > 0 || removals.size > 0;
+ }
+
@Override
public void drawBottom(){
diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java
index cbf2649b8b..bd02666bb1 100644
--- a/core/src/io/anuke/mindustry/input/DesktopInput.java
+++ b/core/src/io/anuke/mindustry/input/DesktopInput.java
@@ -60,6 +60,11 @@ public class DesktopInput extends InputHandler{
}
}
+ @Override
+ public boolean isDrawing(){
+ return mode != none;
+ }
+
@Override
public void drawBottom(){
Tile cursor = tileAt(control.gdxInput().getX(), control.gdxInput().getY());
diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java
index 9ee29d7975..742e57ab7e 100644
--- a/core/src/io/anuke/mindustry/input/InputHandler.java
+++ b/core/src/io/anuke/mindustry/input/InputHandler.java
@@ -81,6 +81,10 @@ public abstract class InputHandler extends InputAdapter{
}
+ public boolean isDrawing(){
+ return false;
+ }
+
/**Handles tile tap events that are not platform specific.*/
public boolean tileTapped(Tile tile){
tile = tile.target();
diff --git a/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java b/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java
index 9728956bdf..f16369d88d 100644
--- a/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java
+++ b/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java
@@ -14,6 +14,8 @@ public class CrashHandler {
//TODO send full error report to server via HTTP
e.printStackTrace();
+
+
//attempt to close connections, if applicable
try{
Net.dispose();
diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java
index 72f8cd46bb..b798370b34 100644
--- a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java
+++ b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java
@@ -1,14 +1,27 @@
package io.anuke.mindustry.desktop;
+import com.apple.eawt.Application;
import com.badlogic.gdx.Files.FileType;
+import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
+import com.badlogic.gdx.files.FileHandle;
import io.anuke.kryonet.KryoClient;
import io.anuke.kryonet.KryoServer;
import io.anuke.mindustry.Mindustry;
import io.anuke.mindustry.core.Platform;
+import io.anuke.mindustry.io.SaveIO;
+import io.anuke.mindustry.io.Saves.SaveSlot;
import io.anuke.mindustry.net.Net;
+import io.anuke.ucore.util.Bundles;
import io.anuke.ucore.util.OS;
+import io.anuke.ucore.util.Strings;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import static io.anuke.mindustry.Vars.*;
public class DesktopLauncher {
@@ -20,6 +33,41 @@ public class DesktopLauncher {
config.setWindowedMode(960, 540);
config.setWindowIcon("sprites/icon.png");
+ Application.getApplication().setOpenFileHandler(e -> {
+ List list = e.getFiles();
+
+ File target = list.get(0);
+
+ Gdx.app.postRunnable(() -> {
+ FileHandle file = OS.getAppDataDirectory("Mindustry").child("tmp").child(target.getName());
+
+ Gdx.files.absolute(target.getAbsolutePath()).copyTo(file);
+
+ if(file.extension().equalsIgnoreCase(saveExtension)){ //open save
+
+ if(SaveIO.isSaveValid(file)){
+ try{
+ SaveSlot slot = control.getSaves().importSave(file);
+ ui.load.runLoadSave(slot);
+ }catch (IOException e2){
+ ui.showError(Bundles.format("text.save.import.fail", Strings.parseException(e2, false)));
+ }
+ }else{
+ ui.showError("$text.save.import.invalid");
+ }
+
+ }else if(file.extension().equalsIgnoreCase(mapExtension)){ //open map
+ Gdx.app.postRunnable(() -> {
+ if (!ui.editor.isShown()) {
+ ui.editor.show();
+ }
+
+ ui.editor.beginEditMap(file.read());
+ });
+ }
+ });
+ });
+
if(OS.isMac) {
config.setPreferencesConfig(OS.getAppDataDirectoryString("Mindustry"), FileType.Absolute);
}