added CellMap config and CellSet info (bugged)
This commit is contained in:
parent
46df561a70
commit
5167562025
351
src/main/java/ruscz/game/gameOfProd/LevelEditor/InfoManager.java
Normal file
351
src/main/java/ruscz/game/gameOfProd/LevelEditor/InfoManager.java
Normal file
@ -0,0 +1,351 @@
|
||||
package ruscz.game.gameOfProd.LevelEditor;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.LinkedList;
|
||||
|
||||
public class InfoManager {
|
||||
|
||||
private LevelEditor editor;
|
||||
private JPanel info;
|
||||
private JScrollPane scrollInfo;
|
||||
private JLayeredPane view;
|
||||
|
||||
LinkedList<JRadioButton> radioButtons;
|
||||
|
||||
public InfoManager(LevelEditor editor) {
|
||||
this.editor = editor;
|
||||
this.view = editor.getView();
|
||||
}
|
||||
|
||||
protected void displayInfo(JLabel label, String layer, int x, int y) {
|
||||
if (info != null) {
|
||||
info.removeAll();
|
||||
view.remove(info);
|
||||
info = null;
|
||||
}
|
||||
if (scrollInfo != null) {
|
||||
scrollInfo.removeAll();
|
||||
view.remove(scrollInfo);
|
||||
scrollInfo = null;
|
||||
view.repaint();
|
||||
}
|
||||
info = new JPanel();
|
||||
info.setBounds(20, 200, 260, 730);
|
||||
info.setLayout(null);
|
||||
|
||||
switch (layer) {
|
||||
case "object":
|
||||
displayObjectInfo(label, x, y);
|
||||
break;
|
||||
case "cell":
|
||||
displayCellInfo(label, x, y);
|
||||
break;
|
||||
}
|
||||
|
||||
view.add(info);
|
||||
view.revalidate();
|
||||
}
|
||||
|
||||
private void displayObjectInfo(JLabel label, int x, int y) {
|
||||
JLabel infoLabel = new JLabel();
|
||||
infoLabel.setBounds(0, 0, 50, 50);
|
||||
infoLabel.setIcon(label.getIcon());
|
||||
infoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||
|
||||
JLabel numValue = new JLabel("Inner Value:");
|
||||
numValue.setBounds(90, 10, 100, 30);
|
||||
|
||||
JTextField tileNum = new JTextField(label.getName());
|
||||
tileNum.setBounds(170, 10, 50, 30);
|
||||
|
||||
JButton importTile = new JButton("Import selected tile");
|
||||
importTile.setVisible(false);
|
||||
importTile.setBounds(50, 150, 150, 30);
|
||||
importTile.addActionListener(e -> {
|
||||
if (!editor.getOverview().getInfo().getText().equals("")) {
|
||||
infoLabel.setIcon(editor.getOverview().getInfo().getIcon());
|
||||
tileNum.setText(editor.getOverview().getInfo().getText().replace("<html><span color='black'>", "").replace("</span></html>", ""));
|
||||
}
|
||||
else {
|
||||
editor.getOverview().setState(Frame.NORMAL);
|
||||
editor.getOverview().toFront();
|
||||
}
|
||||
});
|
||||
|
||||
JButton selectTile = new JButton("Select tile");
|
||||
selectTile.setBounds(50, 100, 150, 30);
|
||||
selectTile.addActionListener(e -> {
|
||||
if (editor.getOverview() == null) editor.setOverview(new TilesetOverview());
|
||||
else {
|
||||
editor.getOverview().setState(Frame.NORMAL);
|
||||
editor.getOverview().toFront();
|
||||
}
|
||||
importTile.setVisible(true);
|
||||
});
|
||||
|
||||
JButton saveInfo = new JButton("Save tile info");
|
||||
saveInfo.setBounds(50, 200, 150, 30);
|
||||
saveInfo.addActionListener(e -> {
|
||||
if (editor.getImagesOfTiles() != null) {
|
||||
if (Integer.parseInt(tileNum.getText()) > editor.getImagesOfTiles().size() || Integer.parseInt(tileNum.getText()) < 0) {
|
||||
editor.displayError("Inner value out of bounds. Value has to bee between 0 and " + (editor.getImagesOfTiles().size() - 1) + ".");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (Integer.parseInt(tileNum.getText()) < 0) {
|
||||
editor.displayError("Inner value out of bounds. Value has to bee higher than 0.");
|
||||
return;
|
||||
}
|
||||
editor.hideError();
|
||||
editor.getMap().getImageCell().getMapForeground()[x][y] = Integer.parseInt(tileNum.getText());
|
||||
editor.getMapLayers().repaintObjectset();
|
||||
info.removeAll();
|
||||
view.remove(info);
|
||||
view.revalidate();
|
||||
view.repaint();
|
||||
});
|
||||
|
||||
info.add(infoLabel);
|
||||
info.add(numValue);
|
||||
info.add(tileNum);
|
||||
info.add(selectTile);
|
||||
info.add(importTile);
|
||||
info.add(saveInfo);
|
||||
}
|
||||
|
||||
private void displayCellInfo(JLabel label, int x, int y) {
|
||||
String[] array = {"EMPTY", "BLOCK", "INTER", "TRIGGER", "MOVETO", "DOOR", "DOORTO", "CHEST"};
|
||||
radioButtons = new LinkedList<>();
|
||||
|
||||
JLabel infoLabel = new JLabel();
|
||||
infoLabel.setBounds(0, 0, 50, 50);
|
||||
infoLabel.setIcon(label.getIcon());
|
||||
infoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||
|
||||
JLabel valueLabel = new JLabel("Inner Value:");
|
||||
valueLabel.setBounds(90, 10, 100, 30);
|
||||
|
||||
JButton openCellMap = new JButton("Open CellMap Configuration");
|
||||
|
||||
JButton saveInfo = new JButton("Save tile info");
|
||||
|
||||
JComboBox cellType = new JComboBox(array);
|
||||
cellType.setBounds(170, 10, 90, 30);
|
||||
String[] cellname = label.getName().split(",");
|
||||
cellType.setSelectedItem(cellname[0]);
|
||||
cellType.addActionListener(e -> {
|
||||
if (editor.getImagesOfTiles() != null && editor.getImagesOfTiles().size() > 0) {
|
||||
String value;
|
||||
if (cellType.getSelectedItem().equals("DOOR") || cellType.getSelectedItem().equals("DOORTO")) value = "DOOR/DOORTO";
|
||||
else value = String.valueOf(cellType.getSelectedItem());
|
||||
infoLabel.setIcon(new ImageIcon(editor.getImagesOfTiles().get(editor.getCellMap().get(value)).getScaledInstance(50, 50, Image.SCALE_DEFAULT)));
|
||||
}
|
||||
displayDetailedCellInfo(String.valueOf(cellType.getSelectedItem()), openCellMap, saveInfo);
|
||||
info.requestFocus();
|
||||
info.revalidate();
|
||||
});
|
||||
|
||||
openCellMap.setBounds(30, 70, 200, 30);
|
||||
openCellMap.addActionListener(e -> {
|
||||
info.removeAll();
|
||||
info.revalidate();
|
||||
view.remove(info);
|
||||
view.revalidate();
|
||||
displayCellSetConfig();
|
||||
});
|
||||
|
||||
saveInfo.setBounds(50, 120, 150, 30);
|
||||
saveInfo.addActionListener(e -> {
|
||||
editor.getCellArray()[x][y] = String.valueOf(cellType.getSelectedItem());
|
||||
editor.getMapLayers().repaintCellSet();
|
||||
info.removeAll();
|
||||
info.revalidate();
|
||||
view.remove(info);
|
||||
view.revalidate();
|
||||
view.repaint();
|
||||
});
|
||||
|
||||
info.add(infoLabel);
|
||||
info.add(valueLabel);
|
||||
info.add(cellType);
|
||||
info.add(openCellMap);
|
||||
info.add(saveInfo);
|
||||
}
|
||||
|
||||
private void displayDetailedCellInfo(String type, JButton open, JButton save) {
|
||||
if (type.equals("BLOCK")) {
|
||||
upperLowerInfo(open, save);
|
||||
}
|
||||
}
|
||||
|
||||
private void upperLowerInfo(JButton open, JButton save) {
|
||||
JLabel label = new JLabel("<html><div style='text-align: center; width: 260'>Half Block</div></html>");
|
||||
label.setBounds(0, 120, 260, 20);
|
||||
|
||||
JRadioButton up = new JRadioButton("Upper");
|
||||
up.setBounds(0, 150, 70, 20);
|
||||
up.setName("up");
|
||||
radioButtons.add(up);
|
||||
|
||||
JRadioButton low = new JRadioButton("Lower");
|
||||
low.setBounds(100, 150, 70, 20);
|
||||
low.setName("low");
|
||||
radioButtons.add(low);
|
||||
|
||||
JRadioButton none = new JRadioButton("None");
|
||||
none.setBounds(200, 150, 70, 20);
|
||||
none.setSelected(true);
|
||||
none.setName("none");
|
||||
radioButtons.add(none);
|
||||
|
||||
ButtonGroup group = new ButtonGroup();
|
||||
group.add(up);
|
||||
group.add(low);
|
||||
group.add(none);
|
||||
|
||||
open.setLocation(open.getX(), open.getY() + 110);
|
||||
|
||||
save.setLocation(save.getX(), save.getY() + 110);
|
||||
|
||||
info.add(label);
|
||||
info.add(up);
|
||||
info.add(low);
|
||||
info.add(none);
|
||||
}
|
||||
|
||||
private void displayCellSetConfig() {
|
||||
int offset = 0;
|
||||
String[] array = {"BLOCK", "INTER", "TRIGGER", "MOVETO", "DOOR/DOORTO", "CHEST"}; //EMPTY is missing on purpose, DOOR & DOORTO are combined on purpose
|
||||
LinkedList<JTextField> numFields = new LinkedList<>();
|
||||
|
||||
JPanel infoPanel = new JPanel();
|
||||
infoPanel.setPreferredSize(new Dimension(250, array.length * 160 + 50));
|
||||
infoPanel.setLayout(null);
|
||||
|
||||
if (scrollInfo != null) {
|
||||
scrollInfo.removeAll();
|
||||
view.remove(scrollInfo);
|
||||
scrollInfo = null;
|
||||
}
|
||||
scrollInfo = new JScrollPane(infoPanel);
|
||||
scrollInfo.setBounds(20, 200, 270, 730);
|
||||
scrollInfo.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
|
||||
scrollInfo.setWheelScrollingEnabled(true);
|
||||
scrollInfo.getVerticalScrollBar().setUnitIncrement(10);
|
||||
|
||||
for (String name : array) {
|
||||
JLabel nameLabel = nameLabel(name, offset);
|
||||
JLabel iconLabel = iconLabel(name, offset);
|
||||
JLabel valueLabel = valueLabel(offset);
|
||||
JTextField numField = numField(name, offset);
|
||||
numFields.add(numField);
|
||||
JButton importButton = importButton(iconLabel, numField, offset);
|
||||
JButton selectButton = selectButton(importButton, offset);
|
||||
JLabel dividerLabel = dividerLabel(offset);
|
||||
|
||||
infoPanel.add(nameLabel);
|
||||
infoPanel.add(iconLabel);
|
||||
infoPanel.add(valueLabel);
|
||||
infoPanel.add(numField);
|
||||
infoPanel.add(importButton);
|
||||
infoPanel.add(selectButton);
|
||||
infoPanel.add(dividerLabel);
|
||||
|
||||
offset += 160;
|
||||
}
|
||||
|
||||
JButton saveInfo = new JButton("Save CellMap info");
|
||||
saveInfo.setBounds(50, offset, 150, 30);
|
||||
saveInfo.addActionListener(e -> {
|
||||
for (JTextField field : numFields) {
|
||||
try {
|
||||
editor.getCellMap().replace(field.getName(), Integer.parseInt(field.getText()));
|
||||
}
|
||||
catch (NumberFormatException ex) {
|
||||
editor.displayError("Inner Value for " + field.getName() + " is not an Integer.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
editor.hideError();
|
||||
editor.getMapLayers().repaintCellSet();
|
||||
scrollInfo.removeAll();
|
||||
scrollInfo.revalidate();
|
||||
view.remove(scrollInfo);
|
||||
view.revalidate();
|
||||
view.repaint();
|
||||
});
|
||||
|
||||
infoPanel.add(saveInfo);
|
||||
|
||||
scrollInfo.revalidate();
|
||||
scrollInfo.requestFocus();
|
||||
view.add(scrollInfo);
|
||||
}
|
||||
|
||||
private JLabel nameLabel(String name, int offset) {
|
||||
JLabel label = new JLabel("<html><div style='width: 250; text-align:center; font-size: 16'>" + name + "</div></html>");
|
||||
label.setBounds(0, offset, 250, 20);
|
||||
return label;
|
||||
}
|
||||
|
||||
private JLabel iconLabel(String name, int offset) {
|
||||
JLabel label = new JLabel();
|
||||
label.setBounds(0, offset + 40, 50, 50);
|
||||
if (editor.getImagesOfTiles() != null && editor.getImagesOfTiles().size() > 0)
|
||||
label.setIcon(new ImageIcon(editor.getImagesOfTiles().get(editor.getCellMap().get(name)).getScaledInstance(50, 50, Image.SCALE_DEFAULT)));
|
||||
label.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||
return label;
|
||||
}
|
||||
|
||||
private JLabel valueLabel(int offset) {
|
||||
JLabel label = new JLabel("Inner Value:");
|
||||
label.setBounds(80, offset + 40, 100, 30);
|
||||
return label;
|
||||
}
|
||||
|
||||
private JTextField numField(String name, int offset) {
|
||||
JTextField field = new JTextField(String.valueOf(editor.getCellMap().get(name)));
|
||||
field.setName(name);
|
||||
field.setBounds(160, offset + 40, 50, 30);
|
||||
return field;
|
||||
}
|
||||
|
||||
private JButton importButton(JLabel iconLabel, JTextField tileNum, int offset) {
|
||||
JButton button = new JButton("Import selected tile");
|
||||
button.setVisible(false);
|
||||
button.setBounds(100, offset + 100, 150, 30);
|
||||
button.addActionListener(e -> {
|
||||
if (!editor.getOverview().getInfo().getText().equals("")) {
|
||||
iconLabel.setIcon(editor.getOverview().getInfo().getIcon());
|
||||
tileNum.setText(editor.getOverview().getInfo().getText().replace("<html><span color='black'>", "").replace("</span></html>", ""));
|
||||
}
|
||||
else {
|
||||
editor.getOverview().setState(Frame.NORMAL);
|
||||
editor.getOverview().toFront();
|
||||
}
|
||||
});
|
||||
return button;
|
||||
}
|
||||
|
||||
private JButton selectButton(JButton importButton, int offset) {
|
||||
JButton button = new JButton("Select tile");
|
||||
button.setBounds(0, offset + 100, 90, 30);
|
||||
button.addActionListener(e -> {
|
||||
if (editor.getOverview() == null) editor.setOverview(new TilesetOverview());
|
||||
else {
|
||||
editor.getOverview().setState(Frame.NORMAL);
|
||||
editor.getOverview().toFront();
|
||||
}
|
||||
importButton.setVisible(true);
|
||||
});
|
||||
return button;
|
||||
}
|
||||
|
||||
private JLabel dividerLabel(int offset) {
|
||||
JLabel label = new JLabel();
|
||||
label.setBounds(0, offset + 140, 255, 1);
|
||||
label.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||
return label;
|
||||
}
|
||||
}
|
||||
@ -6,9 +6,11 @@ import ruscz.game.gameOfProd.Windows.WindowOfFreeMove;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
|
||||
public class LevelEditor extends JFrame {
|
||||
@ -16,18 +18,22 @@ public class LevelEditor extends JFrame {
|
||||
private JLayeredPane view;
|
||||
private TilesetOverview overview;
|
||||
private JPanel menu;
|
||||
private JPanel info;
|
||||
private JLabel errorMessage;
|
||||
|
||||
private LinkedList<BufferedImage> imagesOfTiles;
|
||||
private Map map;
|
||||
private int width;
|
||||
private int height;
|
||||
|
||||
private InfoManager infoManager;
|
||||
private MapLayersManager mapLayersManager;
|
||||
private JLayeredPane mapLayers;
|
||||
private JPanel objectSet;
|
||||
private JPanel cellSet;
|
||||
private JPanel tileSet;
|
||||
|
||||
private LinkedList<BufferedImage> imagesOfTiles;
|
||||
private HashMap<String, Integer> cellMap;
|
||||
private String[][] cellArray;
|
||||
private Map map;
|
||||
private int width;
|
||||
private int height;
|
||||
|
||||
public LevelEditor() {
|
||||
view = new JLayeredPane();
|
||||
view.setBounds(0, 0, 1300, 1000);
|
||||
@ -140,6 +146,10 @@ public class LevelEditor extends JFrame {
|
||||
this.map = map;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.cellArray = new String[width][height];
|
||||
for (int i = 0; i < width; i++) {
|
||||
Arrays.fill(cellArray[i], "EMPTY");
|
||||
}
|
||||
int[] size = {width, height};
|
||||
map.setCanvasSize(size);
|
||||
map.getImageCell().readMapFile();
|
||||
@ -161,7 +171,7 @@ public class LevelEditor extends JFrame {
|
||||
importTilesets.setVisible(false);
|
||||
importTilesets.addActionListener(e -> {
|
||||
imagesOfTiles = overview.getImagesOfTiles();
|
||||
repaintSets();
|
||||
mapLayersManager.repaintSets();
|
||||
});
|
||||
|
||||
JButton openTilesets = new JButton("Open Tileset Overview");
|
||||
@ -175,24 +185,15 @@ public class LevelEditor extends JFrame {
|
||||
importTilesets.setVisible(true);
|
||||
});
|
||||
|
||||
JLayeredPane mapLayers = new JLayeredPane();
|
||||
mapLayers.setPreferredSize(new Dimension(width * 50, height * 50));
|
||||
mapLayers.setLayout(null);
|
||||
mapLayersManager = new MapLayersManager(this);
|
||||
mapLayers = mapLayersManager.getMapLayers();
|
||||
objectSet = mapLayersManager.getObjectSet();
|
||||
cellSet = mapLayersManager.getCellSet();
|
||||
tileSet = mapLayersManager.getTileSet();
|
||||
cellMap = new HashMap<>();
|
||||
initializeCellMap();
|
||||
|
||||
objectSet = new JPanel();
|
||||
objectSet.setBounds(0, 0, width * 50, height * 50);
|
||||
objectSet.setLayout(null);
|
||||
objectSet.setBackground(Color.RED);
|
||||
|
||||
cellSet = new JPanel();
|
||||
cellSet.setBounds(0, 0, width * 50, height * 50);
|
||||
cellSet.setLayout(null);
|
||||
cellSet.setBackground(Color.GREEN);
|
||||
|
||||
tileSet = new JPanel();
|
||||
tileSet.setBounds(0, 0, width * 50, height * 50);
|
||||
tileSet.setLayout(null);
|
||||
tileSet.setBackground(Color.BLUE);
|
||||
infoManager = new InfoManager(this);
|
||||
|
||||
JScrollPane mapViewer = new JScrollPane(mapLayers);
|
||||
mapViewer.setBounds(300, 70, 950, 810);
|
||||
@ -210,7 +211,6 @@ public class LevelEditor extends JFrame {
|
||||
objectBox.addActionListener(actionEvent -> {
|
||||
if (objectSet.isVisible()) objectSet.setVisible(false);
|
||||
else {
|
||||
objectSet.setBackground(new Color(0, 0, 0, 0));
|
||||
objectSet.setVisible(true);
|
||||
}
|
||||
});
|
||||
@ -239,7 +239,7 @@ public class LevelEditor extends JFrame {
|
||||
errorMessage.setBounds(300, 900, 950, 30);
|
||||
errorMessage.setVisible(false);
|
||||
|
||||
repaintSets();
|
||||
mapLayersManager.repaintSets();
|
||||
|
||||
menu.add(title);
|
||||
menu.add(objectLabel);
|
||||
@ -252,203 +252,64 @@ public class LevelEditor extends JFrame {
|
||||
menu.add(openTilesets);
|
||||
menu.add(errorMessage);
|
||||
|
||||
mapLayers.add(objectSet, JLayeredPane.POPUP_LAYER);
|
||||
mapLayers.add(cellSet, JLayeredPane.MODAL_LAYER);
|
||||
mapLayers.add(tileSet, JLayeredPane.DEFAULT_LAYER);
|
||||
|
||||
view.add(mapViewer);
|
||||
view.add(menu);
|
||||
view.repaint();
|
||||
}
|
||||
|
||||
private void displayInfo(JLabel label, String layer, int x, int y) {
|
||||
if (info != null) {
|
||||
info.removeAll();
|
||||
view.remove(info);
|
||||
info = null;
|
||||
}
|
||||
info = new JPanel();
|
||||
info.setBounds(20, 200, 260, 730);
|
||||
info.setLayout(null);
|
||||
|
||||
JLabel infoLabel = new JLabel();
|
||||
infoLabel.setBounds(0, 0, 50, 50);
|
||||
infoLabel.setIcon(label.getIcon());
|
||||
infoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||
|
||||
JLabel numValue = new JLabel("Inner Value:");
|
||||
numValue.setBounds(90, 10, 100, 30);
|
||||
|
||||
JTextField tileNum = new JTextField(label.getName());
|
||||
tileNum.setBounds(170, 10, 90, 30);
|
||||
|
||||
JButton importTile = new JButton("Import selected tile");
|
||||
importTile.setVisible(false);
|
||||
importTile.addActionListener(e -> {
|
||||
if (!overview.getInfo().getText().equals("")) {
|
||||
infoLabel.setIcon(overview.getInfo().getIcon());
|
||||
tileNum.setText(overview.getInfo().getText().replace("<html><span color='black'>", "").replace("</span></html>", ""));
|
||||
}
|
||||
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);
|
||||
overview.toFront();
|
||||
}
|
||||
importTile.setVisible(true);
|
||||
});
|
||||
|
||||
JButton saveInfo = new JButton("Save tile info");
|
||||
|
||||
if (layer.equals("object")) {
|
||||
selectTile.setBounds(50, 100, 150, 30);
|
||||
|
||||
importTile.setBounds(50, 150, 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();
|
||||
});
|
||||
private void initializeCellMap() {
|
||||
cellMap.put("BLOCK", 0);
|
||||
cellMap.put("INTER", 0);
|
||||
cellMap.put("TRIGGER", 0);
|
||||
cellMap.put("MOVETO", 0);
|
||||
cellMap.put("DOOR/DOORTO", 0);
|
||||
cellMap.put("CHEST", 0);
|
||||
}
|
||||
|
||||
info.add(infoLabel);
|
||||
info.add(numValue);
|
||||
info.add(tileNum);
|
||||
info.add(selectTile);
|
||||
info.add(importTile);
|
||||
info.add(saveInfo);
|
||||
view.add(info);
|
||||
}
|
||||
|
||||
private void displayError(String message) {
|
||||
protected void displayError(String message) {
|
||||
errorMessage.setText("<html><span style='color: red'>" + message + "</span></html>");
|
||||
errorMessage.setVisible(true);
|
||||
}
|
||||
|
||||
private void hideError() { errorMessage.setVisible(false); }
|
||||
protected void hideError() { errorMessage.setVisible(false); }
|
||||
|
||||
private void repaintSets() {
|
||||
repaintObjectset();
|
||||
repaintCellSet();
|
||||
repaintTileset();
|
||||
public JLayeredPane getView() {
|
||||
return view;
|
||||
}
|
||||
|
||||
private void repaintObjectset() {
|
||||
objectSet.removeAll();
|
||||
|
||||
for (int i = 0; i < width; i++) {
|
||||
for (int j = 0; j < height; j++) {
|
||||
JLabel object = new JLabel();
|
||||
if (imagesOfTiles == null) {
|
||||
object.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getImageCell().getMapForeground()[i][j]) + "</div></html>");
|
||||
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;
|
||||
int y = j;
|
||||
object.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
displayInfo(object, "object", x, y);
|
||||
}
|
||||
});
|
||||
objectSet.add(object);
|
||||
}
|
||||
}
|
||||
view.repaint();
|
||||
public TilesetOverview getOverview() {
|
||||
return overview;
|
||||
}
|
||||
|
||||
private void repaintCellSet() {
|
||||
cellSet.removeAll();
|
||||
|
||||
for (int i = 0; i < width; i++) {
|
||||
for (int j = 0; j < height; j++) {
|
||||
JLabel cell = new JLabel();
|
||||
if (imagesOfTiles == null) {
|
||||
cell.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getMapArray()[i][j]) + "</div></html>");
|
||||
cell.setHorizontalTextPosition(JLabel.CENTER);
|
||||
}
|
||||
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;
|
||||
int y = j;
|
||||
cell.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
displayInfo(cell, "cell", x, y);
|
||||
}
|
||||
});
|
||||
cellSet.add(cell);
|
||||
}
|
||||
}
|
||||
view.repaint();
|
||||
public Map getMap() {
|
||||
return map;
|
||||
}
|
||||
|
||||
public void repaintTileset() {
|
||||
tileSet.removeAll();
|
||||
public int getMapWidth() {
|
||||
return width;
|
||||
}
|
||||
|
||||
for (int i = 0; i < width; i++) {
|
||||
for (int j = 0; j < height; j++) {
|
||||
JLabel tile = new JLabel();
|
||||
if (imagesOfTiles == null) {
|
||||
tile.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getImageCell().getMapBackground()[i][j]) + "</div></html>");
|
||||
tile.setHorizontalTextPosition(JLabel.CENTER);
|
||||
public int getMapHeight() {
|
||||
return height;
|
||||
}
|
||||
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;
|
||||
|
||||
public LinkedList<BufferedImage> getImagesOfTiles() {
|
||||
return imagesOfTiles;
|
||||
}
|
||||
tile.setIcon(new ImageIcon(imagesOfTiles.get(map.getImageCell().getMapBackground()[i][j]).getScaledInstance(50, 50, Image.SCALE_DEFAULT)));
|
||||
|
||||
public InfoManager getInfoManager() {
|
||||
return infoManager;
|
||||
}
|
||||
tile.setName(String.valueOf(map.getImageCell().getMapBackground()[i][j]));
|
||||
tile.setBounds(i * 50, j * 50, 50, 50);
|
||||
int x = i;
|
||||
int y = j;
|
||||
tile.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
displayInfo(tile, "tile", x, y);
|
||||
|
||||
public MapLayersManager getMapLayers() {
|
||||
return mapLayersManager;
|
||||
}
|
||||
});
|
||||
tileSet.add(tile);
|
||||
}
|
||||
}
|
||||
view.repaint();
|
||||
|
||||
public HashMap<String, Integer> getCellMap() { return cellMap; }
|
||||
|
||||
public String[][] getCellArray() { return cellArray; }
|
||||
|
||||
public void setOverview(TilesetOverview overview) {
|
||||
this.overview = overview;
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,187 @@
|
||||
package ruscz.game.gameOfProd.LevelEditor;
|
||||
|
||||
import ruscz.game.gameOfProd.Map.Map;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.LinkedList;
|
||||
|
||||
public class MapLayersManager {
|
||||
|
||||
private LevelEditor editor;
|
||||
private JLayeredPane view;
|
||||
private Map map;
|
||||
private LinkedList<BufferedImage> imagesOfTiles;
|
||||
|
||||
private JLayeredPane mapLayers;
|
||||
private JPanel objectSet;
|
||||
private JPanel cellSet;
|
||||
private JPanel tileSet;
|
||||
|
||||
private int width;
|
||||
private int height;
|
||||
|
||||
public MapLayersManager(LevelEditor editor) {
|
||||
this.editor = editor;
|
||||
view = editor.getView();
|
||||
map = editor.getMap();
|
||||
imagesOfTiles = editor.getImagesOfTiles();
|
||||
width = editor.getMapWidth();
|
||||
height = editor.getMapHeight();
|
||||
|
||||
mapLayers = new JLayeredPane();
|
||||
mapLayers.setPreferredSize(new Dimension(width * 50, height * 50));
|
||||
mapLayers.setLayout(null);
|
||||
|
||||
objectSet = new JPanel();
|
||||
objectSet.setBounds(0, 0, width * 50, height * 50);
|
||||
objectSet.setLayout(null);
|
||||
objectSet.setBackground(Color.RED);
|
||||
|
||||
cellSet = new JPanel();
|
||||
cellSet.setBounds(0, 0, width * 50, height * 50);
|
||||
cellSet.setLayout(null);
|
||||
cellSet.setBackground(Color.GREEN);
|
||||
|
||||
tileSet = new JPanel();
|
||||
tileSet.setBounds(0, 0, width * 50, height * 50);
|
||||
tileSet.setLayout(null);
|
||||
tileSet.setBackground(Color.BLUE);
|
||||
|
||||
mapLayers.add(objectSet, JLayeredPane.POPUP_LAYER);
|
||||
mapLayers.add(cellSet, JLayeredPane.MODAL_LAYER);
|
||||
mapLayers.add(tileSet, JLayeredPane.DEFAULT_LAYER);
|
||||
}
|
||||
|
||||
protected void repaintSets() {
|
||||
imagesOfTiles = editor.getImagesOfTiles();
|
||||
repaintObjectset();
|
||||
repaintCellSet();
|
||||
repaintTileset();
|
||||
}
|
||||
|
||||
protected void repaintObjectset() {
|
||||
objectSet.removeAll();
|
||||
|
||||
for (int i = 0; i < width; i++) {
|
||||
for (int j = 0; j < height; j++) {
|
||||
JLabel object = new JLabel();
|
||||
if (imagesOfTiles == null || imagesOfTiles.size() == 0) {
|
||||
object.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getImageCell().getMapForeground()[i][j]) + "</div></html>");
|
||||
object.setHorizontalTextPosition(JLabel.CENTER);
|
||||
objectSet.setOpaque(true);
|
||||
objectSet.setBackground(Color.RED);
|
||||
}
|
||||
else if (map.getImageCell().getMapForeground()[i][j] != 0) {
|
||||
if (map.getImageCell().getMapForeground()[i][j] > imagesOfTiles.size() || map.getImageCell().getMapForeground()[i][j] < 0) {
|
||||
editor.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;
|
||||
int y = j;
|
||||
object.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
editor.getInfoManager().displayInfo(object, "object", x, y);
|
||||
}
|
||||
});
|
||||
objectSet.add(object);
|
||||
}
|
||||
}
|
||||
view.repaint();
|
||||
}
|
||||
|
||||
protected void repaintCellSet() {
|
||||
cellSet.removeAll();
|
||||
|
||||
for (int i = 0; i < width; i++) {
|
||||
for (int j = 0; j < height; j++) {
|
||||
JLabel cell = new JLabel();
|
||||
if (imagesOfTiles == null || imagesOfTiles.size() == 0) {
|
||||
cell.setText("<html><div style='text-align: center; width: 50'>" + editor.getCellArray()[i][j] + "</div></html>");
|
||||
cell.setHorizontalTextPosition(JLabel.CENTER);
|
||||
cellSet.setOpaque(true);
|
||||
cellSet.setBackground(Color.GREEN);
|
||||
}
|
||||
else if (!editor.getCellArray()[i][j].equals("EMPTY")) {
|
||||
String value;
|
||||
if (editor.getCellArray()[i][j].equals("DOOR") || editor.getCellArray()[i][j].equals("DOORTO")) value = "DOOR/DOORTO";
|
||||
else value = editor.getCellArray()[i][j];
|
||||
cell.setIcon(new ImageIcon(imagesOfTiles.get(editor.getCellMap().get(value)).getScaledInstance(50, 50, Image.SCALE_DEFAULT)));
|
||||
}
|
||||
else cellSet.setOpaque(false);
|
||||
cell.setName(String.valueOf(editor.getCellArray()[i][j]));
|
||||
cell.setBounds(i * 50, j * 50, 50, 50);
|
||||
int x = i;
|
||||
int y = j;
|
||||
cell.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
editor.getInfoManager().displayInfo(cell, "cell", x, y);
|
||||
}
|
||||
});
|
||||
cellSet.add(cell);
|
||||
}
|
||||
}
|
||||
view.repaint();
|
||||
}
|
||||
|
||||
protected void repaintTileset() {
|
||||
tileSet.removeAll();
|
||||
|
||||
for (int i = 0; i < width; i++) {
|
||||
for (int j = 0; j < height; j++) {
|
||||
JLabel tile = new JLabel();
|
||||
if (imagesOfTiles == null || imagesOfTiles.size() == 0) {
|
||||
tile.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getImageCell().getMapBackground()[i][j]) + "</div></html>");
|
||||
tile.setHorizontalTextPosition(JLabel.CENTER);
|
||||
tileSet.setOpaque(true);
|
||||
tileSet.setBackground(Color.BLUE);
|
||||
}
|
||||
else {
|
||||
if (map.getImageCell().getMapBackground()[i][j] > imagesOfTiles.size() || map.getImageCell().getMapBackground()[i][j] < 0) {
|
||||
editor.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;
|
||||
int y = j;
|
||||
tile.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
editor.getInfoManager().displayInfo(tile, "tile", x, y);
|
||||
}
|
||||
});
|
||||
tileSet.add(tile);
|
||||
}
|
||||
}
|
||||
view.repaint();
|
||||
}
|
||||
|
||||
public JLayeredPane getMapLayers() {
|
||||
return mapLayers;
|
||||
}
|
||||
|
||||
public JPanel getObjectSet() {
|
||||
return objectSet;
|
||||
}
|
||||
|
||||
public JPanel getCellSet() {
|
||||
return cellSet;
|
||||
}
|
||||
|
||||
public JPanel getTileSet() {
|
||||
return tileSet;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user