added TileSet info and saving

This commit is contained in:
musilto9 2020-05-14 01:25:00 +02:00
parent f59cd3f8a1
commit 7977117890
6 changed files with 208 additions and 39 deletions

View File

@ -1,6 +1,6 @@
package ruscz.game.gameOfProd;
import ruscz.game.gameOfProd.LevelEditor.EditorManager;
import ruscz.game.gameOfProd.LevelEditor.LevelEditor;
import ruscz.game.gameOfProd.LevelEditor.TilesetOverview;
import ruscz.game.gameOfProd.Windows.WindowOfBattle;
import ruscz.game.gameOfProd.Windows.WindowOfFreeMove;
@ -48,11 +48,11 @@ public class Game extends JFrame {
// freeMove.start(true);
//tohle spustí na začátku bitvu
add(battle);
battle.startBattle();
// add(battle);
// battle.startBattle();
//Tohle spustí na začátku tileset overview
// new EditorManager();
new LevelEditor();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setUndecorated(true);

View File

@ -0,0 +1,100 @@
package ruscz.game.gameOfProd.LevelEditor;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class EditorSaveManager {
private LevelEditor editor;
public EditorSaveManager(LevelEditor editor) {
this.editor = editor;
}
public void saveMap() {
boolean isValid = validate();
if (isValid) {
editor.hideError();
saveObjectSet();
saveCellSet();
saveTileSet();
editor.displayMessage("Map was successfully saved.");
}
else {
editor.displayError("There is no Tileset imported for this map.");
}
}
public boolean validate() {
boolean valid = editor.getImagesOfTiles() != null && editor.getImagesOfTiles().size() > 0;
return valid;
}
private void saveObjectSet() {
try {
FileWriter writer = new FileWriter("src/main/resources/maps/custom/" + editor.getMap().getName() + "-objectset.txt");
int[][] set = editor.getMap().getImageCell().getMapForeground();
String info = "";
for (int i = 0; i < editor.getMapWidth(); i++) {
for (int j = 0; j < editor.getMapHeight(); j++) {
if (j != 0) info += " ";
info += set[i][j];
}
if (i != editor.getMapWidth() -1) info += System.lineSeparator();
}
writer.write(info);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void saveCellSet() {
try {
FileWriter writer = new FileWriter("src/main/resources/maps/custom/" + editor.getMap().getName() + ".txt");
String[][] set = editor.getCellArray();
String info = editor.getMapWidth() + " " + editor.getMapHeight() + System.lineSeparator();
for (int i = 0; i < editor.getMapWidth(); i++) {
for (int j = 0; j < editor.getMapHeight(); j++) {
if (j != 0) info += " ";
info += set[i][j];
}
if (i != editor.getMapWidth() -1) info += System.lineSeparator();
}
writer.write(info);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void saveTileSet() {
try {
FileWriter writer = new FileWriter("src/main/resources/maps/custom/" + editor.getMap().getName() + "-tileset.txt");
int[][] set = editor.getMap().getImageCell().getMapBackground();
String info = "";
for (String tileset : editor.getOverview().getActiveTilesets()) {
BufferedImage image = ImageIO.read(new File("src/main/resources/tilesets/" + tileset));
info += "<tileset> " + tileset + " " + image.getWidth() + " " + image.getHeight() + " 32" + System.lineSeparator();
}
for (String key : editor.getCellMap().keySet()) {
info += "<cellmap> " + key + " " + editor.getCellMap().get(key) + System.lineSeparator();
}
info += "<soundmap> DOOR qubodup-DoorOpen01-changed.wav qubodup-DoorClose02-changed.wav doorLocked.wav";
for (int i = 0; i < editor.getMapWidth(); i++) {
for (int j = 0; j < editor.getMapHeight(); j++) {
if (j != 0) info += " ";
info += set[i][j];
}
if (i != editor.getMapWidth() -1) info += System.lineSeparator();
}
writer.write(info);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@ -2,6 +2,9 @@ package ruscz.game.gameOfProd.LevelEditor;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Arrays;
import java.util.LinkedList;
public class InfoManager {
@ -36,18 +39,21 @@ public class InfoManager {
switch (layer) {
case "object":
displayObjectInfo(label, x, y);
displayObjectAndTileInfo(label, x, y, true);
break;
case "cell":
displayCellInfo(label, x, y);
break;
case "tile":
displayObjectAndTileInfo(label, x, y, false);
break;
}
view.add(info);
view.revalidate();
}
private void displayObjectInfo(JLabel label, int x, int y) {
private void displayObjectAndTileInfo(JLabel label, int x, int y, boolean isObject) {
JLabel infoLabel = new JLabel();
infoLabel.setBounds(0, 0, 50, 50);
infoLabel.setIcon(label.getIcon());
@ -84,8 +90,40 @@ public class InfoManager {
importTile.setVisible(true);
});
JButton setTileToAll = new JButton("Set tile info to whole layer");
setTileToAll.setBounds(25, 200, 200, 30);
setTileToAll.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();
if(isObject) {
for (int i = 0; i < editor.getMap().getImageCell().getMapForeground().length; i++) {
Arrays.fill(editor.getMap().getImageCell().getMapForeground()[i], Integer.parseInt(tileNum.getText()));
}
editor.getMapLayers().repaintObjectset();
}
else {
for (int i = 0; i < editor.getMap().getImageCell().getMapBackground().length; i++) {
Arrays.fill(editor.getMap().getImageCell().getMapBackground()[i], Integer.parseInt(tileNum.getText()));
}
editor.getMapLayers().repaintTileset();
}
info.removeAll();
view.remove(info);
view.revalidate();
view.repaint();
});
JButton saveInfo = new JButton("Save tile info");
saveInfo.setBounds(50, 200, 150, 30);
saveInfo.setBounds(50, 250, 150, 30);
saveInfo.addActionListener(e -> {
if (editor.getImagesOfTiles() != null) {
if (Integer.parseInt(tileNum.getText()) > editor.getImagesOfTiles().size() || Integer.parseInt(tileNum.getText()) < 0) {
@ -98,8 +136,14 @@ public class InfoManager {
return;
}
editor.hideError();
if (isObject) {
editor.getMap().getImageCell().getMapForeground()[x][y] = Integer.parseInt(tileNum.getText());
editor.getMapLayers().repaintObjectset();
}
else {
editor.getMap().getImageCell().getMapBackground()[x][y] = Integer.parseInt(tileNum.getText());
editor.getMapLayers().repaintTileset();
}
info.removeAll();
view.remove(info);
view.revalidate();
@ -111,6 +155,7 @@ public class InfoManager {
info.add(tileNum);
info.add(selectTile);
info.add(importTile);
info.add(setTileToAll);
info.add(saveInfo);
}
@ -142,8 +187,21 @@ public class InfoManager {
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();
for (Component component : info.getComponents()) {
component.requestFocus();
}
});
cellType.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
for (Component component : info.getComponents()) {
component.requestFocus();
}
}
@Override public void mousePressed(MouseEvent e) {}
@Override public void mouseReleased(MouseEvent e) {}
@Override public void mouseEntered(MouseEvent e) {}
@Override public void mouseExited(MouseEvent e) {}
});
openCellMap.setBounds(30, 70, 200, 30);
@ -174,9 +232,7 @@ public class InfoManager {
}
private void displayDetailedCellInfo(String type, JButton open, JButton save) {
if (type.equals("BLOCK")) {
upperLowerInfo(open, save);
}
if (type.equals("BLOCK")) upperLowerInfo(open, save);
}
private void upperLowerInfo(JButton open, JButton save) {

View File

@ -8,10 +8,13 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.concurrent.atomic.AtomicBoolean;
public class LevelEditor extends JFrame {
@ -93,25 +96,6 @@ public class LevelEditor extends JFrame {
}
});
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: 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(e -> {
try {
//TODO: LevelEditor version of Map class
}
catch (NumberFormatException ex) {
error.setVisible(true);
}
});
menu.add(titleNew);
menu.add(nameNew);
menu.add(nameVal);
@ -121,10 +105,6 @@ public class LevelEditor extends JFrame {
menu.add(heightVal);
menu.add(createNew);
menu.add(error);
// menu.add(titleEx);
// menu.add(nameEx);
// menu.add(nameExVal);
// menu.add(editEx);
view.add(menu);
add(view);
@ -239,6 +219,29 @@ public class LevelEditor extends JFrame {
errorMessage.setBounds(300, 900, 950, 30);
errorMessage.setVisible(false);
AtomicBoolean save = new AtomicBoolean(false);
JButton saveMap = new JButton("Save Current Map");
saveMap.setBounds(1050, 900, 200, 30);
saveMap.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
new EditorSaveManager(getEditor()).saveMap();
}
@Override public void mousePressed(MouseEvent e) {}
@Override public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {
displayMessage("Proceeding will overwrite any previous data for map with this name. To proceed click 'Save Current Map' again.");
}
@Override
public void mouseExited(MouseEvent e) {
hideError();
}
});
mapLayersManager.repaintSets();
menu.add(title);
@ -251,6 +254,7 @@ public class LevelEditor extends JFrame {
menu.add(importTilesets);
menu.add(openTilesets);
menu.add(errorMessage);
menu.add(saveMap);
view.add(mapViewer);
view.add(menu);
@ -271,6 +275,11 @@ public class LevelEditor extends JFrame {
errorMessage.setVisible(true);
}
protected void displayMessage(String message) {
errorMessage.setText(message);
errorMessage.setVisible(true);
}
protected void hideError() { errorMessage.setVisible(false); }
public JLayeredPane getView() {
@ -312,4 +321,6 @@ public class LevelEditor extends JFrame {
public void setOverview(TilesetOverview overview) {
this.overview = overview;
}
public LevelEditor getEditor() { return this; }
}

View File

@ -149,5 +149,7 @@ public class TilesetOverview extends JFrame {
public LinkedList<BufferedImage> getImagesOfTiles() { return imagesOfTiles; }
public LinkedList<String> getActiveTilesets() { return activeTilesets; }
public JLabel getInfo() { return info; }
}

View File

@ -1,5 +1,5 @@
<tileset> A2_Ground.png 512 384 32 192
<tileset> D_OutDoor.png 512 512 32 256
<tileset> A2_Ground.png 512 384 32
<tileset> D_OutDoor.png 512 512 32
<cellmap> BLOCK 120
<cellmap> MOVETO 277
<cellmap> EVENT 334