add MiniMap functionality and integrate map state handling
This commit is contained in:
92
src/de/miaurizius/jgame2d/tile/MiniMap.java
Normal file
92
src/de/miaurizius/jgame2d/tile/MiniMap.java
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user