Ver código fonte

Input rewrite and start of resource extraction

tbvns 6 meses atrás
pai
commit
8e23d335f9

+ 20 - 0
GD4J/src/main/java/xyz/tbvns/FilesLocations.java

@@ -13,6 +13,13 @@ public class FilesLocations {
     public static final String linuxGeometryDashFolder = System.getProperty("user.home") + "/.local/share/Steam/steamapps/compatdata/322170/pfx/drive_c/users/steamuser/AppData/Local/GeometryDash/";
     public static final String macGeometryDashFolder = System.getProperty("user.home") + "/Library/Application Support/GeometryDash";
 
+    public static final String windowGeometryDashResourceFolder = "D:/SteamLibrary/steamapps/common/Geometry Dash/Resources";
+    //TODO: add that
+    public static final String linuxGeometryDashResourceFolder = System.getProperty("user.home") + "/.local/share/Steam/steamapps/compatdata/322170/pfx/drive_c/users/steamuser/AppData/Local/GeometryDash/";
+    //TODO: add that
+    public static final String macGeometryDashResourceFolder = System.getProperty("user.home") + "/Library/Application Support/GeometryDash";
+
+
     public static String getGeometryDashFolder() {
         SystemInfo si = new SystemInfo();
         OperatingSystem os = si.getOperatingSystem();
@@ -25,4 +32,17 @@ public class FilesLocations {
         }
         throw new RuntimeException("Unsupported operating system !");
     }
+
+    public static String getGeometryDashResources() {
+        SystemInfo si = new SystemInfo();
+        OperatingSystem os = si.getOperatingSystem();
+        if (os instanceof WindowsOperatingSystem) {
+            return windowGeometryDashFolder;
+        } else if (os instanceof LinuxOperatingSystem) {
+            return linuxGeometryDashFolder;
+        } else if (os instanceof MacOperatingSystem) {
+            return macGeometryDashFolder;
+        }
+        throw new RuntimeException("Unsupported operating system !");
+    }
 }

+ 65 - 0
PowerGDEditor/src/main/java/xyz/tbvns/GeometryDash/TextureExtractor.java

@@ -0,0 +1,65 @@
+package xyz.tbvns.GeometryDash;
+
+import org.apache.commons.io.FileUtils;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+import static java.lang.Math.round;
+
+public class TextureExtractor {
+    public void extract(File plist, File textures, File output) throws IOException {
+        String config = FileUtils.readFileToString(plist);
+        BufferedImage image = ImageIO.read(textures);
+        String[] readableConfig = config
+                .replace(" ", "")
+                .split("\n");
+
+        String name = "";
+        float x = 0, y = 0, w = 0, h = 0;
+        boolean rotated = false, ready = false;
+        for (int i = 0; i < readableConfig.length; i++) {
+            String line = readableConfig[i];
+            if (line.startsWith("<key>") && line.endsWith(".png</key>")) {
+                name = line.replace("<key>", "").replace("</key>", "");
+            }
+            else if (line.equals("<key>textureRect</key>")) {
+                String data = readableConfig[i+1];
+                String[] readableData = data
+                        .replace("<string>", "")
+                        .replace("</string>", "")
+                        .replace("}", "")
+                        .replace("{", "")
+                        .split(",");
+                x = Float.parseFloat(readableData[0]);
+                y = Float.parseFloat(readableData[1]);
+                w = Float.parseFloat(readableData[2]);
+                h = Float.parseFloat(readableData[3]);
+            } else if (line.equals("<key>textureRotated</key>")) {
+                if (readableConfig[i+1].equals("<true/>")) {
+                    rotated = true;
+                } else {
+                    rotated = false;
+                }
+            }
+            else if (line.equals("</dict>")) {
+                ready = true;
+            }
+            if (ready) {
+                System.out.println(name + " " + x + " " + y + " " + w + " " + h);
+                BufferedImage crop;
+                try {
+                    if (!rotated) {
+                        crop = image.getSubimage(round(x), round(y), round(w), round(h));
+                    } else {
+                        crop = image.getSubimage(round(x), round(y), round(h), round(w));
+                    }
+                    ImageIO.write(crop, "png", new File(output.getPath() + "/" + name));
+                } catch (Exception e) {}
+                x=0; y=0; w=0; h=0; name = "";
+            }
+        }
+    }
+}

+ 65 - 0
PowerGDEditor/src/main/java/xyz/tbvns/Inputs/inputManager.java

