added level editor
This commit is contained in:
parent
414a6602ed
commit
8f4fcf23de
@ -1,5 +1,6 @@
|
|||||||
package ruscz.game.gameOfProd;
|
package ruscz.game.gameOfProd;
|
||||||
|
|
||||||
|
import ruscz.game.gameOfProd.LevelEditor.EditorManager;
|
||||||
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;
|
||||||
@ -51,7 +52,7 @@ public class Game extends JFrame {
|
|||||||
// battle.startBattle();
|
// battle.startBattle();
|
||||||
|
|
||||||
//Tohle spustí na začátku tileset overview
|
//Tohle spustí na začátku tileset overview
|
||||||
// new TilesetOverview();
|
new EditorManager();
|
||||||
|
|
||||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||||
setUndecorated(true);
|
setUndecorated(true);
|
||||||
|
|||||||
@ -21,6 +21,11 @@ public class ImageCell {
|
|||||||
private int[][] mapBackground;
|
private int[][] mapBackground;
|
||||||
private int[][] mapForeground;
|
private int[][] mapForeground;
|
||||||
|
|
||||||
|
public void readMapFile() {
|
||||||
|
mapBackground = new int[WindowOfFreeMove.CANVAS_WIDTH][WindowOfFreeMove.CANVAS_HEIGHT];
|
||||||
|
mapForeground = new int[WindowOfFreeMove.CANVAS_WIDTH][WindowOfFreeMove.CANVAS_HEIGHT];
|
||||||
|
}
|
||||||
|
|
||||||
public void readMapFile(String name) {
|
public void readMapFile(String name) {
|
||||||
try {
|
try {
|
||||||
mapBackground = new int[WindowOfFreeMove.CANVAS_WIDTH][WindowOfFreeMove.CANVAS_HEIGHT];
|
mapBackground = new int[WindowOfFreeMove.CANVAS_WIDTH][WindowOfFreeMove.CANVAS_HEIGHT];
|
||||||
@ -168,6 +173,10 @@ public class ImageCell {
|
|||||||
|
|
||||||
public ImageDoor getImageDoor() { return imageDoor; }
|
public ImageDoor getImageDoor() { return imageDoor; }
|
||||||
|
|
||||||
|
public int[][] getMapForeground() { return mapForeground; }
|
||||||
|
|
||||||
|
public int[][] getMapBackground() { return mapBackground; }
|
||||||
|
|
||||||
public void paintBackground(Graphics g, int x, int y) {
|
public void paintBackground(Graphics g, int x, int y) {
|
||||||
g.drawImage(imagesOfTiles.get(mapBackground[x][y]), x * WindowOfFreeMove.CELL_SIZE,
|
g.drawImage(imagesOfTiles.get(mapBackground[x][y]), x * WindowOfFreeMove.CELL_SIZE,
|
||||||
y * WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, null);
|
y * WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, null);
|
||||||
|
|||||||
@ -0,0 +1,12 @@
|
|||||||
|
package ruscz.game.gameOfProd.LevelEditor;
|
||||||
|
|
||||||
|
public class EditorManager {
|
||||||
|
|
||||||
|
private TilesetOverview overview;
|
||||||
|
private LevelEditor editor;
|
||||||
|
|
||||||
|
public EditorManager() {
|
||||||
|
overview = new TilesetOverview();
|
||||||
|
editor = new LevelEditor();
|
||||||
|
}
|
||||||
|
}
|
||||||
239
src/main/java/ruscz/game/gameOfProd/LevelEditor/LevelEditor.java
Normal file
239
src/main/java/ruscz/game/gameOfProd/LevelEditor/LevelEditor.java
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
package ruscz.game.gameOfProd.LevelEditor;
|
||||||
|
|
||||||
|
import ruscz.game.gameOfProd.Cells.TypeOfCell;
|
||||||
|
import ruscz.game.gameOfProd.Map.Map;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class LevelEditor extends JFrame {
|
||||||
|
|
||||||
|
private JLayeredPane view;
|
||||||
|
|
||||||
|
public LevelEditor() {
|
||||||
|
view = new JLayeredPane();
|
||||||
|
view.setBounds(0, 0, 1200, 1000);
|
||||||
|
view.setLayout(null);
|
||||||
|
view.setVisible(true);
|
||||||
|
|
||||||
|
JPanel menu = new JPanel();
|
||||||
|
menu.setBounds(0, 0, 1200, 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 nameNew = new JLabel("<html><div style='text-align: center; width: 1200;'>Name of new map</div></html>");
|
||||||
|
nameNew.setBounds(0, 120, 1200, 20);
|
||||||
|
JTextField nameVal = new JTextField();
|
||||||
|
nameVal.setBounds(550, 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);
|
||||||
|
JTextField widthVal = new JTextField();
|
||||||
|
widthVal.setBounds(550, 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);
|
||||||
|
JTextField heightVal = new JTextField();
|
||||||
|
heightVal.setBounds(550, 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);
|
||||||
|
errorInt.setVisible(false);
|
||||||
|
|
||||||
|
JButton createNew = new JButton("CREATE NEW MAP");
|
||||||
|
createNew.setBounds(500, 330, 200, 50);
|
||||||
|
createNew.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
try {
|
||||||
|
String name = nameVal.getText();
|
||||||
|
int width = Integer.parseInt(widthVal.getText());
|
||||||
|
int height = Integer.parseInt(heightVal.getText());
|
||||||
|
menu.removeAll();
|
||||||
|
menu.setVisible(false);
|
||||||
|
view.remove(menu);
|
||||||
|
view.revalidate();
|
||||||
|
view.repaint();
|
||||||
|
createNewMap(name, width, height);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException ex) {
|
||||||
|
errorInt.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
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 nameEx = new JLabel("<html><div style='text-align: center; width: 1200;'>Name of map</div></html>");
|
||||||
|
nameEx.setBounds(0, 570, 1200, 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
menu.add(titleNew);
|
||||||
|
menu.add(nameNew);
|
||||||
|
menu.add(nameVal);
|
||||||
|
menu.add(widthNew);
|
||||||
|
menu.add(widthVal);
|
||||||
|
menu.add(heightNew);
|
||||||
|
menu.add(heightVal);
|
||||||
|
menu.add(createNew);
|
||||||
|
menu.add(errorInt);
|
||||||
|
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);
|
||||||
|
setLocationRelativeTo(null);
|
||||||
|
setLayout(null);
|
||||||
|
setVisible(true);
|
||||||
|
setResizable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createNewMap(String name, int width, int height) {
|
||||||
|
TypeOfCell[][] mapArray = new TypeOfCell[width][height];
|
||||||
|
for (int i = 0; i < height; i++) {
|
||||||
|
Arrays.fill(mapArray[i], TypeOfCell.EMPTY);
|
||||||
|
}
|
||||||
|
Map map = new Map(mapArray);
|
||||||
|
map.setName(name);
|
||||||
|
int[] size = {width, height};
|
||||||
|
map.setCanvasSize(size);
|
||||||
|
map.getImageCell().readMapFile();
|
||||||
|
startMapEditor(map, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startMapEditor(Map map, int width, int height) {
|
||||||
|
|
||||||
|
JPanel menu = new JPanel();
|
||||||
|
menu.setBounds(0, 0, 1200, 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);
|
||||||
|
|
||||||
|
JLayeredPane mapLayers = new JLayeredPane();
|
||||||
|
mapLayers.setPreferredSize(new Dimension(width * 50, height * 50));
|
||||||
|
mapLayers.setLayout(null);
|
||||||
|
mapLayers.setVisible(true);
|
||||||
|
|
||||||
|
JPanel objectSet = new JPanel();
|
||||||
|
objectSet.setBounds(0, 0, width * 50, height * 50);
|
||||||
|
objectSet.setLayout(null);
|
||||||
|
objectSet.setVisible(true);
|
||||||
|
objectSet.setBackground(Color.RED);
|
||||||
|
|
||||||
|
JPanel cellSet = new JPanel();
|
||||||
|
cellSet.setBounds(0, 0, width * 50, height * 50);
|
||||||
|
cellSet.setLayout(null);
|
||||||
|
cellSet.setVisible(true);
|
||||||
|
cellSet.setBackground(Color.GREEN);
|
||||||
|
|
||||||
|
JPanel tileSet = new JPanel();
|
||||||
|
tileSet.setBounds(0, 0, width * 50, height * 50);
|
||||||
|
tileSet.setLayout(null);
|
||||||
|
tileSet.setVisible(true);
|
||||||
|
tileSet.setBackground(Color.BLUE);
|
||||||
|
|
||||||
|
JScrollPane mapViewer = new JScrollPane(mapLayers);
|
||||||
|
mapViewer.setBounds(200, 70, 950, 860);
|
||||||
|
mapViewer.setVisible(true);
|
||||||
|
mapViewer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
|
||||||
|
mapViewer.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||||
|
mapViewer.setWheelScrollingEnabled(true);
|
||||||
|
mapViewer.getVerticalScrollBar().setUnitIncrement(10);
|
||||||
|
|
||||||
|
JLabel objectLabel = new JLabel("Object Layer");
|
||||||
|
objectLabel.setBounds( 500, 30, 100, 20);
|
||||||
|
JCheckBox objectBox = new JCheckBox();
|
||||||
|
objectBox.setBounds(600, 30, 30, 20);
|
||||||
|
objectBox.setSelected(true);
|
||||||
|
objectBox.addActionListener(actionEvent -> {
|
||||||
|
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);
|
||||||
|
JCheckBox cellBox = new JCheckBox();
|
||||||
|
cellBox.setBounds(850, 30, 30, 20);
|
||||||
|
cellBox.setSelected(true);
|
||||||
|
cellBox.addActionListener(actionEvent -> {
|
||||||
|
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);
|
||||||
|
JCheckBox tileBox = new JCheckBox();
|
||||||
|
tileBox.setBounds(1030, 30, 30, 20);
|
||||||
|
tileBox.setSelected(true);
|
||||||
|
tileBox.addActionListener(actionEvent -> {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.add(title);
|
||||||
|
menu.add(objectLabel);
|
||||||
|
menu.add(objectBox);
|
||||||
|
menu.add(cellLabel);
|
||||||
|
menu.add(cellBox);
|
||||||
|
menu.add(tileLabel);
|
||||||
|
menu.add(tileBox);
|
||||||
|
mapLayers.add(objectSet);
|
||||||
|
mapLayers.add(cellSet);
|
||||||
|
mapLayers.add(tileSet);
|
||||||
|
view.add(mapViewer);
|
||||||
|
view.add(menu);
|
||||||
|
view.repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -274,6 +274,8 @@ public class Map {
|
|||||||
|
|
||||||
public SoundManager getSoundManager() { return soundManager; }
|
public SoundManager getSoundManager() { return soundManager; }
|
||||||
|
|
||||||
|
public void setCanvasSize(int[] size) { canvasSize = size; }
|
||||||
|
|
||||||
public boolean isBusyCell(int x, int y) {
|
public boolean isBusyCell(int x, int y) {
|
||||||
for (Block cell : block) {
|
for (Block cell : block) {
|
||||||
if (cell.isInBlock(x, y))
|
if (cell.isInBlock(x, y))
|
||||||
|
|||||||
@ -1,65 +0,0 @@
|
|||||||
<map>
|
|
||||||
<mapName>tutorial</mapName>
|
|
||||||
<events>
|
|
||||||
<trigger>
|
|
||||||
<x>11</x>
|
|
||||||
<y>6</y>
|
|
||||||
<active>false</active>
|
|
||||||
</trigger>
|
|
||||||
</events>
|
|
||||||
</map>
|
|
||||||
<map>
|
|
||||||
<mapName>openspace</mapName>
|
|
||||||
<events>
|
|
||||||
<trigger>
|
|
||||||
<x>6</x>
|
|
||||||
<y>4</y>
|
|
||||||
<active>true</active>
|
|
||||||
</trigger>
|
|
||||||
<trigger>
|
|
||||||
<x>14</x>
|
|
||||||
<y>16</y>
|
|
||||||
<active>false</active>
|
|
||||||
</trigger>
|
|
||||||
<chest>
|
|
||||||
<x>15</x>
|
|
||||||
<y>7</y>
|
|
||||||
<active>false</active>
|
|
||||||
</chest>
|
|
||||||
</events>
|
|
||||||
</map>
|
|
||||||
<map>
|
|
||||||
<mapName>office</mapName>
|
|
||||||
<events>
|
|
||||||
<trigger>
|
|
||||||
<x>4</x>
|
|
||||||
<y>2</y>
|
|
||||||
<active>false</active>
|
|
||||||
</trigger>
|
|
||||||
<chest>
|
|
||||||
<x>1</x>
|
|
||||||
<y>9</y>
|
|
||||||
<active>false</active>
|
|
||||||
</chest>
|
|
||||||
</events>
|
|
||||||
</map>
|
|
||||||
<map>
|
|
||||||
<mapName>boss</mapName>
|
|
||||||
<events>
|
|
||||||
<trigger>
|
|
||||||
<x>4</x>
|
|
||||||
<y>18</y>
|
|
||||||
<active>true</active>
|
|
||||||
</trigger>
|
|
||||||
</events>
|
|
||||||
</map>
|
|
||||||
<map>
|
|
||||||
<mapName>treasure</mapName>
|
|
||||||
<events>
|
|
||||||
<trigger>
|
|
||||||
<x>6</x>
|
|
||||||
<y>1</y>
|
|
||||||
<active>true</active>
|
|
||||||
</trigger>
|
|
||||||
</events>
|
|
||||||
</map>
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
<item>
|
|
||||||
<name>white-key-card</name>
|
|
||||||
<multiplicity>1</multiplicity>
|
|
||||||
<image>19</image>
|
|
||||||
<action>key</action>
|
|
||||||
</item>
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
<location>
|
|
||||||
<map>office</map>
|
|
||||||
<x>8</x>
|
|
||||||
<y>6</y>
|
|
||||||
<direction>3</direction>
|
|
||||||
</location>
|
|
||||||
@ -1 +0,0 @@
|
|||||||
TODO: Village
|
|
||||||
Loading…
x
Reference in New Issue
Block a user