add dungeon area transitions and update sound effects for new locations

This commit is contained in:
2026-03-24 10:32:35 +01:00
parent 6ef2391719
commit 7bbbd8f72b
6 changed files with 45 additions and 5 deletions

View File

@@ -78,6 +78,8 @@ public class GamePanel extends JPanel implements Runnable {
// GAME STATE
public GameState gameState;
public Map.Area currentArea;
public Map.Area nextArea;
public GamePanel() throws IOException {
this.setPreferredSize(new Dimension(screenWidth, screenHeight));
@@ -252,6 +254,7 @@ public class GamePanel extends JPanel implements Runnable {
assetSetter.setITiles();
eManager.setup();
gameState = GameState.TITLE;
currentArea = Map.Area.OUTSIDE;
tempScreen = new BufferedImage(screenWidth, screenHeight, BufferedImage.TYPE_INT_RGB);
fg2 = (Graphics2D) tempScreen.getGraphics();
@@ -279,4 +282,15 @@ public class GamePanel extends JPanel implements Runnable {
assetSetter.setITiles();
eManager.lighting.resetDay();
}
public void changeArea() {
if(nextArea != currentArea) {
stopMusic();
if(nextArea == Map.Area.OUTSIDE) playMusic(0);
else if(nextArea == Map.Area.DUNGEON) playMusic(19);
else if(nextArea == Map.Area.INDOOR) playMusic(18);
}
currentArea = nextArea;
nextArea = null;
// assetSetter.setMonster();
}
}

View File

@@ -414,6 +414,7 @@ public class UI {
panel.player.worldY = panel.tileSize * panel.eventH.tempRow;
panel.eventH.prevEventX = panel.player.worldX;
panel.eventH.prevEventY = panel.player.worldY;
panel.changeArea();
}
private void drawTradeScreen() {
switch(tradeState) {

View File

@@ -2,15 +2,19 @@ package de.miaurizius.jgame2d.core.enums;
public enum Map {
OVERWORLD("worldmap", 0),
HUT("indoor01", 1);
OVERWORLD("worldmap", 0, Area.OUTSIDE),
HUT("indoor01", 1, Area.INDOOR),
DUNGEON_FIRST_FLOOR("dungeon01",2, Area.DUNGEON),
DUNGEON_SECOND_FLOOR("dungeon02", 3, Area.DUNGEON);
private final String name;
private final int index;
private final Area area;
Map(String name, int index) {
Map(String name, int index, Area area) {
this.name = name;
this.index = index;
this.area = area;
}
public String getName() {
@@ -20,4 +24,15 @@ public enum Map {
public int getIndex() {
return index;
}
public Area getArea() {
return area;
}
public enum Area {
INDOOR,
OUTSIDE,
DUNGEON
}
}

View File

@@ -72,6 +72,12 @@ public class EventHandler {
else if(hit(Map.OVERWORLD, 10, 39, null)) changeMap(Map.HUT, 12, 13);
else if(hit(Map.HUT, 12, 13, null)) changeMap(Map.OVERWORLD, 10, 39);
//DUNGEON
else if(hit(Map.OVERWORLD, 12,9, null)) changeMap(Map.DUNGEON_FIRST_FLOOR, 9, 41); //enter
else if(hit(Map.DUNGEON_FIRST_FLOOR, 9,41, null)) changeMap(Map.OVERWORLD, 12,9); //leave
else if(hit(Map.DUNGEON_FIRST_FLOOR, 8,7, null)) changeMap(Map.DUNGEON_SECOND_FLOOR, 26, 41); //enter b2
else if(hit(Map.DUNGEON_SECOND_FLOOR, 26, 41, null)) changeMap(Map.DUNGEON_FIRST_FLOOR, 8, 7); //enter b1
// ADVANCED SPEAKING
else if(hit(Map.HUT, 12, 9, Direction.UP)) speak(panel.npc[Map.HUT.getIndex()][0]);
}
@@ -129,6 +135,7 @@ public class EventHandler {
tempCol = col;
tempRow = row;
canTouchEvent = false;
panel.nextArea = map.getArea();
panel.playSE(13);
}
private void speak(Entity entity) {

View File

@@ -38,6 +38,8 @@ public class Sound {
load(15, "assets/sounds/blocked.wav");
load(16, "assets/sounds/parry.wav");
load(17, "assets/sounds/speak.wav");
load(18, "assets/sounds/Merchant.wav");
load(19, "assets/sounds/Dungeon.wav");
}
@Deprecated

View File

@@ -1,6 +1,7 @@
package de.miaurizius.jgame2d.environment;
import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.core.enums.Map;
import java.awt.*;
import java.awt.image.BufferedImage;
@@ -19,8 +20,8 @@ public class Lighting {
}
public void draw(Graphics2D g2) {
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, filterAlpha));
g2.drawImage(darknessFilter, 0, 0, null);
if(panel.currentArea == Map.Area.OUTSIDE) g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, filterAlpha));
if(panel.currentArea == Map.Area.OUTSIDE || panel.currentArea == Map.Area.DUNGEON) g2.drawImage(darknessFilter, 0, 0, null);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1F));
// DEBUG