@@ -0,0 +1,65 @@
+package xyz.tbvns.Inputs;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.Input;
+import com.badlogic.gdx.InputProcessor;
+import com.badlogic.gdx.graphics.Camera;
+import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
+import com.badlogic.gdx.input.GestureDetector;
+import com.badlogic.gdx.math.Vector3;
+
+public class inputManager extends CameraInputController {
+    private float startX, startY;
+    private final Vector3 tmpV1 = new Vector3();
+    private final Vector3 tmpV2 = new Vector3();
+
+    public inputManager(Camera camera) {
+        super(camera);
+        rotateAngle = 100;
+    }
+
+    @Override
+    public boolean scrolled(float amountX, float amountY) {
+        camera.position.add(-camera.direction.x * amountY, -camera.direction.y * amountY, -camera.direction.z * amountY);
+        target = camera.position;
+        camera.update();
+        return true;
+    }
+
+    @Override
+    protected boolean process (float deltaX, float deltaY, int button) {
+        if (button == rotateButton) {
+            tmpV1.set(camera.direction).crs(camera.up).y = 0f;
+            camera.rotateAround(target, tmpV1.nor(), deltaY * rotateAngle);
+            camera.rotateAround(target, Vector3.Y, deltaX * -rotateAngle);
+
+        } else if (button == translateButton) {
+            camera.translate(tmpV1.set(camera.direction).crs(camera.up).nor().scl(-deltaX * translateUnits));
+            camera.translate(tmpV2.set(camera.up).scl(-deltaY * translateUnits));
+            if (translateTarget) target.add(tmpV1).add(tmpV2);
+        } else if (button == forwardButton) {
+            camera.translate(tmpV1.set(camera.direction).scl(deltaY * translateUnits));
+            if (forwardTarget) target.add(tmpV1);
+        }
+        if (autoUpdate) camera.update();
+        return true;
+    }
+
+    @Override
+    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
+        if (button == Input.Buttons.LEFT || button == Input.Buttons.RIGHT ) {
+            Gdx.input.setCursorCatched(true);
+        }
+
+        return super.touchDown(screenX, screenY, pointer, button);
+    }
+
+    @Override
+    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
+        if (button == Input.Buttons.LEFT || button == Input.Buttons.RIGHT ) {
+            Gdx.input.setCursorCatched(false);
+        }
+
+        return super.touchUp(screenX, screenY, pointer, button);
+    }
+}

+ 14 - 12
PowerGDEditor/src/main/java/xyz/tbvns/Main.java

@@ -3,6 +3,7 @@ package xyz.tbvns;
 import com.badlogic.gdx.ApplicationAdapter;
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
+import com.badlogic.gdx.InputProcessor;
 import com.badlogic.gdx.graphics.Camera;
 import com.badlogic.gdx.graphics.GL20;
 import com.badlogic.gdx.graphics.PerspectiveCamera;
@@ -14,6 +15,7 @@ import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
 import com.badlogic.gdx.math.Vector3;
 import com.badlogic.gdx.utils.viewport.Viewport;
 import xyz.tbvns.Inputs.Shortcut;
+import xyz.tbvns.Inputs.inputManager;
 import xyz.tbvns.LWJGL3.CustomViewport;
 import xyz.tbvns.ui.Ui;
 
@@ -28,7 +30,7 @@ public class Main extends ApplicationAdapter {
     private Model levelGrid;
     private ModelInstance worldGridInstance;
     private ModelInstance levelGridInstance;
-    private CameraInputController cameraInputController;
+    private InputProcessor cameraInputController;
     private Viewport viewport;
     public static ModelCache modelCache;
 
@@ -37,8 +39,8 @@ public class Main extends ApplicationAdapter {
         Ui.initImGui();
         batch = new ModelBatch();
         camera = new PerspectiveCamera(80, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
-        camera.far = Integer.MAX_VALUE;
-        camera.near = 0.000000000001f;
+        camera.far = 1000;
+        camera.near = 0.01f;
         viewport = new CustomViewport(camera);
 
         image = new Texture("libgdx.png");
@@ -53,11 +55,11 @@ public class Main extends ApplicationAdapter {
         levelGridInstance.transform.setToRotation(new Vector3(1, 0, 0), 90);
         levelGridInstance.transform.setTranslation(new Vector3(0, 50, 0));
 
-        cameraInputController = new CameraInputController(camera);
-        cameraInputController.forwardKey = Input.Keys.W;
-        cameraInputController.backwardKey = Input.Keys.S;
-        cameraInputController.rotateRightKey = -1;
-        cameraInputController.rotateLeftKey = -1;
+        cameraInputController = new inputManager(camera);
+//        cameraInputController.forwardKey = Input.Keys.W;
+//        cameraInputController.backwardKey = Input.Keys.S;
+//        cameraInputController.rotateRightKey = -1;
+//        cameraInputController.rotateLeftKey = -1;
         Gdx.input.setInputProcessor(cameraInputController);
     }
 
@@ -73,7 +75,7 @@ public class Main extends ApplicationAdapter {
 
         Vector3 gridPos = new Vector3(camera.position);
         gridPos.x = Math.round(gridPos.x);
-        gridPos.y = 0;
+        gridPos.y = -0.01f;
         gridPos.z = Math.round(gridPos.z);
 
         worldGridInstance.transform.setTranslation(gridPos);
@@ -85,13 +87,13 @@ public class Main extends ApplicationAdapter {
 
         levelGridInstance.transform.setTranslation(gridPos);
 
-        cameraInputController.update();
+//        cameraInputController.update();
         batch.begin(camera);
-        batch.render(worldGridInstance);
-        batch.render(levelGridInstance);
         if (modelCache != null) {
             batch.render(modelCache);
         }
+        batch.render(worldGridInstance);
+        batch.render(levelGridInstance);
         batch.end();
         Ui.render();
         Shortcut.check();