added TileSet info and saving
This commit is contained in:
parent
f59cd3f8a1
commit
7977117890
@ -1,6 +1,6 @@
|
|||||||
package ruscz.game.gameOfProd;
|
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.LevelEditor.TilesetOverview;
|
||||||
import ruscz.game.gameOfProd.Windows.WindowOfBattle;
|
import ruscz.game.gameOfProd.Windows.WindowOfBattle;
|
||||||
import ruscz.game.gameOfProd.Windows.WindowOfFreeMove;
|
import ruscz.game.gameOfProd.Windows.WindowOfFreeMove;
|
||||||
@ -48,11 +48,11 @@ public class Game extends JFrame {
|
|||||||
// freeMove.start(true);
|
// freeMove.start(true);
|
||||||
|
|
||||||
//tohle spustí na začátku bitvu
|
//tohle spustí na začátku bitvu
|
||||||
add(battle);
|
// add(battle);
|
||||||
battle.startBattle();
|
// battle.startBattle();
|
||||||
|
|
||||||
//Tohle spustí na začátku tileset overview
|
//Tohle spustí na začátku tileset overview
|
||||||
// new EditorManager();
|
new LevelEditor();
|
||||||
|
|
||||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||||
setUndecorated(true);
|
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 javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
public class InfoManager {
|
public class InfoManager {
|
||||||
@ -36,18 +39,21 @@ public class InfoManager {
|
|||||||
|
|
||||||
switch (layer) {
|
switch (layer) {
|
||||||
case "object":
|
case "object":
|
||||||
displayObjectInfo(label, x, y);
|
displayObjectAndTileInfo(label, x, y, true);
|
||||||
break;
|
break;
|
||||||
case "cell":
|
case "cell":
|
||||||
displayCellInfo(label, x, y);
|
displayCellInfo(label, x, y);
|
||||||
break;
|
break;
|
||||||
|
case "tile":
|
||||||
|
displayObjectAndTileInfo(label, x, y, false);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
view.add(info);
|
view.add(info);
|
||||||
view.revalidate();
|
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();
|
JLabel infoLabel = new JLabel();
|
||||||
infoLabel.setBounds(0, 0, 50, 50);
|
infoLabel.setBounds(0, 0, 50, 50);
|
||||||
infoLabel.setIcon(label.getIcon());
|
infoLabel.setIcon(label.getIcon());
|
||||||
@ -84,8 +90,40 @@ public class InfoManager {
|
|||||||
importTile.setVisible(true);
|
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");
|
JButton saveInfo = new JButton("Save tile info");
|
||||||
saveInfo.setBounds(50, 200, 150, 30);
|
saveInfo.setBounds(50, 250, 150, 30);
|
||||||
saveInfo.addActionListener(e -> {
|
saveInfo.addActionListener(e -> {
|
||||||
if (editor.getImagesOfTiles() != null) {
|
if (editor.getImagesOfTiles() != null) {
|
||||||
if (Integer.parseInt(tileNum.getText()) > editor.getImagesOfTiles().size() || Integer.parseInt(tileNum.getText()) < 0) {
|
if (Integer.parseInt(tileNum.getText()) > editor.getImagesOfTiles().size() || Integer.parseInt(tileNum.getText()) < 0) {
|
||||||
@ -98,8 +136,14 @@ public class InfoManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
editor.hideError();
|
editor.hideError();
|
||||||
editor.getMap().getImageCell().getMapForeground()[x][y] = Integer.parseInt(tileNum.getText());
|
if (isObject) {
|
||||||
editor.getMapLayers().repaintObjectset();
|
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();
|
info.removeAll();
|
||||||
view.remove(info);
|
view.remove(info);
|
||||||
view.revalidate();
|
view.revalidate();
|
||||||
@ -111,6 +155,7 @@ public class InfoManager {
|
|||||||
info.add(tileNum);
|
info.add(tileNum);
|
||||||
info.add(selectTile);
|
info.add(selectTile);
|
||||||
info.add(importTile);
|
info.add(importTile);
|
||||||
|
info.add(setTileToAll);
|
||||||
info.add(saveInfo);
|
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)));
|
infoLabel.setIcon(new ImageIcon(editor.getImagesOfTiles().get(editor.getCellMap().get(value)).getScaledInstance(50, 50, Image.SCALE_DEFAULT)));
|
||||||
}
|
}
|
||||||
displayDetailedCellInfo(String.valueOf(cellType.getSelectedItem()), openCellMap, saveInfo);
|
displayDetailedCellInfo(String.valueOf(cellType.getSelectedItem()), openCellMap, saveInfo);
|
||||||
info.requestFocus();
|
for (Component component : info.getComponents()) {
|
||||||
info.revalidate();
|
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);
|
openCellMap.setBounds(30, 70, 200, 30);
|
||||||
@ -174,9 +232,7 @@ public class InfoManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void displayDetailedCellInfo(String type, JButton open, JButton save) {
|
private void displayDetailedCellInfo(String type, JButton open, JButton save) {
|
||||||
if (type.equals("BLOCK")) {
|
if (type.equals("BLOCK")) upperLowerInfo(open, save);
|
||||||
upperLowerInfo(open, save);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void upperLowerInfo(JButton open, JButton save) {
|
private void upperLowerInfo(JButton open, JButton save) {
|
||||||
|
|||||||
@ -8,10 +8,13 @@ import javax.swing.*;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class LevelEditor extends JFrame {
|
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(titleNew);
|
||||||
menu.add(nameNew);
|
menu.add(nameNew);
|
||||||
menu.add(nameVal);
|
menu.add(nameVal);
|
||||||
@ -121,10 +105,6 @@ public class LevelEditor extends JFrame {
|
|||||||
menu.add(heightVal);
|
menu.add(heightVal);
|
||||||
menu.add(createNew);
|
menu.add(createNew);
|
||||||
menu.add(error);
|
menu.add(error);
|
||||||
// menu.add(titleEx);
|
|
||||||
// menu.add(nameEx);
|
|
||||||
// menu.add(nameExVal);
|
|
||||||
// menu.add(editEx);
|
|
||||||
view.add(menu);
|
view.add(menu);
|
||||||
add(view);
|
add(view);
|
||||||
|
|
||||||
@ -239,6 +219,29 @@ public class LevelEditor extends JFrame {
|
|||||||
errorMessage.setBounds(300, 900, 950, 30);
|
errorMessage.setBounds(300, 900, 950, 30);
|
||||||
errorMessage.setVisible(false);
|
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();
|
mapLayersManager.repaintSets();
|
||||||
|
|
||||||
menu.add(title);
|
menu.add(title);
|
||||||
@ -251,6 +254,7 @@ public class LevelEditor extends JFrame {
|
|||||||
menu.add(importTilesets);
|
menu.add(importTilesets);
|
||||||
menu.add(openTilesets);
|
menu.add(openTilesets);
|
||||||
menu.add(errorMessage);
|
menu.add(errorMessage);
|
||||||
|
menu.add(saveMap);
|
||||||
|
|
||||||
view.add(mapViewer);
|
view.add(mapViewer);
|
||||||
view.add(menu);
|
view.add(menu);
|
||||||
@ -271,6 +275,11 @@ public class LevelEditor extends JFrame {
|
|||||||
errorMessage.setVisible(true);
|
errorMessage.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void displayMessage(String message) {
|
||||||
|
errorMessage.setText(message);
|
||||||
|
errorMessage.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
protected void hideError() { errorMessage.setVisible(false); }
|
protected void hideError() { errorMessage.setVisible(false); }
|
||||||
|
|
||||||
public JLayeredPane getView() {
|
public JLayeredPane getView() {
|
||||||
@ -312,4 +321,6 @@ public class LevelEditor extends JFrame {
|
|||||||
public void setOverview(TilesetOverview overview) {
|
public void setOverview(TilesetOverview overview) {
|
||||||
this.overview = 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<BufferedImage> getImagesOfTiles() { return imagesOfTiles; }
|
||||||
|
|
||||||
|
public LinkedList<String> getActiveTilesets() { return activeTilesets; }
|
||||||
|
|
||||||
public JLabel getInfo() { return info; }
|
public JLabel getInfo() { return info; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<tileset> A2_Ground.png 512 384 32 192
|
<tileset> A2_Ground.png 512 384 32
|
||||||
<tileset> D_OutDoor.png 512 512 32 256
|
<tileset> D_OutDoor.png 512 512 32
|
||||||
<cellmap> BLOCK 120
|
<cellmap> BLOCK 120
|
||||||
<cellmap> MOVETO 277
|
<cellmap> MOVETO 277
|
||||||
<cellmap> EVENT 334
|
<cellmap> EVENT 334
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user