summaryrefslogtreecommitdiffstats
path: root/src/MapEditorScene.java
diff options
context:
space:
mode:
authorNao Pross <naopross@thearcway.org>2018-11-19 10:58:47 +0100
committerNao Pross <naopross@thearcway.org>2018-11-19 10:58:47 +0100
commita659fc5cfe73938731cc0b431f1c42a2fa0ed02d (patch)
treee1e5a6f81eb9818de548b6219970a33666fbf19d /src/MapEditorScene.java
parentUpdate Scene class (and some derivates) to be abstract (diff)
downloadSubconscious-java-a659fc5cfe73938731cc0b431f1c42a2fa0ed02d.tar.gz
Subconscious-java-a659fc5cfe73938731cc0b431f1c42a2fa0ed02d.zip
Update GameWindow and remove parent frame dependency on Scene
Diffstat (limited to 'src/MapEditorScene.java')
-rw-r--r--src/MapEditorScene.java235
1 files changed, 235 insertions, 0 deletions
diff --git a/src/MapEditorScene.java b/src/MapEditorScene.java
new file mode 100644
index 0000000..4a42951
--- /dev/null
+++ b/src/MapEditorScene.java
@@ -0,0 +1,235 @@
+import java.util.ArrayList;
+
+import java.awt.Canvas;
+import java.awt.Graphics2D;
+import java.awt.Dimension;
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.image.BufferStrategy;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.NoninvertibleTransformException;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import javax.swing.JFileChooser;
+import javax.swing.JCheckBox;
+
+import java.lang.Integer;
+
+public class MapEditorScene extends MapScene {
+ private Tile.Type placingTile = Tile.Type.CLEAR;
+ private Actor placingActor = new Actor("", 0, false, 0);
+ private ArrayList<Object> actorFields = new ArrayList<>();
+ private JFrame actorFrame;
+ private boolean nukeActor = false;
+
+ public MapEditorScene() {
+ super();
+ this.setLayout(new BorderLayout());
+
+ JPanel bottomPanel = new JPanel();
+ bottomPanel.setLayout(new GridLayout(1,5));
+
+ JButton newButton = new JButton("New");
+ newButton.setActionCommand("new");
+ JButton tileButton = new JButton("Placing selector");
+ tileButton.setActionCommand("tile");
+ JButton exportButton = new JButton("Export");
+ exportButton.setActionCommand("export");
+ JButton importButton = new JButton("Import");
+ importButton.setActionCommand("import");
+ JButton actorButton = new JButton("Actors");
+ actorButton.setActionCommand("actors");
+
+ newButton.addActionListener(this);
+ tileButton.addActionListener(this);
+ actorButton.addActionListener(this);
+ exportButton.addActionListener(this);
+ importButton.addActionListener(this);
+
+ bottomPanel.add(newButton);
+ bottomPanel.add(tileButton);
+ bottomPanel.add(actorButton);
+ bottomPanel.add(exportButton);
+ bottomPanel.add(importButton);
+
+ this.add(bottomPanel, BorderLayout.PAGE_END);
+ this.add(this.canvas, BorderLayout.CENTER);
+ }
+
+ @Override
+ protected void update(int deltaTime) {}
+
+ @Override
+ protected void absoluteRender(Graphics2D g2d) {}
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ int tileSize = this.maxSize/10;
+ Point2D p = new Point2D.Double(e.getX(), e.getY());
+ try {
+ p = this.tx.inverseTransform(p, null);
+ } catch (NoninvertibleTransformException ex) {}
+ try {
+ int x = (int) p.getX()/tileSize;
+ int y = (int) p.getY()/tileSize;
+ this.map.getTile(x, y);
+ if (this.placingTile != Tile.Type.NONE) {
+ this.map.getTile(x, y).setType(this.placingTile);
+ } else {
+ if (!this.nukeActor) {
+ Actor actor = this.placingActor;
+ actor.place(x, y);
+ this.map.addActor(actor);
+ } else {
+ Actor toNuke = this.placingActor;
+ for (Actor actor : this.map.getActors()) {
+ if (x == actor.getX() && y == actor.getY()) {
+ toNuke = actor;
+ }
+ }
+ this.map.removeActor(toNuke);
+ }
+ }
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ System.out.println("no tile clicked");
+ } catch (NullPointerException ext) {
+ System.out.println("map non existent");
+ }
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if ("new".equals(e.getActionCommand())) {
+ JTextField size = new JTextField();
+
+ JComponent[] inputs = new JComponent[] {
+ new JLabel("Size"),
+ size,
+ };
+
+ int result = JOptionPane.showConfirmDialog(null, inputs, "New map", JOptionPane.DEFAULT_OPTION);
+ if (result == JOptionPane.OK_OPTION) {
+ int sizeN = Integer.parseInt(size.getText());
+ this.map = new Map(new Dimension(sizeN, sizeN));
+ }
+ } else if ("tile".equals(e.getActionCommand())) {
+ String[] values = {"Clear", "Grass", "Water", "Mountain", "Actor", "Remove Actor"};
+
+ Object result = JOptionPane.showInputDialog(null, "Tile Type", "Tile Type Selector", JOptionPane.DEFAULT_OPTION, null, values, "0");
+ if (result != null) {
+ String selected = result.toString();
+ switch (selected) {
+ case "Clear":
+ this.placingTile = Tile.Type.CLEAR;
+ break;
+ case "Grass":
+ this.placingTile = Tile.Type.GRASS;
+ break;
+ case "Water":
+ this.placingTile = Tile.Type.WATER;
+ break;
+ case "Mountain":
+ this.placingTile = Tile.Type.MOUNTAIN;
+ break;
+ case "Actor":
+ this.placingTile = Tile.Type.NONE;
+ this.nukeActor = false;
+ break;
+ case "Remove Actor":
+ this.placingTile = Tile.Type.NONE;
+ this.nukeActor = true;
+ break;
+
+ }
+ }
+ } else if ("export".equals(e.getActionCommand())) {
+ JFileChooser fc = new JFileChooser();
+ fc.showSaveDialog(null);
+
+ MapLoader mapLoader = new MapLoader(fc.getSelectedFile());
+ mapLoader.saveMap(this.map);
+ } else if ("import".equals(e.getActionCommand())) {
+ JFileChooser fc = new JFileChooser();
+ fc.showOpenDialog(null);
+
+ MapLoader mapLoader = new MapLoader(fc.getSelectedFile());
+ this.map = mapLoader.getMap();
+ } else if ("actors".equals(e.getActionCommand())) {
+ JFrame actorFrame = new JFrame("Actors");
+ actorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ actorFrame.setSize(new Dimension(300, 400));
+ actorFrame.setLocationRelativeTo(null);
+
+ JPanel panel = new JPanel();
+ panel.setLayout(new GridLayout(5,2));
+
+ JLabel lName = new JLabel("Name");
+ JTextField name = new JTextField();
+ JLabel lAgility = new JLabel("Agility");
+ JTextField agility = new JTextField();
+ JLabel lHp = new JLabel("max HP");
+ JTextField hp = new JTextField();
+ JCheckBox enemy = new JCheckBox("Enemy");
+ JLabel empty = new JLabel();
+ JButton ok = new JButton("Confirm");
+ ok.setActionCommand("actOk");
+ JButton cancel = new JButton("Cancel");
+ cancel.setActionCommand("actCancel");
+
+ ArrayList<Object> actorFields = new ArrayList<>();
+ actorFields.add(name);
+ actorFields.add(hp);
+ actorFields.add(agility);
+ actorFields.add(enemy);
+ this.actorFields = actorFields;
+
+ ok.addActionListener(this);
+ cancel.addActionListener(this);
+
+ panel.add(lName);
+ panel.add(name);
+ panel.add(lAgility);
+ panel.add(agility);
+ panel.add(lHp);
+ panel.add(hp);
+ panel.add(enemy);
+ panel.add(empty);
+ panel.add(ok);
+ panel.add(cancel);
+
+ actorFrame.add(panel);
+ actorFrame.pack();
+ actorFrame.setVisible(true);
+
+ this.actorFrame = actorFrame;
+ } else if ("actOk".equals(e.getActionCommand())) {
+ JTextField nameField = (JTextField) this.actorFields.get(0);
+ String name = nameField.getText();
+ JTextField hpField = (JTextField) this.actorFields.get(1);
+ int hp = Integer.parseInt(hpField.getText());
+ JTextField agilityField = (JTextField) this.actorFields.get(2);
+ int agility = Integer.parseInt(agilityField.getText());
+ JCheckBox enemyBox = (JCheckBox) this.actorFields.get(3);
+ Actor actor = new Actor(name, hp, enemyBox.isSelected(), agility);
+ this.placingActor = actor;
+ this.actorFrame.setVisible(false);
+ this.actorFrame.dispose();
+ } else if ("actCancel".equals(e.getActionCommand())) {
+ this.actorFrame.setVisible(false);
+ this.actorFrame.dispose();
+ }
+
+ }
+}