added basic error handling to level editor

This commit is contained in:
musilto9 2020-05-07 00:18:11 +02:00
parent 51f7d55560
commit 46df561a70

View File

@ -2,6 +2,7 @@ package ruscz.game.gameOfProd.LevelEditor;
import ruscz.game.gameOfProd.Cells.TypeOfCell; import ruscz.game.gameOfProd.Cells.TypeOfCell;
import ruscz.game.gameOfProd.Map.Map; import ruscz.game.gameOfProd.Map.Map;
import ruscz.game.gameOfProd.Windows.WindowOfFreeMove;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@ -16,6 +17,7 @@ public class LevelEditor extends JFrame {
private TilesetOverview overview; private TilesetOverview overview;
private JPanel menu; private JPanel menu;
private JPanel info; private JPanel info;
private JLabel errorMessage;
private LinkedList<BufferedImage> imagesOfTiles; private LinkedList<BufferedImage> imagesOfTiles;
private Map map; private Map map;
@ -53,9 +55,9 @@ public class LevelEditor extends JFrame {
JTextField heightVal = new JTextField(); JTextField heightVal = new JTextField();
heightVal.setBounds(600, 280, 100, 20); heightVal.setBounds(600, 280, 100, 20);
JLabel errorInt = new JLabel("<html><div style='text-align: center; width: 1300; color: red'>One or more values is not an Integer.</div></html>"); JLabel error = new JLabel();
errorInt.setBounds(0, 400, 1300, 20); error.setBounds(0, 400, 1300, 20);
errorInt.setVisible(false); error.setVisible(false);
JButton createNew = new JButton("CREATE NEW MAP"); JButton createNew = new JButton("CREATE NEW MAP");
createNew.setBounds(550, 330, 200, 50); createNew.setBounds(550, 330, 200, 50);
@ -66,6 +68,11 @@ public class LevelEditor extends JFrame {
String name = nameVal.getText(); String name = nameVal.getText();
int width = Integer.parseInt(widthVal.getText()); int width = Integer.parseInt(widthVal.getText());
int height = Integer.parseInt(heightVal.getText()); int height = Integer.parseInt(heightVal.getText());
if (height < 0 || height > WindowOfFreeMove.CANVAS_HEIGHT || width < 0 || width > WindowOfFreeMove.CANVAS_WIDTH) {
error.setText("<html><div style='text-align: center; width: 1300; color: red'>One or more values is out of bounds (from 0 to 50).</div></html>");
error.setVisible(true);
return;
}
menu.removeAll(); menu.removeAll();
menu.setVisible(false); menu.setVisible(false);
view.remove(menu); view.remove(menu);
@ -74,7 +81,8 @@ public class LevelEditor extends JFrame {
createNewMap(name, width, height); createNewMap(name, width, height);
} }
catch (NumberFormatException ex) { catch (NumberFormatException ex) {
errorInt.setVisible(true); error.setText("<html><div style='text-align: center; width: 1300; color: red'>One or more values (apart from Name) is not an Integer.</div></html>");
error.setVisible(true);
} }
} }
}); });
@ -94,7 +102,7 @@ public class LevelEditor extends JFrame {
//TODO: LevelEditor version of Map class //TODO: LevelEditor version of Map class
} }
catch (NumberFormatException ex) { catch (NumberFormatException ex) {
errorInt.setVisible(true); error.setVisible(true);
} }
}); });
@ -106,7 +114,7 @@ public class LevelEditor extends JFrame {
menu.add(heightNew); menu.add(heightNew);
menu.add(heightVal); menu.add(heightVal);
menu.add(createNew); menu.add(createNew);
menu.add(errorInt); menu.add(error);
// menu.add(titleEx); // menu.add(titleEx);
// menu.add(nameEx); // menu.add(nameEx);
// menu.add(nameExVal); // menu.add(nameExVal);
@ -160,7 +168,10 @@ public class LevelEditor extends JFrame {
openTilesets.setBounds(20, 70, 260, 30); openTilesets.setBounds(20, 70, 260, 30);
openTilesets.addActionListener(e -> { openTilesets.addActionListener(e -> {
if (overview == null) overview = new TilesetOverview(); if (overview == null) overview = new TilesetOverview();
else overview.setState(Frame.NORMAL); else {
overview.setState(Frame.NORMAL);
overview.toFront();
}
importTilesets.setVisible(true); importTilesets.setVisible(true);
}); });
@ -172,22 +183,19 @@ public class LevelEditor extends JFrame {
objectSet.setBounds(0, 0, width * 50, height * 50); objectSet.setBounds(0, 0, width * 50, height * 50);
objectSet.setLayout(null); objectSet.setLayout(null);
objectSet.setBackground(Color.RED); objectSet.setBackground(Color.RED);
objectSet.setOpaque(true);
cellSet = new JPanel(); cellSet = new JPanel();
cellSet.setBounds(0, 0, width * 50, height * 50); cellSet.setBounds(0, 0, width * 50, height * 50);
cellSet.setLayout(null); cellSet.setLayout(null);
cellSet.setBackground(Color.GREEN); cellSet.setBackground(Color.GREEN);
cellSet.setOpaque(true);
tileSet = new JPanel(); tileSet = new JPanel();
tileSet.setBounds(0, 0, width * 50, height * 50); tileSet.setBounds(0, 0, width * 50, height * 50);
tileSet.setLayout(null); tileSet.setLayout(null);
tileSet.setBackground(Color.BLUE); tileSet.setBackground(Color.BLUE);
tileSet.setOpaque(true);
JScrollPane mapViewer = new JScrollPane(mapLayers); JScrollPane mapViewer = new JScrollPane(mapLayers);
mapViewer.setBounds(300, 70, 950, 860); mapViewer.setBounds(300, 70, 950, 810);
mapViewer.setVisible(true); mapViewer.setVisible(true);
mapViewer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); mapViewer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
mapViewer.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); mapViewer.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
@ -201,7 +209,10 @@ public class LevelEditor extends JFrame {
objectBox.setSelected(true); objectBox.setSelected(true);
objectBox.addActionListener(actionEvent -> { objectBox.addActionListener(actionEvent -> {
if (objectSet.isVisible()) objectSet.setVisible(false); 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"); JLabel cellLabel = new JLabel("Physical (cell) Layer");
@ -224,6 +235,10 @@ public class LevelEditor extends JFrame {
else tileSet.setVisible(true); else tileSet.setVisible(true);
}); });
errorMessage = new JLabel();
errorMessage.setBounds(300, 900, 950, 30);
errorMessage.setVisible(false);
repaintSets(); repaintSets();
menu.add(title); menu.add(title);
@ -235,10 +250,11 @@ public class LevelEditor extends JFrame {
menu.add(tileBox); menu.add(tileBox);
menu.add(importTilesets); menu.add(importTilesets);
menu.add(openTilesets); 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(cellSet, JLayeredPane.MODAL_LAYER);
mapLayers.add(tileSet, JLayeredPane.MODAL_LAYER); mapLayers.add(tileSet, JLayeredPane.DEFAULT_LAYER);
view.add(mapViewer); view.add(mapViewer);
view.add(menu); view.add(menu);
@ -260,11 +276,11 @@ public class LevelEditor extends JFrame {
infoLabel.setIcon(label.getIcon()); infoLabel.setIcon(label.getIcon());
infoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); infoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
JLabel numValue = new JLabel("Number value:"); JLabel numValue = new JLabel("Inner Value:");
numValue.setBounds(70, 10, 100, 30); numValue.setBounds(90, 10, 100, 30);
JTextField tileNum = new JTextField(label.getName()); 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"); JButton importTile = new JButton("Import selected tile");
importTile.setVisible(false); importTile.setVisible(false);
@ -273,32 +289,49 @@ public class LevelEditor extends JFrame {
infoLabel.setIcon(overview.getInfo().getIcon()); infoLabel.setIcon(overview.getInfo().getIcon());
tileNum.setText(overview.getInfo().getText().replace("<html><span color='black'>", "").replace("</span></html>", "")); tileNum.setText(overview.getInfo().getText().replace("<html><span color='black'>", "").replace("</span></html>", ""));
} }
else overview.setState(Frame.NORMAL); else {
overview.setState(Frame.NORMAL);
overview.toFront();
}
}); });
JButton selectTile = new JButton("Select tile"); JButton selectTile = new JButton("Select tile");
selectTile.addActionListener(e -> { selectTile.addActionListener(e -> {
if (overview == null) overview = new TilesetOverview(); if (overview == null) overview = new TilesetOverview();
else overview.setState(Frame.NORMAL); else {
overview.setState(Frame.NORMAL);
overview.toFront();
}
importTile.setVisible(true); importTile.setVisible(true);
}); });
JButton saveInfo = new JButton("Save tile info"); 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")) { 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); info.add(infoLabel);
@ -310,6 +343,13 @@ public class LevelEditor extends JFrame {
view.add(info); view.add(info);
} }
private void displayError(String message) {
errorMessage.setText("<html><span style='color: red'>" + message + "</span></html>");
errorMessage.setVisible(true);
}
private void hideError() { errorMessage.setVisible(false); }
private void repaintSets() { private void repaintSets() {
repaintObjectset(); repaintObjectset();
repaintCellSet(); repaintCellSet();
@ -327,8 +367,13 @@ public class LevelEditor extends JFrame {
object.setHorizontalTextPosition(JLabel.CENTER); object.setHorizontalTextPosition(JLabel.CENTER);
} }
else if (map.getImageCell().getMapForeground()[i][j] != 0) { 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))); 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.setName(String.valueOf(map.getImageCell().getMapForeground()[i][j]));
object.setBounds(i * 50, j * 50, 50, 50); object.setBounds(i * 50, j * 50, 50, 50);
int x = i; int x = i;
@ -355,8 +400,9 @@ public class LevelEditor extends JFrame {
cell.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getMapArray()[i][j]) + "</div></html>"); cell.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getMapArray()[i][j]) + "</div></html>");
cell.setHorizontalTextPosition(JLabel.CENTER); 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))); 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.setName(String.valueOf(map.getMapArray()[i][j]));
cell.setBounds(i * 50, j * 50, 50, 50); cell.setBounds(i * 50, j * 50, 50, 50);
int x = i; int x = i;
@ -383,8 +429,13 @@ public class LevelEditor extends JFrame {
tile.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getImageCell().getMapBackground()[i][j]) + "</div></html>"); tile.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getImageCell().getMapBackground()[i][j]) + "</div></html>");
tile.setHorizontalTextPosition(JLabel.CENTER); 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.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.setName(String.valueOf(map.getImageCell().getMapBackground()[i][j]));
tile.setBounds(i * 50, j * 50, 50, 50); tile.setBounds(i * 50, j * 50, 50, 50);
int x = i; int x = i;