package ruscz.game.gameOfProd.Image; import ruscz.game.gameOfProd.Windows.WindowOfFreeMove; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import java.util.Scanner; public class ImageCell { private static BufferedImage image; private LinkedList imagesOfTiles; private HashMap cellMap; private ImageDoor imageDoor; private LinkedList imagesOfItems; private int[][] mapBackground; private int[][] mapForeground; public void readMapFile(int width, int height) { mapBackground = new int[width][height]; mapForeground = new int[width][height]; } public void readMapFile(String name) { try { mapBackground = new int[WindowOfFreeMove.CANVAS_WIDTH][WindowOfFreeMove.CANVAS_HEIGHT]; mapForeground = new int[WindowOfFreeMove.CANVAS_WIDTH][WindowOfFreeMove.CANVAS_HEIGHT]; File mapFile = new File("src/main/resources/maps/" + WindowOfFreeMove.getCHAPTER() + "/" + name + "-tileset.txt"); Scanner scanner = new Scanner(mapFile); int j = 0; while (scanner.hasNextLine()) { String data = scanner.nextLine(); if (data.contains("")) { String[] mapInfo = data.split(" "); imageTileset(mapInfo[1]); } else if (data.contains("")) { String[] mapInfo = data.split(" "); imageItem(mapInfo[1]); } else if (data.contains("")) { String[] mapInfo = data.split(" "); loadCellMap(mapInfo); } else if (!data.contains("")) { String[] mapColumn = data.split(" "); for (int i = 0; i < mapColumn.length; i++) { mapBackground[i][j] = Integer.parseInt(mapColumn[i]); } j++; } } imageObjectset(name); } catch (FileNotFoundException e) { System.out.println("An error occurred."); e.printStackTrace(); } } public void imageTileset(String tilesetInfo) { try { image = ImageIO.read(new File("src/main/resources/tilesets/" + tilesetInfo)); } 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; if (imagesOfTiles == null) imagesOfTiles = new LinkedList(); 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++) { imagesOfTiles.add(image.getSubimage(rectangles[i].x, rectangles[i].y, rectangles[i].height, rectangles[i].width)); } } public void imageObjectset(String file) { try { File objectFile = new File("src/main/resources/maps/" + WindowOfFreeMove.getCHAPTER() + "/" + file + "-objectset.txt"); Scanner scanner = new Scanner(objectFile); int j = 0; while (scanner.hasNextLine()) { String[] objects = scanner.nextLine().split(" "); for (int i = 0; i < objects.length; i++) { mapForeground[i][j] = Integer.parseInt(objects[i]); } j++; } } catch (FileNotFoundException e) { e.printStackTrace(); } } public void loadCellMap(String[] cellInfo) { if (cellMap == null) cellMap = new HashMap(); if (cellInfo[1].equals("DOOR")) { Rectangle[] rec = new Rectangle[12]; int CELL_SIZE = WindowOfFreeMove.CELL_SIZE; int count = 0; for (int i = 0; i < rec.length / 4; i++) { for (int j = 0; j < rec.length / 3; j++) { rec[count] = new Rectangle(CELL_SIZE * i, CELL_SIZE * j, CELL_SIZE, CELL_SIZE); count++; } } imageDoor = new ImageDoor(cellInfo[2], rec); } else cellMap.put(cellInfo[1], Integer.parseInt(cellInfo[2])); } public void imageItem(String itemInfo) { int imageWidth = 0; int imageHeight = 0; int size = 0; try { image = ImageIO.read(new File("src/main/resources/items/" + itemInfo)); imageWidth = image.getWidth(); imageHeight = image.getHeight(); size = 32; } catch (IOException e) { e.printStackTrace(); } int Xtiles = imageWidth / size; int Ytiles = imageHeight / size; int tiles = Xtiles * Ytiles; if (imagesOfItems == null) imagesOfItems = new LinkedList(); for (int i = 0; i < Xtiles; i++) { for (int j = 0; j < Ytiles; j++) { BufferedImage img = image.getSubimage(size * i, size * j, size, size); imagesOfItems.add(img); } } } public LinkedList getImagesOfItems() { return imagesOfItems; } public int getImageFromCellMap(String cell) { return cellMap.get(cell); } public LinkedList getImagesOfTiles() { return imagesOfTiles; } public ImageDoor getImageDoor() { return imageDoor; } public int[][] getMapForeground() { return mapForeground; } public int[][] getMapBackground() { return mapBackground; } public void setMapBackground(int[][] mapBackground) { this.mapBackground = mapBackground; } public void setMapForeground(int[][] mapForeground) { this.mapForeground = mapForeground; } public void paintBackground(Graphics g, int x, int y) { g.drawImage(imagesOfTiles.get(mapBackground[x][y]), x * WindowOfFreeMove.CELL_SIZE, y * WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, null); } public void paintForeground(Graphics g, int x, int y) { int imageNum = mapForeground[x][y]; if (imageNum > 0) g.drawImage(imagesOfTiles.get(imageNum), x * WindowOfFreeMove.CELL_SIZE, y * WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, WindowOfFreeMove.CELL_SIZE, null); } }