From 044b9359beda4f9cadf3d1bee89ce730a8b6076c Mon Sep 17 00:00:00 2001 From: fgnm Date: Sun, 15 Aug 2021 20:38:34 +0200 Subject: [PATCH] Center Origin Command --- hyperlap2d-common-api | 2 +- .../editor/controller/BootstrapCommand.java | 1 + .../commands/CenterOriginPointCommand.java | 37 +++++++++++++++++++ .../editor/view/ui/UIDropDownMenu.java | 1 + .../view/ui/UIDropDownMenuMediator.java | 1 + 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/main/java/games/rednblack/editor/controller/commands/CenterOriginPointCommand.java diff --git a/hyperlap2d-common-api b/hyperlap2d-common-api index afae0739..328049ce 160000 --- a/hyperlap2d-common-api +++ b/hyperlap2d-common-api @@ -1 +1 @@ -Subproject commit afae073916d68be53753eb8c3e22131d01153997 +Subproject commit 328049ce96e28ac46691d5e6f37f266b31e81031 diff --git a/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java b/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java index 666fe687..7d296967 100644 --- a/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java +++ b/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java @@ -80,6 +80,7 @@ public class BootstrapCommand extends SimpleCommand { facade.registerCommand(MsgAPI.ACTION_CHANGE_POLYGON_VERTEX_POSITION, ChangePolygonVertexPositionCommand::new); facade.registerCommand(MsgAPI.ACTION_DELETE_POLYGON_VERTEX, DeletePolygonVertexCommand::new); facade.registerCommand(MsgAPI.ACTION_CHANGE_ORIGIN_POSITION, ChangeOriginPointPosition::new); + facade.registerCommand(MsgAPI.ACTION_CENTER_ORIGIN_POSITION, CenterOriginPointCommand::new); // DATA MODIFY by components facade.registerCommand(MsgAPI.ACTION_UPDATE_SCENE_DATA, UpdateSceneDataCommand::new); diff --git a/src/main/java/games/rednblack/editor/controller/commands/CenterOriginPointCommand.java b/src/main/java/games/rednblack/editor/controller/commands/CenterOriginPointCommand.java new file mode 100644 index 00000000..2006cae6 --- /dev/null +++ b/src/main/java/games/rednblack/editor/controller/commands/CenterOriginPointCommand.java @@ -0,0 +1,37 @@ +package games.rednblack.editor.controller.commands; + +import com.badlogic.gdx.math.Vector2; +import games.rednblack.editor.HyperLap2DFacade; +import games.rednblack.editor.renderer.components.DimensionsComponent; +import games.rednblack.editor.renderer.components.TransformComponent; +import games.rednblack.editor.utils.runtime.SandboxComponentRetriever; +import games.rednblack.h2d.common.command.TransformCommandBuilder; + +public class CenterOriginPointCommand extends EntityModifyRevertibleCommand { + + private int entity; + private final Vector2 backupOrigin = new Vector2(); + + @Override + public void doAction() { + entity = notification.getBody(); + + TransformComponent transformComponent = SandboxComponentRetriever.get(entity, TransformComponent.class); + backupOrigin.set(transformComponent.originX, transformComponent.originY); + + DimensionsComponent dimensionsComponent = SandboxComponentRetriever.get(entity, DimensionsComponent.class); + + TransformCommandBuilder commandBuilder = new TransformCommandBuilder(); + commandBuilder.begin(entity, sandbox.getEngine()); + commandBuilder.setOrigin(dimensionsComponent.width / 2f, dimensionsComponent.height / 2f); + commandBuilder.execute(HyperLap2DFacade.getInstance()); + } + + @Override + public void undoAction() { + TransformCommandBuilder commandBuilder = new TransformCommandBuilder(); + commandBuilder.begin(entity, sandbox.getEngine()); + commandBuilder.setOrigin(backupOrigin.x, backupOrigin.y); + commandBuilder.execute(HyperLap2DFacade.getInstance()); + } +} diff --git a/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenu.java b/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenu.java index 900be267..7dbbdd4e 100644 --- a/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenu.java +++ b/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenu.java @@ -67,6 +67,7 @@ public class UIDropDownMenu extends H2DPopupMenu { actionNames.put(MsgAPI.ACTION_DELETE_POLYGON_VERTEX, "Delete Vertex"); actionNames.put(MsgAPI.ACTION_CHANGE_ORIGIN_POSITION, "Change Origin Position"); + actionNames.put(MsgAPI.ACTION_CENTER_ORIGIN_POSITION, "Center Origin"); actionNames.put(MsgAPI.ACTION_DUPLICATE_LIBRARY_ACTION, "Duplicate"); actionNames.put(MsgAPI.ACTION_DELETE_LIBRARY_ACTION, "Delete"); diff --git a/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenuMediator.java b/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenuMediator.java index cf5d93cc..f549c761 100644 --- a/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenuMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenuMediator.java @@ -120,6 +120,7 @@ public class UIDropDownMenuMediator extends Mediator { actionSets.put(ORIGIN_POINT_ACTION_SET, new Array<>()); actionSets.get(ORIGIN_POINT_ACTION_SET).add(MsgAPI.ACTION_CHANGE_ORIGIN_POSITION); + actionSets.get(ORIGIN_POINT_ACTION_SET).add(MsgAPI.ACTION_CENTER_ORIGIN_POSITION); facade = HyperLap2DFacade.getInstance(); }