From 1d2249fe0776c30579c057f4f0d878f24ae3b05d Mon Sep 17 00:00:00 2001 From: Flafla2 Date: Wed, 27 Nov 2013 13:21:47 -0500 Subject: [PATCH] Added Open Map / Save Map dialogs --- .../remote2d/editor/GuiEditorTopMenu.java | 19 ++--- .../remote2d/editor/GuiWindowOpenMap.java | 78 +++++++++++++++++++ .../remote2d/editor/GuiWindowSaveMap.java | 63 +++++++++++++++ .../editor/operation/OperationSaveMap.java | 10 ++- .../remote2d/engine/io/R2DFileManager.java | 2 - .../com/remote/remote2d/engine/world/Map.java | 1 + 6 files changed, 157 insertions(+), 16 deletions(-) create mode 100644 Remote2D/src/com/remote/remote2d/editor/GuiWindowOpenMap.java create mode 100644 Remote2D/src/com/remote/remote2d/editor/GuiWindowSaveMap.java diff --git a/Remote2D/src/com/remote/remote2d/editor/GuiEditorTopMenu.java b/Remote2D/src/com/remote/remote2d/editor/GuiEditorTopMenu.java index 53dbae0..165717a 100644 --- a/Remote2D/src/com/remote/remote2d/editor/GuiEditorTopMenu.java +++ b/Remote2D/src/com/remote/remote2d/editor/GuiEditorTopMenu.java @@ -12,7 +12,6 @@ import com.remote.remote2d.editor.operation.OperationDeleteEntity; import com.remote.remote2d.editor.operation.OperationNewEntity; import com.remote.remote2d.editor.operation.OperationNewMap; -import com.remote.remote2d.editor.operation.OperationOpenMap; import com.remote.remote2d.editor.operation.OperationSaveMap; import com.remote.remote2d.engine.DisplayHandler; import com.remote.remote2d.engine.Remote2D; @@ -22,9 +21,7 @@ import com.remote.remote2d.engine.gui.Gui; import com.remote.remote2d.engine.gui.GuiInGame; import com.remote.remote2d.engine.gui.KeyShortcut; -import com.remote.remote2d.engine.io.R2DFileManager; import com.remote.remote2d.engine.logic.Vector2; -import com.remote.remote2d.engine.world.Map; public class GuiEditorTopMenu extends Gui { @@ -201,16 +198,16 @@ public void tick(int i, int j, int k) { } else if(secSubTitle.equalsIgnoreCase("Open Map")) { Log.info("Opening!"); - Map newMap = new Map(); - R2DFileManager mapManager = new R2DFileManager("res/maps/map.r2d", newMap); - mapManager.read(); - if(editor.getMap() != null) - editor.confirmOperation(new OperationOpenMap(editor,newMap)); + editor.pushWindow(new GuiWindowOpenMap(editor, new Vector2(i,j), editor.getWindowBounds())); + } else if(secSubTitle.equalsIgnoreCase("Save Map") && editor.getMap() != null) + { + if(editor.getMap().path != null) + editor.confirmOperation(new OperationSaveMap(editor,editor.getMap().path)); else - editor.executeOperation(new OperationOpenMap(editor,newMap)); - } else if(secSubTitle.equalsIgnoreCase("Save Map")) + editor.pushWindow(new GuiWindowSaveMap(editor,new Vector2(i,j),editor.getWindowBounds())); + } else if(secSubTitle.equalsIgnoreCase("Save Map As...") && editor.getMap() != null) { - editor.confirmOperation(new OperationSaveMap(editor)); + editor.pushWindow(new GuiWindowSaveMap(editor,new Vector2(i,j),editor.getWindowBounds())); } } else if(secTitle.equalsIgnoreCase("Edit")) { diff --git a/Remote2D/src/com/remote/remote2d/editor/GuiWindowOpenMap.java b/Remote2D/src/com/remote/remote2d/editor/GuiWindowOpenMap.java new file mode 100644 index 0000000..8560f17 --- /dev/null +++ b/Remote2D/src/com/remote/remote2d/editor/GuiWindowOpenMap.java @@ -0,0 +1,78 @@ +package com.remote.remote2d.editor; + +import com.remote.remote2d.editor.operation.OperationOpenMap; +import com.remote.remote2d.engine.gui.GuiButton; +import com.remote.remote2d.engine.gui.GuiTextField; +import com.remote.remote2d.engine.gui.GuiWindow; +import com.remote.remote2d.engine.gui.WindowHolder; +import com.remote.remote2d.engine.io.R2DFileManager; +import com.remote.remote2d.engine.io.R2DFileUtility; +import com.remote.remote2d.engine.logic.ColliderBox; +import com.remote.remote2d.engine.logic.Vector2; +import com.remote.remote2d.engine.world.Map; + +public class GuiWindowOpenMap extends GuiWindow { + + GuiTextField textField; + GuiButton doneButton; + + public GuiWindowOpenMap(WindowHolder holder, Vector2 pos, ColliderBox allowedBounds) + { + this(holder,pos,new Vector2(300,100),allowedBounds); + } + + public GuiWindowOpenMap(WindowHolder holder, Vector2 pos, Vector2 dim, ColliderBox allowedBounds) { + super(holder, pos, dim, allowedBounds, "Open Map"); + + textField = new GuiTextField(new Vector2(10,10),new Vector2(dim.x-20,40), 20); + textField.text = "/res/maps/map.r2d"; + } + + @Override + public void initGui() + { + if(textField != null) + textField.dim = new Vector2(dim.x-20,40); + + buttonList.clear(); + buttonList.add(new GuiButton(0,new Vector2(10,dim.y-50),new Vector2(dim.x/2-10,40),"Cancel")); + buttonList.add(doneButton = new GuiButton(1,new Vector2(dim.x/2+10,dim.y-50),new Vector2(dim.x/2-20,40),"Done")); + } + + @Override + public void renderContents(float interpolation) { + textField.render(interpolation); + } + + @Override + public void tick(int i, int j, int k) + { + super.tick(i,j,k); + textField.tick(i, j, k); + + if(!R2DFileUtility.R2DExists(textField.text)) + doneButton.setDisabled(true); + else if(doneButton.getDisabled()) + doneButton.setDisabled(false); + } + + @Override + public void actionPerformed(GuiButton button) + { + if(button.id == 0) + holder.closeWindow(this); + else if(button.id == 1 && holder instanceof GuiEditor) + { + GuiEditor editor = (GuiEditor)holder; + + Map newMap = new Map(); + R2DFileManager mapManager = new R2DFileManager(textField.text, newMap); + mapManager.read(); + if(editor.getMap() != null) + editor.confirmOperation(new OperationOpenMap(editor,newMap)); + else + editor.executeOperation(new OperationOpenMap(editor,newMap)); + } + } + +} diff --git a/Remote2D/src/com/remote/remote2d/editor/GuiWindowSaveMap.java b/Remote2D/src/com/remote/remote2d/editor/GuiWindowSaveMap.java new file mode 100644 index 0000000..52a548f --- /dev/null +++ b/Remote2D/src/com/remote/remote2d/editor/GuiWindowSaveMap.java @@ -0,0 +1,63 @@ +package com.remote.remote2d.editor; + +import com.remote.remote2d.editor.operation.OperationSaveMap; +import com.remote.remote2d.engine.gui.GuiButton; +import com.remote.remote2d.engine.gui.GuiTextField; +import com.remote.remote2d.engine.gui.GuiWindow; +import com.remote.remote2d.engine.gui.WindowHolder; +import com.remote.remote2d.engine.logic.ColliderBox; +import com.remote.remote2d.engine.logic.Vector2; + +public class GuiWindowSaveMap extends GuiWindow { + + GuiTextField textField; + GuiButton doneButton; + + public GuiWindowSaveMap(WindowHolder holder, Vector2 pos, ColliderBox allowedBounds) + { + this(holder,pos,new Vector2(300,100),allowedBounds); + } + + public GuiWindowSaveMap(WindowHolder holder, Vector2 pos, Vector2 dim, ColliderBox allowedBounds) { + super(holder, pos, dim, allowedBounds, "Save Map"); + + textField = new GuiTextField(new Vector2(10,10),new Vector2(dim.x-20,40), 20); + textField.text = "/res/maps/map.r2d"; + } + + @Override + public void initGui() + { + textField.dim = new Vector2(dim.x-20,40); + + buttonList.clear(); + buttonList.add(new GuiButton(0,new Vector2(10,dim.y-50),new Vector2(dim.x/2-10,40),"Cancel")); + buttonList.add(doneButton = new GuiButton(1,new Vector2(dim.x/2+10,dim.y-50),new Vector2(dim.x/2-20,40),"Done")); + } + + @Override + public void renderContents(float interpolation) { + textField.render(interpolation); + } + + @Override + public void tick(int i, int j, int k) + { + super.tick(i,j,k); + textField.tick(i, j, k); + } + + @Override + public void actionPerformed(GuiButton button) + { + if(button.id == 0) + holder.closeWindow(this); + else if(button.id == 1 && holder instanceof GuiEditor) + { + GuiEditor editor = (GuiEditor)holder; + + editor.confirmOperation(new OperationSaveMap(editor,textField.text)); + } + } + +} diff --git a/Remote2D/src/com/remote/remote2d/editor/operation/OperationSaveMap.java b/Remote2D/src/com/remote/remote2d/editor/operation/OperationSaveMap.java index 1b25933..7af6cbf 100644 --- a/Remote2D/src/com/remote/remote2d/editor/operation/OperationSaveMap.java +++ b/Remote2D/src/com/remote/remote2d/editor/operation/OperationSaveMap.java @@ -5,16 +5,20 @@ import com.remote.remote2d.engine.world.Map; public class OperationSaveMap extends Operation { - - public OperationSaveMap(GuiEditor editor) { + + String path; + + public OperationSaveMap(GuiEditor editor, String path) { super(editor); + this.path = path; } @Override public void execute() { Map map = editor.getMap(); - R2DFileManager mapManager = new R2DFileManager("res/maps/map.r2d", map); + R2DFileManager mapManager = new R2DFileManager(path, map); mapManager.write(); + map.path = path; editor.setMap(map); } diff --git a/Remote2D/src/com/remote/remote2d/engine/io/R2DFileManager.java b/Remote2D/src/com/remote/remote2d/engine/io/R2DFileManager.java index 445e161..e768a38 100644 --- a/Remote2D/src/com/remote/remote2d/engine/io/R2DFileManager.java +++ b/Remote2D/src/com/remote/remote2d/engine/io/R2DFileManager.java @@ -38,8 +38,6 @@ public class R2DFileManager { public R2DFileManager(String path, R2DFileSaver saverClass) { - path = path.replace('/', File.separatorChar); - path = path.replace('\\', File.separatorChar); this.path = path; file = R2DFileUtility.getResource(path); collection = new R2DTypeCollection(file.getName()); diff --git a/Remote2D/src/com/remote/remote2d/engine/world/Map.java b/Remote2D/src/com/remote/remote2d/engine/world/Map.java index 221c424..7307bcf 100644 --- a/Remote2D/src/com/remote/remote2d/engine/world/Map.java +++ b/Remote2D/src/com/remote/remote2d/engine/world/Map.java @@ -26,6 +26,7 @@ public class Map implements R2DFileSaver { public Camera camera; public int backgroundColor = 0xffffff; public int gridSize = 16; + public String path = null; public boolean debug = false;