added TileSet info and saving
This commit is contained in:
parent
f59cd3f8a1
commit
7977117890
@ -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);
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
editor.getMap().getImageCell().getMapForeground()[x][y] = Integer.parseInt(tileNum.getText());
|
||||
editor.getMapLayers().repaintObjectset();
|
||||
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) {
|
||||
|
||||
@ -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; }
|
||||
}
|
||||
|
||||
@ -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; }
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user