From 46df561a704f9607d56f3ad76862b4d271eae717 Mon Sep 17 00:00:00 2001 From: musilto9 Date: Thu, 7 May 2020 00:18:11 +0200 Subject: [PATCH] added basic error handling to level editor --- .../gameOfProd/LevelEditor/LevelEditor.java | 115 +++++++++++++----- 1 file changed, 83 insertions(+), 32 deletions(-) diff --git a/src/main/java/ruscz/game/gameOfProd/LevelEditor/LevelEditor.java b/src/main/java/ruscz/game/gameOfProd/LevelEditor/LevelEditor.java index c62bc8d..b4694af 100644 --- a/src/main/java/ruscz/game/gameOfProd/LevelEditor/LevelEditor.java +++ b/src/main/java/ruscz/game/gameOfProd/LevelEditor/LevelEditor.java @@ -2,6 +2,7 @@ package ruscz.game.gameOfProd.LevelEditor; import ruscz.game.gameOfProd.Cells.TypeOfCell; import ruscz.game.gameOfProd.Map.Map; +import ruscz.game.gameOfProd.Windows.WindowOfFreeMove; import javax.swing.*; import java.awt.*; @@ -16,6 +17,7 @@ public class LevelEditor extends JFrame { private TilesetOverview overview; private JPanel menu; private JPanel info; + private JLabel errorMessage; private LinkedList imagesOfTiles; private Map map; @@ -53,9 +55,9 @@ public class LevelEditor extends JFrame { JTextField heightVal = new JTextField(); heightVal.setBounds(600, 280, 100, 20); - JLabel errorInt = new JLabel("
One or more values is not an Integer.
"); - errorInt.setBounds(0, 400, 1300, 20); - errorInt.setVisible(false); + JLabel error = new JLabel(); + error.setBounds(0, 400, 1300, 20); + error.setVisible(false); JButton createNew = new JButton("CREATE NEW MAP"); createNew.setBounds(550, 330, 200, 50); @@ -66,6 +68,11 @@ public class LevelEditor extends JFrame { String name = nameVal.getText(); int width = Integer.parseInt(widthVal.getText()); int height = Integer.parseInt(heightVal.getText()); + if (height < 0 || height > WindowOfFreeMove.CANVAS_HEIGHT || width < 0 || width > WindowOfFreeMove.CANVAS_WIDTH) { + error.setText("
One or more values is out of bounds (from 0 to 50).
"); + error.setVisible(true); + return; + } menu.removeAll(); menu.setVisible(false); view.remove(menu); @@ -74,7 +81,8 @@ public class LevelEditor extends JFrame { createNewMap(name, width, height); } catch (NumberFormatException ex) { - errorInt.setVisible(true); + error.setText("
One or more values (apart from Name) is not an Integer.
"); + error.setVisible(true); } } }); @@ -94,7 +102,7 @@ public class LevelEditor extends JFrame { //TODO: LevelEditor version of Map class } catch (NumberFormatException ex) { - errorInt.setVisible(true); + error.setVisible(true); } }); @@ -106,7 +114,7 @@ public class LevelEditor extends JFrame { menu.add(heightNew); menu.add(heightVal); menu.add(createNew); - menu.add(errorInt); + menu.add(error); // menu.add(titleEx); // menu.add(nameEx); // menu.add(nameExVal); @@ -160,7 +168,10 @@ public class LevelEditor extends JFrame { openTilesets.setBounds(20, 70, 260, 30); openTilesets.addActionListener(e -> { if (overview == null) overview = new TilesetOverview(); - else overview.setState(Frame.NORMAL); + else { + overview.setState(Frame.NORMAL); + overview.toFront(); + } importTilesets.setVisible(true); }); @@ -172,22 +183,19 @@ public class LevelEditor extends JFrame { objectSet.setBounds(0, 0, width * 50, height * 50); objectSet.setLayout(null); objectSet.setBackground(Color.RED); - objectSet.setOpaque(true); cellSet = new JPanel(); cellSet.setBounds(0, 0, width * 50, height * 50); cellSet.setLayout(null); cellSet.setBackground(Color.GREEN); - cellSet.setOpaque(true); tileSet = new JPanel(); tileSet.setBounds(0, 0, width * 50, height * 50); tileSet.setLayout(null); tileSet.setBackground(Color.BLUE); - tileSet.setOpaque(true); JScrollPane mapViewer = new JScrollPane(mapLayers); - mapViewer.setBounds(300, 70, 950, 860); + mapViewer.setBounds(300, 70, 950, 810); mapViewer.setVisible(true); mapViewer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); mapViewer.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); @@ -201,7 +209,10 @@ public class LevelEditor extends JFrame { objectBox.setSelected(true); objectBox.addActionListener(actionEvent -> { if (objectSet.isVisible()) objectSet.setVisible(false); - else objectSet.setVisible(true); + else { + objectSet.setBackground(new Color(0, 0, 0, 0)); + objectSet.setVisible(true); + } }); JLabel cellLabel = new JLabel("Physical (cell) Layer"); @@ -224,6 +235,10 @@ public class LevelEditor extends JFrame { else tileSet.setVisible(true); }); + errorMessage = new JLabel(); + errorMessage.setBounds(300, 900, 950, 30); + errorMessage.setVisible(false); + repaintSets(); menu.add(title); @@ -235,10 +250,11 @@ public class LevelEditor extends JFrame { menu.add(tileBox); menu.add(importTilesets); menu.add(openTilesets); + menu.add(errorMessage); - mapLayers.add(objectSet, JLayeredPane.MODAL_LAYER); + mapLayers.add(objectSet, JLayeredPane.POPUP_LAYER); mapLayers.add(cellSet, JLayeredPane.MODAL_LAYER); - mapLayers.add(tileSet, JLayeredPane.MODAL_LAYER); + mapLayers.add(tileSet, JLayeredPane.DEFAULT_LAYER); view.add(mapViewer); view.add(menu); @@ -260,11 +276,11 @@ public class LevelEditor extends JFrame { infoLabel.setIcon(label.getIcon()); infoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); - JLabel numValue = new JLabel("Number value:"); - numValue.setBounds(70, 10, 100, 30); + JLabel numValue = new JLabel("Inner Value:"); + numValue.setBounds(90, 10, 100, 30); JTextField tileNum = new JTextField(label.getName()); - tileNum.setBounds(170, 10, 50, 30); + tileNum.setBounds(170, 10, 90, 30); JButton importTile = new JButton("Import selected tile"); importTile.setVisible(false); @@ -273,32 +289,49 @@ public class LevelEditor extends JFrame { infoLabel.setIcon(overview.getInfo().getIcon()); tileNum.setText(overview.getInfo().getText().replace("", "").replace("", "")); } - else overview.setState(Frame.NORMAL); + else { + overview.setState(Frame.NORMAL); + overview.toFront(); + } }); JButton selectTile = new JButton("Select tile"); selectTile.addActionListener(e -> { if (overview == null) overview = new TilesetOverview(); - else overview.setState(Frame.NORMAL); + else { + overview.setState(Frame.NORMAL); + overview.toFront(); + } importTile.setVisible(true); }); JButton saveInfo = new JButton("Save tile info"); - saveInfo.addActionListener(e -> { - map.getImageCell().getMapForeground()[x][y] = Integer.parseInt(tileNum.getText()); - repaintObjectset(); - info.removeAll(); - view.remove(info); - view.revalidate(); - view.repaint(); - }); if (layer.equals("object")) { - selectTile.setBounds(20, 100, 150, 30); + selectTile.setBounds(50, 100, 150, 30); - importTile.setBounds(20, 150, 150, 30); + importTile.setBounds(50, 150, 150, 30); - saveInfo.setBounds(20, 200, 150, 30); + saveInfo.setBounds(50, 200, 150, 30); + saveInfo.addActionListener(e -> { + if (imagesOfTiles != null) { + if (Integer.parseInt(tileNum.getText()) > imagesOfTiles.size() || Integer.parseInt(tileNum.getText()) < 0) { + displayError("Inner value out of bounds. Value has to bee between 0 and " + (imagesOfTiles.size() - 1) + "."); + return; + } + } + else if (Integer.parseInt(tileNum.getText()) < 0) { + displayError("Inner value out of bounds. Value has to bee higher than 0."); + return; + } + hideError(); + map.getImageCell().getMapForeground()[x][y] = Integer.parseInt(tileNum.getText()); + repaintObjectset(); + info.removeAll(); + view.remove(info); + view.revalidate(); + view.repaint(); + }); } info.add(infoLabel); @@ -310,6 +343,13 @@ public class LevelEditor extends JFrame { view.add(info); } + private void displayError(String message) { + errorMessage.setText("" + message + ""); + errorMessage.setVisible(true); + } + + private void hideError() { errorMessage.setVisible(false); } + private void repaintSets() { repaintObjectset(); repaintCellSet(); @@ -327,8 +367,13 @@ public class LevelEditor extends JFrame { object.setHorizontalTextPosition(JLabel.CENTER); } else if (map.getImageCell().getMapForeground()[i][j] != 0) { + if (map.getImageCell().getMapForeground()[i][j] > imagesOfTiles.size() || map.getImageCell().getMapForeground()[i][j] < 0) { + displayError("Inner Value out of bounds for current tileset was found on position " + i + ":" + j + " on Object Layer. Defaulting to 0."); + map.getImageCell().getMapForeground()[i][j] = 0; + } object.setIcon(new ImageIcon(imagesOfTiles.get(map.getImageCell().getMapForeground()[i][j]).getScaledInstance(50, 50, Image.SCALE_DEFAULT))); } + else objectSet.setOpaque(false); object.setName(String.valueOf(map.getImageCell().getMapForeground()[i][j])); object.setBounds(i * 50, j * 50, 50, 50); int x = i; @@ -355,8 +400,9 @@ public class LevelEditor extends JFrame { cell.setText("
" + String.valueOf(map.getMapArray()[i][j]) + "
"); cell.setHorizontalTextPosition(JLabel.CENTER); } - else + else if (map.getMapArray()[i][j] != TypeOfCell.EMPTY) cell.setIcon(new ImageIcon(imagesOfTiles.get(map.getImageCell().getMapForeground()[i][j]).getScaledInstance(50, 50, Image.SCALE_DEFAULT))); + else cellSet.setOpaque(false); cell.setName(String.valueOf(map.getMapArray()[i][j])); cell.setBounds(i * 50, j * 50, 50, 50); int x = i; @@ -383,8 +429,13 @@ public class LevelEditor extends JFrame { tile.setText("
" + String.valueOf(map.getImageCell().getMapBackground()[i][j]) + "
"); tile.setHorizontalTextPosition(JLabel.CENTER); } - else + else { + if (map.getImageCell().getMapBackground()[i][j] > imagesOfTiles.size() || map.getImageCell().getMapBackground()[i][j] < 0) { + displayError("Inner Value out of bounds for current tileset was found on position " + i + ":" + j + " on Tile Layer. Defaulting to 0."); + map.getImageCell().getMapForeground()[i][j] = 0; + } tile.setIcon(new ImageIcon(imagesOfTiles.get(map.getImageCell().getMapBackground()[i][j]).getScaledInstance(50, 50, Image.SCALE_DEFAULT))); + } tile.setName(String.valueOf(map.getImageCell().getMapBackground()[i][j])); tile.setBounds(i * 50, j * 50, 50, 50); int x = i;