diff --git a/src/main/java/ruscz/game/gameOfProd/Game.java b/src/main/java/ruscz/game/gameOfProd/Game.java
index c40d6b5..3d7fe30 100644
--- a/src/main/java/ruscz/game/gameOfProd/Game.java
+++ b/src/main/java/ruscz/game/gameOfProd/Game.java
@@ -1,5 +1,6 @@
package ruscz.game.gameOfProd;
+import ruscz.game.gameOfProd.LevelEditor.EditorManager;
import ruscz.game.gameOfProd.LevelEditor.TilesetOverview;
import ruscz.game.gameOfProd.Windows.WindowOfBattle;
import ruscz.game.gameOfProd.Windows.WindowOfFreeMove;
@@ -51,7 +52,7 @@ public class Game extends JFrame {
// battle.startBattle();
//Tohle spustí na začátku tileset overview
-// new TilesetOverview();
+ new EditorManager();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setUndecorated(true);
diff --git a/src/main/java/ruscz/game/gameOfProd/Image/ImageCell.java b/src/main/java/ruscz/game/gameOfProd/Image/ImageCell.java
index d71e151..d6cc2a9 100644
--- a/src/main/java/ruscz/game/gameOfProd/Image/ImageCell.java
+++ b/src/main/java/ruscz/game/gameOfProd/Image/ImageCell.java
@@ -21,6 +21,11 @@ public class ImageCell {
private int[][] mapBackground;
private int[][] mapForeground;
+ public void readMapFile() {
+ mapBackground = new int[WindowOfFreeMove.CANVAS_WIDTH][WindowOfFreeMove.CANVAS_HEIGHT];
+ mapForeground = new int[WindowOfFreeMove.CANVAS_WIDTH][WindowOfFreeMove.CANVAS_HEIGHT];
+ }
+
public void readMapFile(String name) {
try {
mapBackground = new int[WindowOfFreeMove.CANVAS_WIDTH][WindowOfFreeMove.CANVAS_HEIGHT];
@@ -168,6 +173,10 @@ public class ImageCell {
public ImageDoor getImageDoor() { return imageDoor; }
+ public int[][] getMapForeground() { return mapForeground; }
+
+ public int[][] getMapBackground() { return mapBackground; }
+
public void paintBackground(Graphics g, int x, int y) {
g.drawImage(imagesOfTiles.get(mapBackground[x][y]), x * WindowOfFreeMove.CELL_SIZE,
y * WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, null);
diff --git a/src/main/java/ruscz/game/gameOfProd/LevelEditor/EditorManager.java b/src/main/java/ruscz/game/gameOfProd/LevelEditor/EditorManager.java
new file mode 100644
index 0000000..ec47c5b
--- /dev/null
+++ b/src/main/java/ruscz/game/gameOfProd/LevelEditor/EditorManager.java
@@ -0,0 +1,12 @@
+package ruscz.game.gameOfProd.LevelEditor;
+
+public class EditorManager {
+
+ private TilesetOverview overview;
+ private LevelEditor editor;
+
+ public EditorManager() {
+ overview = new TilesetOverview();
+ editor = new LevelEditor();
+ }
+}
diff --git a/src/main/java/ruscz/game/gameOfProd/LevelEditor/LevelEditor.java b/src/main/java/ruscz/game/gameOfProd/LevelEditor/LevelEditor.java
new file mode 100644
index 0000000..6a60703
--- /dev/null
+++ b/src/main/java/ruscz/game/gameOfProd/LevelEditor/LevelEditor.java
@@ -0,0 +1,239 @@
+package ruscz.game.gameOfProd.LevelEditor;
+
+import ruscz.game.gameOfProd.Cells.TypeOfCell;
+import ruscz.game.gameOfProd.Map.Map;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Arrays;
+
+public class LevelEditor extends JFrame {
+
+ private JLayeredPane view;
+
+ public LevelEditor() {
+ view = new JLayeredPane();
+ view.setBounds(0, 0, 1200, 1000);
+ view.setLayout(null);
+ view.setVisible(true);
+
+ JPanel menu = new JPanel();
+ menu.setBounds(0, 0, 1200, 1000);
+ menu.setLayout(null);
+ menu.setVisible(true);
+
+ JLabel titleNew = new JLabel("
CREATE NEW MAP
");
+ titleNew.setBounds(0, 50, 1200, 50);
+
+ JLabel nameNew = new JLabel("Name of new map
");
+ nameNew.setBounds(0, 120, 1200, 20);
+ JTextField nameVal = new JTextField();
+ nameVal.setBounds(550, 140, 100, 20);
+
+ JLabel widthNew = new JLabel("Width of new map (in cells)
");
+ widthNew.setBounds(0, 190, 1200, 20);
+ JTextField widthVal = new JTextField();
+ widthVal.setBounds(550, 210, 100, 20);
+
+ JLabel heightNew = new JLabel("Height of new map (in cells)
");
+ heightNew.setBounds(0, 260, 1200, 20);
+ JTextField heightVal = new JTextField();
+ heightVal.setBounds(550, 280, 100, 20);
+
+ JLabel errorInt = new JLabel("One or more values is not an Integer.
");
+ errorInt.setBounds(0, 400, 1200, 20);
+ errorInt.setVisible(false);
+
+ JButton createNew = new JButton("CREATE NEW MAP");
+ createNew.setBounds(500, 330, 200, 50);
+ createNew.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ try {
+ String name = nameVal.getText();
+ int width = Integer.parseInt(widthVal.getText());
+ int height = Integer.parseInt(heightVal.getText());
+ menu.removeAll();
+ menu.setVisible(false);
+ view.remove(menu);
+ view.revalidate();
+ view.repaint();
+ createNewMap(name, width, height);
+ }
+ catch (NumberFormatException ex) {
+ errorInt.setVisible(true);
+ }
+ }
+ });
+
+ JLabel titleEx = new JLabel("EDIT EXISTING MAP
");
+ titleEx.setBounds(0, 500, 1200, 50);
+
+ JLabel nameEx = new JLabel("Name of map
");
+ nameEx.setBounds(0, 570, 1200, 20);
+ JTextField nameExVal = new JTextField();
+ nameExVal.setBounds(550, 590, 100, 20);
+
+ JButton editEx = new JButton("EDIT EXISTING MAP");
+ editEx.setBounds(500, 640, 200, 50);
+ editEx.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ try {
+ //TODO: LevelEditor version of Map class
+ }
+ catch (NumberFormatException ex) {
+ errorInt.setVisible(true);
+ }
+ }
+ });
+
+ menu.add(titleNew);
+ menu.add(nameNew);
+ menu.add(nameVal);
+ menu.add(widthNew);
+ menu.add(widthVal);
+ menu.add(heightNew);
+ menu.add(heightVal);
+ menu.add(createNew);
+ menu.add(errorInt);
+ menu.add(titleEx);
+ menu.add(nameEx);
+ menu.add(nameExVal);
+ menu.add(editEx);
+ view.add(menu);
+ add(view);
+
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ setBounds(0, 0, 1200, 1000);
+ setLocationRelativeTo(null);
+ setLayout(null);
+ setVisible(true);
+ setResizable(false);
+ }
+
+ private void createNewMap(String name, int width, int height) {
+ TypeOfCell[][] mapArray = new TypeOfCell[width][height];
+ for (int i = 0; i < height; i++) {
+ Arrays.fill(mapArray[i], TypeOfCell.EMPTY);
+ }
+ Map map = new Map(mapArray);
+ map.setName(name);
+ int[] size = {width, height};
+ map.setCanvasSize(size);
+ map.getImageCell().readMapFile();
+ startMapEditor(map, width, height);
+ }
+
+ private void startMapEditor(Map map, int width, int height) {
+
+ JPanel menu = new JPanel();
+ menu.setBounds(0, 0, 1200, 1000);
+ menu.setLayout(null);
+ menu.setVisible(true);
+
+ JLabel title = new JLabel("Currently editing: " + map.getName() + "
");
+ title.setBounds(20, 10, 400, 50);
+
+ JLayeredPane mapLayers = new JLayeredPane();
+ mapLayers.setPreferredSize(new Dimension(width * 50, height * 50));
+ mapLayers.setLayout(null);
+ mapLayers.setVisible(true);
+
+ JPanel objectSet = new JPanel();
+ objectSet.setBounds(0, 0, width * 50, height * 50);
+ objectSet.setLayout(null);
+ objectSet.setVisible(true);
+ objectSet.setBackground(Color.RED);
+
+ JPanel cellSet = new JPanel();
+ cellSet.setBounds(0, 0, width * 50, height * 50);
+ cellSet.setLayout(null);
+ cellSet.setVisible(true);
+ cellSet.setBackground(Color.GREEN);
+
+ JPanel tileSet = new JPanel();
+ tileSet.setBounds(0, 0, width * 50, height * 50);
+ tileSet.setLayout(null);
+ tileSet.setVisible(true);
+ tileSet.setBackground(Color.BLUE);
+
+ JScrollPane mapViewer = new JScrollPane(mapLayers);
+ mapViewer.setBounds(200, 70, 950, 860);
+ mapViewer.setVisible(true);
+ mapViewer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+ mapViewer.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ mapViewer.setWheelScrollingEnabled(true);
+ mapViewer.getVerticalScrollBar().setUnitIncrement(10);
+
+ JLabel objectLabel = new JLabel("Object Layer");
+ objectLabel.setBounds( 500, 30, 100, 20);
+ JCheckBox objectBox = new JCheckBox();
+ objectBox.setBounds(600, 30, 30, 20);
+ objectBox.setSelected(true);
+ objectBox.addActionListener(actionEvent -> {
+ if (objectSet.isVisible()) objectSet.setVisible(false);
+ else objectSet.setVisible(true);
+ });
+ for (int i = 0; i < width; i++) {
+ for (int j = 0; j < height; j++) {
+ JLabel object = new JLabel(String.valueOf(map.getImageCell().getMapForeground()[i][j]), JLabel.CENTER);
+ object.setHorizontalTextPosition(JLabel.CENTER);
+ object.setBounds(i * 50, j * 50, 50, 50);
+ objectSet.add(object);
+ }
+ }
+
+ JLabel cellLabel = new JLabel("Physical (cell) Layer");
+ cellLabel.setBounds( 700, 30, 150, 20);
+ JCheckBox cellBox = new JCheckBox();
+ cellBox.setBounds(850, 30, 30, 20);
+ cellBox.setSelected(true);
+ cellBox.addActionListener(actionEvent -> {
+ if (cellSet.isVisible()) cellSet.setVisible(false);
+ else cellSet.setVisible(true);
+ });
+ for (int i = 0; i < width; i++) {
+ for (int j = 0; j < height; j++) {
+ JLabel cell = new JLabel(String.valueOf(map.getMapArray()[i][j]), JLabel.CENTER);
+ cell.setHorizontalTextPosition(JLabel.CENTER);
+ cell.setBounds(i * 50, j * 50, 50, 50);
+ cellSet.add(cell);
+ }
+ }
+
+ JLabel tileLabel = new JLabel("Tile Layer");
+ tileLabel.setBounds( 950, 30, 100, 20);
+ JCheckBox tileBox = new JCheckBox();
+ tileBox.setBounds(1030, 30, 30, 20);
+ tileBox.setSelected(true);
+ tileBox.addActionListener(actionEvent -> {
+ if (tileSet.isVisible()) tileSet.setVisible(false);
+ else tileSet.setVisible(true);
+ });
+ for (int i = 0; i < width; i++) {
+ for (int j = 0; j < height; j++) {
+ JLabel tile = new JLabel(String.valueOf(map.getImageCell().getMapBackground()[i][j]), JLabel.CENTER);
+ tile.setHorizontalTextPosition(JLabel.CENTER);
+ tile.setBounds(i * 50, j * 50, 50, 50);
+ tileSet.add(tile);
+ }
+ }
+
+ menu.add(title);
+ menu.add(objectLabel);
+ menu.add(objectBox);
+ menu.add(cellLabel);
+ menu.add(cellBox);
+ menu.add(tileLabel);
+ menu.add(tileBox);
+ mapLayers.add(objectSet);
+ mapLayers.add(cellSet);
+ mapLayers.add(tileSet);
+ view.add(mapViewer);
+ view.add(menu);
+ view.repaint();
+ }
+}
diff --git a/src/main/java/ruscz/game/gameOfProd/Map/Map.java b/src/main/java/ruscz/game/gameOfProd/Map/Map.java
index fd3b373..a4454d7 100644
--- a/src/main/java/ruscz/game/gameOfProd/Map/Map.java
+++ b/src/main/java/ruscz/game/gameOfProd/Map/Map.java
@@ -274,6 +274,8 @@ public class Map {
public SoundManager getSoundManager() { return soundManager; }
+ public void setCanvasSize(int[] size) { canvasSize = size; }
+
public boolean isBusyCell(int x, int y) {
for (Block cell : block) {
if (cell.isInBlock(x, y))
diff --git a/src/main/resources/save/savedGame/events.txt b/src/main/resources/save/savedGame/events.txt
index 24d3470..e69de29 100644
--- a/src/main/resources/save/savedGame/events.txt
+++ b/src/main/resources/save/savedGame/events.txt
@@ -1,65 +0,0 @@
-
-
-
-
-
diff --git a/src/main/resources/save/savedGame/inventory.txt b/src/main/resources/save/savedGame/inventory.txt
index 5c77ce0..e69de29 100644
--- a/src/main/resources/save/savedGame/inventory.txt
+++ b/src/main/resources/save/savedGame/inventory.txt
@@ -1,6 +0,0 @@
--
- white-key-card
- 1
- 19
- key
-
diff --git a/src/main/resources/save/savedGame/person.txt b/src/main/resources/save/savedGame/person.txt
index d7aae53..e69de29 100644
--- a/src/main/resources/save/savedGame/person.txt
+++ b/src/main/resources/save/savedGame/person.txt
@@ -1,6 +0,0 @@
-
-
- 8
- 6
- 3
-
\ No newline at end of file
diff --git a/src/main/resources/save/savedGame/village.txt b/src/main/resources/save/savedGame/village.txt
index 1b4bc7b..e69de29 100644
--- a/src/main/resources/save/savedGame/village.txt
+++ b/src/main/resources/save/savedGame/village.txt
@@ -1 +0,0 @@
-TODO: Village
\ No newline at end of file