From 5ce48ffadffdbd47001694df743ea883c43f6b0a Mon Sep 17 00:00:00 2001 From: fgnm Date: Tue, 9 May 2023 11:06:34 +0200 Subject: [PATCH] Smart layers drag n drop --- hyperlap2d-common-api | 2 +- hyperlap2d-runtime-libgdx | 2 +- .../editor/controller/BootstrapCommand.java | 1 + .../controller/commands/LayerJumpCommand.java | 46 +++++++++++++++++++ .../view/ui/box/UILayerBoxMediator.java | 6 +-- 5 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 src/main/java/games/rednblack/editor/controller/commands/LayerJumpCommand.java diff --git a/hyperlap2d-common-api b/hyperlap2d-common-api index 057a2a0e..19c2b01f 160000 --- a/hyperlap2d-common-api +++ b/hyperlap2d-common-api @@ -1 +1 @@ -Subproject commit 057a2a0eba70a90726cf53b59e6b2af0222cdd1f +Subproject commit 19c2b01f948d5917a9ba7a4e2f4af237c7117ec5 diff --git a/hyperlap2d-runtime-libgdx b/hyperlap2d-runtime-libgdx index 5e780865..6159f1be 160000 --- a/hyperlap2d-runtime-libgdx +++ b/hyperlap2d-runtime-libgdx @@ -1 +1 @@ -Subproject commit 5e780865d680707504c323a953dfad4aaf98fce9 +Subproject commit 6159f1be86f73f2606cb2e91e850d50a1cd56cc6 diff --git a/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java b/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java index d378ee0c..074630f4 100644 --- a/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java +++ b/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java @@ -53,6 +53,7 @@ public class BootstrapCommand extends SimpleCommand { facade.registerCommand(MsgAPI.ACTION_DELETE_LAYER, DeleteLayerCommand::new); facade.registerCommand(MsgAPI.ACTION_NEW_LAYER, NewLayerCommand::new); facade.registerCommand(MsgAPI.ACTION_SWAP_LAYERS, LayerSwapCommand::new); + facade.registerCommand(MsgAPI.ACTION_JUMP_LAYERS, LayerJumpCommand::new); facade.registerCommand(MsgAPI.ACTION_RENAME_LAYER, RenameLayerCommand::new); facade.registerCommand(MsgAPI.ACTION_ADD_COMPONENT, AddComponentToItemCommand::new); diff --git a/src/main/java/games/rednblack/editor/controller/commands/LayerJumpCommand.java b/src/main/java/games/rednblack/editor/controller/commands/LayerJumpCommand.java new file mode 100644 index 00000000..78b13ec4 --- /dev/null +++ b/src/main/java/games/rednblack/editor/controller/commands/LayerJumpCommand.java @@ -0,0 +1,46 @@ +package games.rednblack.editor.controller.commands; + +import games.rednblack.editor.renderer.components.LayerMapComponent; +import games.rednblack.editor.utils.runtime.EntityUtils; +import games.rednblack.editor.utils.runtime.SandboxComponentRetriever; +import games.rednblack.editor.view.stage.Sandbox; + +public class LayerJumpCommand extends EntityModifyRevertibleCommand { + private static final String CLASS_NAME = "games.rednblack.editor.controller.commands.LayerJumpCommand"; + public static final String DONE = CLASS_NAME + "DONE"; + + private Integer entityId; + + private String sourceName; + private String targetName; + + private void backup() { + if(entityId == null) { + Object[] payload = getNotification().getBody(); + sourceName = (String) payload[0]; + targetName = (String) payload[1]; + entityId = EntityUtils.getEntityId(Sandbox.getInstance().getCurrentViewingEntity()); + } + } + + @Override + public void doAction() { + backup(); + + int viewingEntity = EntityUtils.getByUniqueId(entityId); + LayerMapComponent layerMapComponent = SandboxComponentRetriever.get(viewingEntity, LayerMapComponent.class); + targetName = layerMapComponent.jump(sourceName, targetName); + + facade.sendNotification(DONE); + + } + + @Override + public void undoAction() { + int viewingEntity = EntityUtils.getByUniqueId(entityId); + LayerMapComponent layerMapComponent = SandboxComponentRetriever.get(viewingEntity, LayerMapComponent.class); + layerMapComponent.jump(sourceName, targetName); + + facade.sendNotification(DONE); + } +} diff --git a/src/main/java/games/rednblack/editor/view/ui/box/UILayerBoxMediator.java b/src/main/java/games/rednblack/editor/view/ui/box/UILayerBoxMediator.java index 6727b9c5..3f1244b9 100644 --- a/src/main/java/games/rednblack/editor/view/ui/box/UILayerBoxMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/box/UILayerBoxMediator.java @@ -74,7 +74,7 @@ public class UILayerBoxMediator extends PanelMediator { DeleteLayerCommand.DONE, DeleteLayerCommand.UNDONE, NewLayerCommand.DONE, - LayerSwapCommand.DONE, + LayerJumpCommand.DONE, RenameLayerCommand.DONE @@ -136,9 +136,9 @@ public class UILayerBoxMediator extends PanelMediator { }); break; case UILayerBox.LAYER_DROPPED: - facade.sendNotification(MsgAPI.ACTION_SWAP_LAYERS, notification.getBody()); + facade.sendNotification(MsgAPI.ACTION_JUMP_LAYERS, notification.getBody()); break; - case LayerSwapCommand.DONE: + case LayerJumpCommand.DONE: int index = viewComponent.getCurrentSelectedLayerIndex(); initLayerData(); viewComponent.setCurrentSelectedLayer(index);