163 lines
6.0 KiB
Java
163 lines
6.0 KiB
Java
package ruscz.game.gameOfProd.LevelEditor;
|
|
|
|
import javax.imageio.ImageIO;
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.MouseAdapter;
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.image.BufferedImage;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.util.LinkedList;
|
|
|
|
public class TilesetOverview extends JFrame {
|
|
|
|
private JLayeredPane view;
|
|
private JLayeredPane tilesetPanel;
|
|
private JScrollPane scrollPane;
|
|
private JLabel info;
|
|
|
|
private int offset = 0;
|
|
private int tilesetOffset = 0;
|
|
private LinkedList<String> activeTilesets;
|
|
private LinkedList<BufferedImage> imagesOfTiles;
|
|
|
|
public TilesetOverview() {
|
|
final File folder = new File("src/main/resources/tilesets/");
|
|
view = new JLayeredPane();
|
|
tilesetPanel = new JLayeredPane();
|
|
scrollPane = new JScrollPane(tilesetPanel);
|
|
listFilesForFolder(folder);
|
|
}
|
|
|
|
public void listFilesForFolder(File folder) {
|
|
activeTilesets = new LinkedList<>();
|
|
for (final File fileEntry : folder.listFiles()) {
|
|
loadTileset(fileEntry.getName());
|
|
}
|
|
JButton generate = new JButton("Generate Tileset Overview");
|
|
generate.setBounds(50, offset, 200, 50);
|
|
generate.addActionListener(actionEvent -> {
|
|
generateOverview();
|
|
});
|
|
|
|
add(generate);
|
|
|
|
info = new JLabel();
|
|
info.setBounds(300, 830, 200, 50);
|
|
add(info);
|
|
|
|
tilesetPanel.setPreferredSize(new Dimension(630, 800));
|
|
|
|
scrollPane.setLocation(300, 0);
|
|
scrollPane.setBounds(300, 0, 650, 800);
|
|
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
|
|
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
|
scrollPane.setWheelScrollingEnabled(true);
|
|
scrollPane.getVerticalScrollBar().setUnitIncrement(10);
|
|
|
|
view.add(scrollPane);
|
|
add(view);
|
|
|
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
|
setBounds(0, 0, 1000, 1000);
|
|
setLocationRelativeTo(null);
|
|
setVisible(true);
|
|
setResizable(false);
|
|
try {
|
|
setIconImage(ImageIO.read(new File("src/main/resources/images/icon.png")).getScaledInstance(64, 64, Image.SCALE_DEFAULT));
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private void loadTileset(String name) {
|
|
JLabel text = new JLabel(name);
|
|
text.setBounds(50 , offset, 200, 50);
|
|
JCheckBox checkBox = new JCheckBox();
|
|
checkBox.setBounds(220, offset, 30, 50);
|
|
checkBox.addActionListener(actionEvent -> {
|
|
if (activeTilesets.contains(name)) activeTilesets.remove(name);
|
|
else activeTilesets.add(name);
|
|
});
|
|
checkBox.setName(name);
|
|
|
|
add(text);
|
|
add(checkBox);
|
|
offset += 70;
|
|
}
|
|
|
|
public void generateOverview() {
|
|
tilesetOffset = 0;
|
|
imagesOfTiles = new LinkedList<>();
|
|
tilesetPanel.removeAll();
|
|
for (String name : activeTilesets) {
|
|
JPanel tileset = new JPanel();
|
|
LinkedList<JLabel> tileList = new LinkedList<>();
|
|
BufferedImage image = null;
|
|
try {
|
|
image = ImageIO.read(new File("src/main/resources/tilesets/" + name));
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
int width = image.getWidth();
|
|
int height = image.getHeight();
|
|
int tileSize = 32;
|
|
|
|
int Xtiles = width / tileSize;
|
|
int Ytiles = height / tileSize;
|
|
int tiles = Xtiles * Ytiles;
|
|
|
|
Rectangle[] rectangles = new Rectangle[tiles];
|
|
int count = 0;
|
|
for (int i = 0; i < rectangles.length / Ytiles; i++) {
|
|
for (int j = 0; j < rectangles.length / Xtiles; j++) {
|
|
rectangles[count] = new Rectangle(tileSize * i, tileSize * j, tileSize, tileSize);
|
|
count++;
|
|
}
|
|
}
|
|
for (int i = 0; i < tiles; i++) {
|
|
BufferedImage tileImage = image.getSubimage(rectangles[i].x, rectangles[i].y, rectangles[i].height, rectangles[i].width);
|
|
imagesOfTiles.add(tileImage);
|
|
ImageIcon imageIcon = new ImageIcon(tileImage);
|
|
JLabel tile = new JLabel("<html><span color='black'>" + (imagesOfTiles.size() - 1) + "</span></html>", imageIcon, JLabel.CENTER);
|
|
tile.setHorizontalTextPosition(JLabel.CENTER);
|
|
tile.setPreferredSize(new Dimension(tileSize, tileSize));
|
|
tile.addMouseListener(new MouseAdapter() {
|
|
@Override
|
|
public void mouseClicked(MouseEvent e) {
|
|
info.setIcon(new ImageIcon(tileImage.getScaledInstance(50, 50, Image.SCALE_DEFAULT)));
|
|
info.setText(tile.getText());
|
|
}
|
|
});
|
|
tileList.add(tile);
|
|
}
|
|
//
|
|
for (int i = 0; i < Ytiles; i++) {
|
|
for (int j = 0; j < Xtiles; j++) {
|
|
tileset.add(tileList.get(i + (j*Ytiles)));
|
|
}
|
|
}
|
|
// for (int i = 0; i < 16; i++) {
|
|
// tileset.add(tileList.get(i));
|
|
// }
|
|
tileset.setBounds(0, tilesetOffset, width + (Xtiles * 6), height + (Ytiles * 6));
|
|
tilesetOffset += height + + (Ytiles * 6);
|
|
tilesetPanel.add(tileset);
|
|
int panelWidth = tilesetPanel.getPreferredSize().width;
|
|
if (panelWidth < width + (Xtiles * 6)) panelWidth = width + (Xtiles * 6);
|
|
tilesetPanel.setPreferredSize(new Dimension(panelWidth, tilesetOffset));
|
|
}
|
|
view.repaint();
|
|
}
|
|
|
|
public LinkedList<BufferedImage> getImagesOfTiles() { return imagesOfTiles; }
|
|
|
|
public LinkedList<String> getActiveTilesets() { return activeTilesets; }
|
|
|
|
public void setActiveTilesets(LinkedList<String> activeTilesets) { this.activeTilesets = activeTilesets; }
|
|
|
|
public JLabel getInfo() { return info; }
|
|
}
|