added basic error handling to level editor
This commit is contained in:
parent
51f7d55560
commit
46df561a70
@ -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<BufferedImage> 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("<html><div style='text-align: center; width: 1300; color: red'>One or more values is not an Integer.</div></html>");
|
||||
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("<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.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("<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
|
||||
}
|
||||
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("<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");
|
||||
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("<html><span style='color: red'>" + message + "</span></html>");
|
||||
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("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getMapArray()[i][j]) + "</div></html>");
|
||||
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("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getImageCell().getMapBackground()[i][j]) + "</div></html>");
|
||||
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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user