improved added importing to level editor
This commit is contained in:
parent
8f4fcf23de
commit
51f7d55560
@ -6,7 +6,6 @@ public class EditorManager {
|
||||
private LevelEditor editor;
|
||||
|
||||
public EditorManager() {
|
||||
overview = new TilesetOverview();
|
||||
editor = new LevelEditor();
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,49 +5,60 @@ import ruscz.game.gameOfProd.Map.Map;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
|
||||
public class LevelEditor extends JFrame {
|
||||
|
||||
private JLayeredPane view;
|
||||
private TilesetOverview overview;
|
||||
private JPanel menu;
|
||||
private JPanel info;
|
||||
|
||||
private LinkedList<BufferedImage> imagesOfTiles;
|
||||
private Map map;
|
||||
private int width;
|
||||
private int height;
|
||||
|
||||
private JPanel objectSet;
|
||||
private JPanel cellSet;
|
||||
private JPanel tileSet;
|
||||
|
||||
public LevelEditor() {
|
||||
view = new JLayeredPane();
|
||||
view.setBounds(0, 0, 1200, 1000);
|
||||
view.setBounds(0, 0, 1300, 1000);
|
||||
view.setLayout(null);
|
||||
view.setVisible(true);
|
||||
|
||||
JPanel menu = new JPanel();
|
||||
menu.setBounds(0, 0, 1200, 1000);
|
||||
menu = new JPanel();
|
||||
menu.setBounds(0, 0, 1300, 1000);
|
||||
menu.setLayout(null);
|
||||
menu.setVisible(true);
|
||||
|
||||
JLabel titleNew = new JLabel("<html><div style='text-align: center; width: 1200; font-size: 20'>CREATE NEW MAP</div></html>");
|
||||
titleNew.setBounds(0, 50, 1200, 50);
|
||||
JLabel titleNew = new JLabel("<html><div style='text-align: center; width: 1300; font-size: 20'>CREATE NEW MAP</div></html>");
|
||||
titleNew.setBounds(0, 50, 1300, 50);
|
||||
|
||||
JLabel nameNew = new JLabel("<html><div style='text-align: center; width: 1200;'>Name of new map</div></html>");
|
||||
nameNew.setBounds(0, 120, 1200, 20);
|
||||
JLabel nameNew = new JLabel("<html><div style='text-align: center; width: 1300;'>Name of new map</div></html>");
|
||||
nameNew.setBounds(0, 120, 1300, 20);
|
||||
JTextField nameVal = new JTextField();
|
||||
nameVal.setBounds(550, 140, 100, 20);
|
||||
nameVal.setBounds(600, 140, 100, 20);
|
||||
|
||||
JLabel widthNew = new JLabel("<html><div style='text-align: center; width: 1200;'>Width of new map (in cells)</div></html>");
|
||||
widthNew.setBounds(0, 190, 1200, 20);
|
||||
JLabel widthNew = new JLabel("<html><div style='text-align: center; width: 1300;'>Width of new map (in cells)</div></html>");
|
||||
widthNew.setBounds(0, 190, 1300, 20);
|
||||
JTextField widthVal = new JTextField();
|
||||
widthVal.setBounds(550, 210, 100, 20);
|
||||
widthVal.setBounds(600, 210, 100, 20);
|
||||
|
||||
JLabel heightNew = new JLabel("<html><div style='text-align: center; width: 1200;'>Height of new map (in cells)</div></html>");
|
||||
heightNew.setBounds(0, 260, 1200, 20);
|
||||
JLabel heightNew = new JLabel("<html><div style='text-align: center; width: 1300;'>Height of new map (in cells)</div></html>");
|
||||
heightNew.setBounds(0, 260, 1300, 20);
|
||||
JTextField heightVal = new JTextField();
|
||||
heightVal.setBounds(550, 280, 100, 20);
|
||||
heightVal.setBounds(600, 280, 100, 20);
|
||||
|
||||
JLabel errorInt = new JLabel("<html><div style='text-align: center; width: 1200; color: red'>One or more values is not an Integer.</div></html>");
|
||||
errorInt.setBounds(0, 400, 1200, 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);
|
||||
|
||||
JButton createNew = new JButton("CREATE NEW MAP");
|
||||
createNew.setBounds(500, 330, 200, 50);
|
||||
createNew.setBounds(550, 330, 200, 50);
|
||||
createNew.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@ -68,25 +79,22 @@ public class LevelEditor extends JFrame {
|
||||
}
|
||||
});
|
||||
|
||||
JLabel titleEx = new JLabel("<html><div style='text-align: center; width: 1200; font-size: 20'>EDIT EXISTING MAP</div></html>");
|
||||
titleEx.setBounds(0, 500, 1200, 50);
|
||||
JLabel titleEx = new JLabel("<html><div style='text-align: center; width: 1230; font-size: 20'>EDIT EXISTING MAP</div></html>");
|
||||
titleEx.setBounds(0, 500, 1300, 50);
|
||||
|
||||
JLabel nameEx = new JLabel("<html><div style='text-align: center; width: 1200;'>Name of map</div></html>");
|
||||
nameEx.setBounds(0, 570, 1200, 20);
|
||||
JLabel nameEx = new JLabel("<html><div style='text-align: center; width: 1230;'>Name of map</div></html>");
|
||||
nameEx.setBounds(0, 570, 1300, 20);
|
||||
JTextField nameExVal = new JTextField();
|
||||
nameExVal.setBounds(550, 590, 100, 20);
|
||||
|
||||
JButton editEx = new JButton("EDIT EXISTING MAP");
|
||||
editEx.setBounds(500, 640, 200, 50);
|
||||
editEx.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
try {
|
||||
//TODO: LevelEditor version of Map class
|
||||
}
|
||||
catch (NumberFormatException ex) {
|
||||
errorInt.setVisible(true);
|
||||
}
|
||||
editEx.addActionListener(e -> {
|
||||
try {
|
||||
//TODO: LevelEditor version of Map class
|
||||
}
|
||||
catch (NumberFormatException ex) {
|
||||
errorInt.setVisible(true);
|
||||
}
|
||||
});
|
||||
|
||||
@ -99,15 +107,15 @@ public class LevelEditor extends JFrame {
|
||||
menu.add(heightVal);
|
||||
menu.add(createNew);
|
||||
menu.add(errorInt);
|
||||
menu.add(titleEx);
|
||||
menu.add(nameEx);
|
||||
menu.add(nameExVal);
|
||||
menu.add(editEx);
|
||||
// menu.add(titleEx);
|
||||
// menu.add(nameEx);
|
||||
// menu.add(nameExVal);
|
||||
// menu.add(editEx);
|
||||
view.add(menu);
|
||||
add(view);
|
||||
|
||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||
setBounds(0, 0, 1200, 1000);
|
||||
setBounds(0, 0, 1300, 1000);
|
||||
setLocationRelativeTo(null);
|
||||
setLayout(null);
|
||||
setVisible(true);
|
||||
@ -116,52 +124,70 @@ public class LevelEditor extends JFrame {
|
||||
|
||||
private void createNewMap(String name, int width, int height) {
|
||||
TypeOfCell[][] mapArray = new TypeOfCell[width][height];
|
||||
for (int i = 0; i < height; i++) {
|
||||
for (int i = 0; i < width; i++) {
|
||||
Arrays.fill(mapArray[i], TypeOfCell.EMPTY);
|
||||
}
|
||||
Map map = new Map(mapArray);
|
||||
map.setName(name);
|
||||
this.map = map;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
int[] size = {width, height};
|
||||
map.setCanvasSize(size);
|
||||
map.getImageCell().readMapFile();
|
||||
startMapEditor(map, width, height);
|
||||
startMapEditor();
|
||||
}
|
||||
|
||||
private void startMapEditor(Map map, int width, int height) {
|
||||
private void startMapEditor() {
|
||||
|
||||
JPanel menu = new JPanel();
|
||||
menu.setBounds(0, 0, 1200, 1000);
|
||||
menu.setBounds(0, 0, 1300, 1000);
|
||||
menu.setLayout(null);
|
||||
menu.setVisible(true);
|
||||
|
||||
JLabel title = new JLabel("<html><div style='font-size: 20'>Currently editing: " + map.getName() + "</div></html>");
|
||||
title.setBounds(20, 10, 400, 50);
|
||||
|
||||
JButton importTilesets = new JButton("Import Tilesets");
|
||||
importTilesets.setBounds(20, 120, 260, 30);
|
||||
importTilesets.setVisible(false);
|
||||
importTilesets.addActionListener(e -> {
|
||||
imagesOfTiles = overview.getImagesOfTiles();
|
||||
repaintSets();
|
||||
});
|
||||
|
||||
JButton openTilesets = new JButton("Open Tileset Overview");
|
||||
openTilesets.setBounds(20, 70, 260, 30);
|
||||
openTilesets.addActionListener(e -> {
|
||||
if (overview == null) overview = new TilesetOverview();
|
||||
else overview.setState(Frame.NORMAL);
|
||||
importTilesets.setVisible(true);
|
||||
});
|
||||
|
||||
JLayeredPane mapLayers = new JLayeredPane();
|
||||
mapLayers.setPreferredSize(new Dimension(width * 50, height * 50));
|
||||
mapLayers.setLayout(null);
|
||||
mapLayers.setVisible(true);
|
||||
|
||||
JPanel objectSet = new JPanel();
|
||||
objectSet = new JPanel();
|
||||
objectSet.setBounds(0, 0, width * 50, height * 50);
|
||||
objectSet.setLayout(null);
|
||||
objectSet.setVisible(true);
|
||||
objectSet.setBackground(Color.RED);
|
||||
objectSet.setOpaque(true);
|
||||
|
||||
JPanel cellSet = new JPanel();
|
||||
cellSet = new JPanel();
|
||||
cellSet.setBounds(0, 0, width * 50, height * 50);
|
||||
cellSet.setLayout(null);
|
||||
cellSet.setVisible(true);
|
||||
cellSet.setBackground(Color.GREEN);
|
||||
cellSet.setOpaque(true);
|
||||
|
||||
JPanel tileSet = new JPanel();
|
||||
tileSet = new JPanel();
|
||||
tileSet.setBounds(0, 0, width * 50, height * 50);
|
||||
tileSet.setLayout(null);
|
||||
tileSet.setVisible(true);
|
||||
tileSet.setBackground(Color.BLUE);
|
||||
tileSet.setOpaque(true);
|
||||
|
||||
JScrollPane mapViewer = new JScrollPane(mapLayers);
|
||||
mapViewer.setBounds(200, 70, 950, 860);
|
||||
mapViewer.setBounds(300, 70, 950, 860);
|
||||
mapViewer.setVisible(true);
|
||||
mapViewer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
|
||||
mapViewer.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
@ -177,14 +203,6 @@ public class LevelEditor extends JFrame {
|
||||
if (objectSet.isVisible()) objectSet.setVisible(false);
|
||||
else objectSet.setVisible(true);
|
||||
});
|
||||
for (int i = 0; i < width; i++) {
|
||||
for (int j = 0; j < height; j++) {
|
||||
JLabel object = new JLabel(String.valueOf(map.getImageCell().getMapForeground()[i][j]), JLabel.CENTER);
|
||||
object.setHorizontalTextPosition(JLabel.CENTER);
|
||||
object.setBounds(i * 50, j * 50, 50, 50);
|
||||
objectSet.add(object);
|
||||
}
|
||||
}
|
||||
|
||||
JLabel cellLabel = new JLabel("Physical (cell) Layer");
|
||||
cellLabel.setBounds( 700, 30, 150, 20);
|
||||
@ -195,14 +213,6 @@ public class LevelEditor extends JFrame {
|
||||
if (cellSet.isVisible()) cellSet.setVisible(false);
|
||||
else cellSet.setVisible(true);
|
||||
});
|
||||
for (int i = 0; i < width; i++) {
|
||||
for (int j = 0; j < height; j++) {
|
||||
JLabel cell = new JLabel(String.valueOf(map.getMapArray()[i][j]), JLabel.CENTER);
|
||||
cell.setHorizontalTextPosition(JLabel.CENTER);
|
||||
cell.setBounds(i * 50, j * 50, 50, 50);
|
||||
cellSet.add(cell);
|
||||
}
|
||||
}
|
||||
|
||||
JLabel tileLabel = new JLabel("Tile Layer");
|
||||
tileLabel.setBounds( 950, 30, 100, 20);
|
||||
@ -213,14 +223,8 @@ public class LevelEditor extends JFrame {
|
||||
if (tileSet.isVisible()) tileSet.setVisible(false);
|
||||
else tileSet.setVisible(true);
|
||||
});
|
||||
for (int i = 0; i < width; i++) {
|
||||
for (int j = 0; j < height; j++) {
|
||||
JLabel tile = new JLabel(String.valueOf(map.getImageCell().getMapBackground()[i][j]), JLabel.CENTER);
|
||||
tile.setHorizontalTextPosition(JLabel.CENTER);
|
||||
tile.setBounds(i * 50, j * 50, 50, 50);
|
||||
tileSet.add(tile);
|
||||
}
|
||||
}
|
||||
|
||||
repaintSets();
|
||||
|
||||
menu.add(title);
|
||||
menu.add(objectLabel);
|
||||
@ -229,11 +233,171 @@ public class LevelEditor extends JFrame {
|
||||
menu.add(cellBox);
|
||||
menu.add(tileLabel);
|
||||
menu.add(tileBox);
|
||||
mapLayers.add(objectSet);
|
||||
mapLayers.add(cellSet);
|
||||
mapLayers.add(tileSet);
|
||||
menu.add(importTilesets);
|
||||
menu.add(openTilesets);
|
||||
|
||||
mapLayers.add(objectSet, JLayeredPane.MODAL_LAYER);
|
||||
mapLayers.add(cellSet, JLayeredPane.MODAL_LAYER);
|
||||
mapLayers.add(tileSet, JLayeredPane.MODAL_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("Number value:");
|
||||
numValue.setBounds(70, 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.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);
|
||||
});
|
||||
|
||||
JButton selectTile = new JButton("Select tile");
|
||||
selectTile.addActionListener(e -> {
|
||||
if (overview == null) overview = new TilesetOverview();
|
||||
else overview.setState(Frame.NORMAL);
|
||||
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);
|
||||
|
||||
importTile.setBounds(20, 150, 150, 30);
|
||||
|
||||
saveInfo.setBounds(20, 200, 150, 30);
|
||||
}
|
||||
|
||||
info.add(infoLabel);
|
||||
info.add(numValue);
|
||||
info.add(tileNum);
|
||||
info.add(selectTile);
|
||||
info.add(importTile);
|
||||
info.add(saveInfo);
|
||||
view.add(info);
|
||||
}
|
||||
|
||||
private void repaintSets() {
|
||||
repaintObjectset();
|
||||
repaintCellSet();
|
||||
repaintTileset();
|
||||
}
|
||||
|
||||
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) {
|
||||
object.setIcon(new ImageIcon(imagesOfTiles.get(map.getImageCell().getMapForeground()[i][j]).getScaledInstance(50, 50, Image.SCALE_DEFAULT)));
|
||||
}
|
||||
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();
|
||||
}
|
||||
|
||||
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
|
||||
cell.setIcon(new ImageIcon(imagesOfTiles.get(map.getImageCell().getMapForeground()[i][j]).getScaledInstance(50, 50, Image.SCALE_DEFAULT)));
|
||||
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 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) {
|
||||
tile.setText("<html><div style='text-align: center; width: 50'>" + String.valueOf(map.getImageCell().getMapBackground()[i][j]) + "</div></html>");
|
||||
tile.setHorizontalTextPosition(JLabel.CENTER);
|
||||
}
|
||||
else
|
||||
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) {
|
||||
displayInfo(tile, "tile", x, y);
|
||||
}
|
||||
});
|
||||
tileSet.add(tile);
|
||||
}
|
||||
}
|
||||
view.repaint();
|
||||
}
|
||||
}
|
||||
|
||||
@ -146,4 +146,8 @@ public class TilesetOverview extends JFrame {
|
||||
}
|
||||
view.repaint();
|
||||
}
|
||||
|
||||
public LinkedList<BufferedImage> getImagesOfTiles() { return imagesOfTiles; }
|
||||
|
||||
public JLabel getInfo() { return info; }
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user