add MiniMap functionality and integrate map state handling

This commit is contained in:
2025-12-13 18:20:01 +01:00
parent 87aba81f32
commit 9263626ca2
8 changed files with 242 additions and 3 deletions

View File

@@ -0,0 +1,92 @@
package de.miaurizius.jgame2d.tile;
import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.core.enums.Map;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class MiniMap extends TileManager {
GamePanel panel;
BufferedImage worldMap[];
public boolean miniMapOn;
public MiniMap(GamePanel panel) throws IOException {
super(panel);
this.panel = panel;
createWorldMap();
}
public void createWorldMap() {
worldMap = new BufferedImage[Map.values().length];
int worldMapWidth = panel.maxWorldCol * panel.tileSize;
int worldMapHeight = panel.maxWorldRow * panel.tileSize;
for (int i = 0; i < Map.values().length; i++) {
worldMap[i] = new BufferedImage(worldMapWidth, worldMapHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = worldMap[i].createGraphics();
int col = 0;
int row = 0;
while(col < panel.maxWorldCol && row < panel.maxWorldRow) {
int tileNum = mapTileNum[i][col][row];
int x = col * panel.tileSize;
int y = row * panel.tileSize;
g2.drawImage(panel.tileM.tile[tileNum].image, x, y, null);
col++;
if(col != panel.maxWorldCol) continue;
col = 0;
row++;
}
}
}
public void drawFullMapScreen(Graphics2D g2) {
// BACKGROUND
g2.setColor(Color.black);
g2.fillRect(0, 0, panel.screenWidth, panel.screenHeight);
// DRAW MAP
int width = 500;
int height = 500;
int x = panel.screenWidth / 2 - width / 2;
int y = panel.screenHeight / 2 - height / 2;
g2.drawImage(worldMap[panel.currentMap.getIndex()], x, y, width, height, null);
// DRAW PLAYER
double scale = (double)(panel.tileSize * panel.maxWorldCol)/width;
int playerX = (int)(x + panel.player.worldX/scale);
int playerY = (int)(y + panel.player.worldY/scale);
int playerSize = (int)(panel.tileSize/scale);
g2.drawImage(panel.player.down1, playerX, playerY, playerSize, playerSize, null);
// HINT
g2.setFont(panel.ui.font.deriveFont(32F));
g2.setColor(Color.white);
g2.drawString("Press M to close", 750, 550);
}
public void drawMiniMap(Graphics2D g2) {
if(!miniMapOn) return;
// DRAW MAP
int width = 300;
int height = 300;
int x = panel.screenWidth - width - 50;
int y = 50;
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
g2.drawImage(worldMap[panel.currentMap.getIndex()], x, y, width, height, null);
// DRAW PLAYER
double scale = (double)(panel.tileSize * panel.maxWorldCol)/width;
int playerX = (int)(x + panel.player.worldX/scale);
int playerY = (int)(y + panel.player.worldY/scale);
int playerSize = (int)(panel.tileSize/3);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f));
g2.drawImage(panel.player.down1, playerX-6, playerY-6, playerSize, playerSize, null);
}
}