2020-06-08 23:37:08 +02:00

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; }
}