From 96babdc347bee6b8ea8266ba0a29d84b9b520c78 Mon Sep 17 00:00:00 2001 From: fgnm Date: Sun, 28 Jan 2024 22:11:14 +0100 Subject: [PATCH] Fix few things for particles --- .../resource/DeleteParticleEffect.java | 2 + .../commands/resource/DeleteTalosVFX.java | 2 + .../utils/asset/impl/TalosVFXAsset.java | 40 +++++++++++++------ .../utils/runtime/TalosExportFormat.java | 24 +++++++++++ .../UIAnimationsTabMediator.java | 4 +- .../UIParticleEffectsTabMediator.java | 6 +-- 6 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 src/main/java/games/rednblack/editor/utils/runtime/TalosExportFormat.java diff --git a/src/main/java/games/rednblack/editor/controller/commands/resource/DeleteParticleEffect.java b/src/main/java/games/rednblack/editor/controller/commands/resource/DeleteParticleEffect.java index 8a75723c..203ad12b 100644 --- a/src/main/java/games/rednblack/editor/controller/commands/resource/DeleteParticleEffect.java +++ b/src/main/java/games/rednblack/editor/controller/commands/resource/DeleteParticleEffect.java @@ -3,6 +3,7 @@ package games.rednblack.editor.controller.commands.resource; import games.rednblack.editor.renderer.data.SceneVO; import games.rednblack.editor.utils.AssetIOManager; import games.rednblack.editor.utils.AssetsUtils; +import games.rednblack.editor.view.stage.Sandbox; /** * Created by Sasun Poghosyan on 5/10/2016. @@ -25,6 +26,7 @@ public class DeleteParticleEffect extends DeleteResourceCommand { sendNotification(DONE, particleName); SceneVO vo = sandbox.sceneVoFromItems(); projectManager.saveCurrentProject(vo); + Sandbox.getInstance().loadCurrentProject(); } else { cancel(); } diff --git a/src/main/java/games/rednblack/editor/controller/commands/resource/DeleteTalosVFX.java b/src/main/java/games/rednblack/editor/controller/commands/resource/DeleteTalosVFX.java index bbbd037d..c77f70c6 100644 --- a/src/main/java/games/rednblack/editor/controller/commands/resource/DeleteTalosVFX.java +++ b/src/main/java/games/rednblack/editor/controller/commands/resource/DeleteTalosVFX.java @@ -3,6 +3,7 @@ package games.rednblack.editor.controller.commands.resource; import games.rednblack.editor.renderer.data.SceneVO; import games.rednblack.editor.utils.AssetIOManager; import games.rednblack.editor.utils.AssetsUtils; +import games.rednblack.editor.view.stage.Sandbox; public class DeleteTalosVFX extends DeleteResourceCommand { @@ -22,6 +23,7 @@ public class DeleteTalosVFX extends DeleteResourceCommand { sendNotification(DONE, particleName); SceneVO vo = sandbox.sceneVoFromItems(); projectManager.saveCurrentProject(vo); + Sandbox.getInstance().loadCurrentProject(); } else { cancel(); } diff --git a/src/main/java/games/rednblack/editor/utils/asset/impl/TalosVFXAsset.java b/src/main/java/games/rednblack/editor/utils/asset/impl/TalosVFXAsset.java index 2a6cbbb0..0ac99d9d 100644 --- a/src/main/java/games/rednblack/editor/utils/asset/impl/TalosVFXAsset.java +++ b/src/main/java/games/rednblack/editor/utils/asset/impl/TalosVFXAsset.java @@ -4,10 +4,10 @@ import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Json; import com.kotcrab.vis.ui.util.dialog.Dialogs; +import games.rednblack.editor.utils.runtime.TalosExportFormat; import games.rednblack.talos.runtime.ParticleEffectDescriptor; import games.rednblack.talos.runtime.ParticleEmitterDescriptor; import games.rednblack.talos.runtime.modules.*; -import games.rednblack.talos.runtime.serialization.ExportData; import games.rednblack.editor.proxy.ProjectManager; import games.rednblack.editor.proxy.ResolutionManager; import games.rednblack.editor.proxy.SceneDataManager; @@ -32,6 +32,16 @@ import java.util.function.Consumer; public class TalosVFXAsset extends Asset { + Json talosJson = new Json(); + + public TalosVFXAsset() { + talosJson.setIgnoreUnknownFields(true); + ParticleEmitterDescriptor.registerModules(); + for (Class clazz: ParticleEmitterDescriptor.registeredModules) { + talosJson.addClassTag(clazz.getSimpleName(), TalosExportFormat.Module.class); + } + } + @Override protected boolean matchMimeType(FileHandle file) { try { @@ -60,20 +70,13 @@ public class TalosVFXAsset extends Asset { @Override public void importAsset(Array files, ProgressHandler progressHandler, boolean skipRepack) { - Json json = new Json(); - json.setIgnoreUnknownFields(true); - ParticleEmitterDescriptor.registerModules(); - for (Class clazz: ParticleEmitterDescriptor.registeredModules) { - json.addClassTag(clazz.getSimpleName(), clazz); - } - final String targetPath = projectManager.getCurrentProjectPath() + File.separator + ProjectManager.TALOS_VFX_DIR_PATH; Array images = new Array<>(); Array assetsRes = new Array<>(); for (FileHandle fileHandle : new Array.ArrayIterator<>(files)) { if (!fileHandle.isDirectory() && fileHandle.exists()) { try { - ExportData talosResources = json.fromJson(ExportData.class, fileHandle); + TalosExportFormat talosResources = talosJson.fromJson(TalosExportFormat.class, fileHandle); //copy images boolean allImagesFound = addTalosImages(talosResources, fileHandle, images); if (allImagesFound) { @@ -123,15 +126,26 @@ public class TalosVFXAsset extends Asset { String particlePath = projectManager.getCurrentProjectPath() + File.separator + ProjectManager.TALOS_VFX_DIR_PATH + File.separator; String filePath = particlePath + name; - if ((new File(filePath)).delete()) { + FileHandle fileHandle = new FileHandle(filePath); + + TalosExportFormat talosResources = talosJson.fromJson(TalosExportFormat.class, fileHandle); + + if (fileHandle.delete()) { deleteEntitiesWithParticleEffects(root, name); // delete entities from scene deleteAllItemsWithParticleName(name); + + Array resources = talosResources.metadata.resources; + for (String res : resources) { + String resPath = particlePath + res; + FileHandle resHandle = new FileHandle(resPath); + resHandle.delete(); + } return true; } return false; } - private boolean addTalosImages(ExportData talosResources, FileHandle fileHandle, Array imgs) { + private boolean addTalosImages(TalosExportFormat talosResources, FileHandle fileHandle, Array imgs) { try { Array resources = talosResources.metadata.resources; for (String res : resources) { @@ -157,7 +171,7 @@ public class TalosVFXAsset extends Asset { return true; } - private boolean addTalosRes(ExportData talosResources, FileHandle fileHandle, Array imgs) { + private boolean addTalosRes(TalosExportFormat talosResources, FileHandle fileHandle, Array imgs) { try { Array resources = talosResources.metadata.resources; for (String res : resources) { @@ -260,7 +274,7 @@ public class TalosVFXAsset extends Asset { } if (module instanceof VectorFieldModule) { - String path = ((VectorFieldModule) module).fgaFileName + ".fga"; + String path = ((VectorFieldModule) module).fgaFileName; File f = new File(currentProjectPath + ProjectManager.TALOS_VFX_DIR_PATH + File.separator + path); FileUtils.copyFileToDirectory(f, tmpDir); } diff --git a/src/main/java/games/rednblack/editor/utils/runtime/TalosExportFormat.java b/src/main/java/games/rednblack/editor/utils/runtime/TalosExportFormat.java new file mode 100644 index 00000000..a60ac955 --- /dev/null +++ b/src/main/java/games/rednblack/editor/utils/runtime/TalosExportFormat.java @@ -0,0 +1,24 @@ +package games.rednblack.editor.utils.runtime; + +import com.badlogic.gdx.utils.Array; + +import java.util.HashMap; + +public class TalosExportFormat { + + public Metadata metadata = new Metadata(); + + public Array emitters = new Array<>(); + + public static class Metadata { + public Array resources = new Array<>(); + } + + public static class Emitter { + public Array modules = new Array<>(); + } + + public static class Module extends HashMap { + + } +} diff --git a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIAnimationsTabMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIAnimationsTabMediator.java index 76ac24bb..81b8777b 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIAnimationsTabMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/resourcespanel/UIAnimationsTabMediator.java @@ -77,9 +77,7 @@ public class UIAnimationsTabMediator extends UIResourcesTabMediator