소스 검색

added progressbar for saving levels

____tbvns____ 6 달 전
부모
커밋
09f7f51462
3개의 변경된 파일46개의 추가작업 그리고 2개의 파일을 삭제
  1. 1 1
      .idea/misc.xml
  2. 24 0
      core/src/main/java/xyz/tbvns/core/DataManager.java
  3. 21 1
      ui/src/main/java/xyz/tbvns/ui/LevelEditor/tabs/EditLevelString.java

+ 1 - 1
.idea/misc.xml

@@ -8,7 +8,7 @@
       </list>
     </option>
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_22" default="true" project-jdk-name="temurin-22" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="temurin-21" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
 </project>

+ 24 - 0
core/src/main/java/xyz/tbvns/core/DataManager.java

@@ -83,4 +83,28 @@ public class DataManager {
         FileUtils.writeStringToFile(file, decodedData.toString().replace("\n", ""), StandardCharsets.UTF_8, false);
         Decoder.encodeFile(file, 11);
     }
+
+    public static void saveLevel(Level level, UIProgressBar progressBar, float factor) throws IOException {
+        progressBar.updateBar(progressBar.getProgressBar().getProgress() + 0.2 * factor);
+        String[] data = rawData.split("\n");
+        System.out.println(level.getEncodedLevelStringLine() + " " + level.getCreatorLine() + " " + level.getNameLine() + " " + level.getDescriptionLine());
+        data[level.getEncodedLevelStringLine()] = "<s>" + level.getEncodedLevelString() + "</s>";
+        data[level.getNameLine()] = "<s>" + level.getName() + "</s>";
+        data[level.getCreatorLine()] = "<s>" + level.getCreator() + "</s>";
+        if (level.getDescriptionLine() != 0) {
+            data[level.getDescriptionLine()] = "<s>" + new String(Base64.getUrlEncoder().encode(level.getDescription().getBytes())) + "</s>";
+        }
+        progressBar.updateBar(progressBar.getProgressBar().getProgress() + 0.2 * factor);
+
+        StringBuilder decodedData = new StringBuilder();
+        for (String s : data) {
+            decodedData.append(s);
+        }
+        progressBar.updateBar(progressBar.getProgressBar().getProgress() + 0.2 * factor);
+
+        File file = new File(FilesLocations.getGeometryDashFolder() + "/CCLocalLevels.dat");
+        FileUtils.writeStringToFile(file, decodedData.toString().replace("\n", ""), StandardCharsets.UTF_8, false);
+        progressBar.updateBar(progressBar.getProgressBar().getProgress() + 0.2 * factor);
+        Decoder.encodeFile(file, 11);
+    }
 }

+ 21 - 1
ui/src/main/java/xyz/tbvns/ui/LevelEditor/tabs/EditLevelString.java

@@ -5,10 +5,13 @@ import javafx.scene.control.*;
 import javafx.scene.layout.FlowPane;
 import javafx.scene.layout.Pane;
 import javafx.stage.FileChooser;
+import oshi.util.Util;
+import xyz.tbvns.core.DataManager;
 import xyz.tbvns.core.Decoder;
 import xyz.tbvns.core.Objects.Level;
 import xyz.tbvns.ui.LevelEditor.FXTab;
 import xyz.tbvns.core.UIProgressBar;
+import xyz.tbvns.ui.Utils;
 
 import java.io.File;
 import java.io.IOException;
@@ -33,7 +36,10 @@ public class EditLevelString implements FXTab {
         pane.getChildren().add(area);
 
         Button save = new Button("Save");
-        save.setDisable(true);
+        save.setOnMouseClicked(mouseEvent -> {
+            level.setEncodedLevelString(area.getText().replace("\n", ""));
+            save(pane, level);
+        });
         Button export = new Button("Export");
         export.setOnMouseClicked(mouseEvent -> {
             export(pane, level, area.getText());
@@ -83,4 +89,18 @@ public class EditLevelString implements FXTab {
             }
         }
     }
+
+    public void save(Node node, Level level) {
+        UIProgressBar progressBar = new UIProgressBar();
+        progressBar.openNow("Saving level...");
+        new Thread(() -> {
+            try {
+                DataManager.saveLevel(level, progressBar, 1);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            progressBar.updateBar(1);
+            progressBar.close();
+        }).start();
+    }
 }