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.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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user